TP 2 M3
1. Arduino Uno
2. Seven Segment
4. Resistor
Diagram Blok :
2. Prosedur Percobaan [Kembali]
1. Rangkai semua komponen sesuai kondisi yang dipilih
2. buat program di aplikasi arduino IDE
3. setelah selesai masukkan program ke arduino di proteus
4. jalankan program pada simulasi dan cobakan sesuai dengan modul dan kondisi
5. Selesai
Program Perhitungan dan Tampilan Hasil pada Seven Segment
Program yang Anda jelaskan akan dijalankan pada Arduino master terlebih dahulu. Program ini akan menghitung jumlah switch yang aktif pada DIP switch. Ada dua kondisi utama dalam program ini:
Kondisi 1:
- Jika 3 switch aktif, maka seven segment akan menampilkan angka dari 0-5 pada digit pertama dan 6-9 pada digit kedua.
Kondisi 2:
- Jika 4 switch aktif, maka seven segment akan menampilkan angka dari 6-9 pada digit pertama dan 0-5 pada digit kedua.
Kondisi Lainnya:
- Jika jumlah switch yang aktif tidak sesuai dengan kondisi 1 atau 2, maka seven segment tidak akan menampilkan angka.
Proses Alur Program:
- Program dijalankan pada Arduino master.
- Program membaca status DIP switch dan menghitung jumlah switch yang aktif.
- Program menentukan kondisi yang sesuai berdasarkan jumlah switch yang aktif.
- Program mengirimkan perintah ke Arduino slave berdasarkan kondisi yang ditentukan.
- Arduino slave menerima perintah dari Arduino master.
- Arduino slave menampilkan angka pada seven segment sesuai dengan perintah yang diterima.
Peran Arduino Master dan Arduino Slave:
- Arduino Master: Berfungsi untuk membaca status DIP switch, menghitung jumlah switch yang aktif, menentukan kondisi yang sesuai, dan mengirimkan perintah ke Arduino slave.
- Arduino Slave: Berfungsi untuk menerima perintah dari Arduino master dan menampilkan angka pada seven segment sesuai dengan perintah yang diterima.
Komunikasi Antara Arduino Master dan Arduino Slave:
Komunikasi antara Arduino master dan Arduino slave dapat dilakukan menggunakan berbagai metode, seperti UART, I2C, atau SPI. Dalam program ini, metode yang digunakan tidak disebutkan secara eksplisit.
Program yang Anda jelaskan akan dijalankan pada Arduino master terlebih dahulu. Program ini akan menghitung jumlah switch yang aktif pada DIP switch. Ada dua kondisi utama dalam program ini:
Kondisi 1:
- Jika 3 switch aktif, maka seven segment akan menampilkan angka dari 0-5 pada digit pertama dan 6-9 pada digit kedua.
Kondisi 2:
- Jika 4 switch aktif, maka seven segment akan menampilkan angka dari 6-9 pada digit pertama dan 0-5 pada digit kedua.
Kondisi Lainnya:
- Jika jumlah switch yang aktif tidak sesuai dengan kondisi 1 atau 2, maka seven segment tidak akan menampilkan angka.
Proses Alur Program:
- Program dijalankan pada Arduino master.
- Program membaca status DIP switch dan menghitung jumlah switch yang aktif.
- Program menentukan kondisi yang sesuai berdasarkan jumlah switch yang aktif.
- Program mengirimkan perintah ke Arduino slave berdasarkan kondisi yang ditentukan.
- Arduino slave menerima perintah dari Arduino master.
- Arduino slave menampilkan angka pada seven segment sesuai dengan perintah yang diterima.
Peran Arduino Master dan Arduino Slave:
- Arduino Master: Berfungsi untuk membaca status DIP switch, menghitung jumlah switch yang aktif, menentukan kondisi yang sesuai, dan mengirimkan perintah ke Arduino slave.
- Arduino Slave: Berfungsi untuk menerima perintah dari Arduino master dan menampilkan angka pada seven segment sesuai dengan perintah yang diterima.
Komunikasi Antara Arduino Master dan Arduino Slave:
Komunikasi antara Arduino master dan Arduino slave dapat dilakukan menggunakan berbagai metode, seperti UART, I2C, atau SPI. Dalam program ini, metode yang digunakan tidak disebutkan secara eksplisit.
4. Flowchart dan Listing Program [Kembali]
arduino master
//Master Arduino
#include<SPI.h> //Library for SPI
int dip[] = {2,3,4,5,6,7,8,9};
int dipvalue[] = {}; // Array kosong yang dideklarasikan untuk menyimpan nilai baca sakelar.
void setup (){
Serial.begin(9600); // Memulai Komunikasi Serial pada Baud Rate 115200
for(int i = 0; i < 8; i++){ // Loop untuk menetapkan mode pin
pinMode(dip[i], INPUT_PULLUP); // Menetapkan setiap pin sebagai input dengan resistor pull-up diaktifkan.
}
SPI.begin(); // Memulai komunikasi SPI sebagai master
SPI.setClockDivider(SPI_CLOCK_DIV8); // Mengatur clock untuk komunikasi SPI pada 8 (16/8=2Mhz)
digitalWrite(SS,HIGH); // Mengatur pin Slave Select (SS) ke HIGH, membuat perangkat slave tidak aktif hingga komunikasi dimulai.
}
void loop(void) {
byte Mastersend;
int x = 1;
int activeSwitches = 0; // Variabel untuk menghitung jumlah saklar yang aktif
// Membaca status saklar dan menghitung berapa yang aktif
for (int i = 0; i < 8; i++) {
dipvalue[i] = digitalRead(dip[i]);
if (dipvalue[i] == LOW) {
x = dip[i];
activeSwitches++; // Menambah penghitung activeSwitches jika saklar aktif
}
}
// Jika 3 saklar aktif, tampilkan counter 0-5 di digit pertama
if (activeSwitches == 3) {
// Tampilkan counter 0-5 di digit pertama
digitalWrite(SS, LOW);
Mastersend = 3; // Menetapkan nilai 3 ke Mastersend. Nilai ini akan digunakan untuk mengontrol perilaku tampilan.
Serial.println(Mastersend); // Mencetak nilai Mastersend ke monitor serial untuk debugging.
SPI.transfer(Mastersend); // Mengirim nilai Mastersend ke perangkat slave melalui komunikasi SPI.
delay(100);
// Lanjutkan counting dari 6-9 di digit kedua
}
// Jika 4 saklar aktif, tampilkan counter 0-5 di digit kedua
else if (activeSwitches == 4) {
// Tampilkan counter 0-5 di digit kedua
digitalWrite(SS, LOW);
Mastersend = 4; // Shift 4 bit ke kiri untuk menetapkan digit kedua
Serial.println(Mastersend);
SPI.transfer(Mastersend);
delay(100);
// Lanjutkan counting dari 6-9 di digit pertama
}
}
ARDUINO SLAVE
#include <SPI.h>
// Pinout untuk tujuh segmen display
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
// Variabel untuk menandai apakah data telah diterima dari master
volatile boolean received = false;
// Variabel untuk menyimpan data yang diterima dari master
volatile byte Slavereceived;
// Variabel untuk indeks
int index;
// Pin untuk mengontrol digit pertama dan kedua pada tujuh segmen display
int dg1 = A1;
int dg2 = A0;
void setup() {
Serial.begin(9600);
// Setiap pin segment sebagai output
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
// Set pin digit sebagai output
pinMode(dg1, OUTPUT);
pinMode(dg2, OUTPUT);
// Aktifkan SPI dalam mode slave
SPCR |= _BV(SPE);
// Aktifkan interrupt untuk komunikasi SPI
SPI.attachInterrupt();
}
// Fungsi ISR (Interrupt Service Routine) untuk menangani interrupt SPI
ISR (SPI_STC_vect) {
// Menyimpan nilai yang diterima dari master ke variabel Slavereceived
Slavereceived = SPDR;
// Set flag received sebagai true
received = true;
}
// Fungsi untuk menampilkan karakter pada tujuh segmen display
void displayCharacter(int ch) {
// Pola untuk digit dari 0 hingga 9 pada tujuh segmen display
byte patterns[10][7] = {
{0, 0, 0, 0, 0, 0, 1}, // 0
{1, 0, 0, 1, 1, 1, 1}, // 1
{0, 0, 1, 0, 0, 1, 0}, // 2
{0, 0, 0, 0, 1, 1, 0}, // 3
{1, 0, 0, 1, 1, 0, 0}, // 4
{0, 1, 0, 0, 1, 0, 0}, // 5
{0, 1, 0, 0, 0, 0, 0}, // 6
{0, 0, 0, 1, 1, 1, 1}, // 7
{0, 0, 0, 0, 0, 0, 0}, // 8
{0, 0, 0, 0, 1, 0, 0} // 9
};
// Jika nilai berada dalam rentang 0-9
if ((ch >= 0 && ch <= 9)) {
// Mendapatkan indeks digit (0-9) dari karakter
int index = ch;
// Menulis pola ke pin segmen
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], patterns[index][i]);
}
}
}
// Fungsi loop
void loop() {
// Jika data diterima dari master
if (received) {
Serial.println(Slavereceived);
// Jika data yang diterima adalah 3
if (Slavereceived == 3) {
// Menampilkan angka dari 0 hingga 5 pada digit pertama
for (int i = 0; i <= 9; i++) {
if (i <= 5) {
digitalWrite(dg1, HIGH);
digitalWrite(dg2, LOW);
displayCharacter(i);
delay(100);
} else {
// Menampilkan angka dari 6 hingga 9 pada digit kedua
digitalWrite(dg2, HIGH);
digitalWrite(dg1, LOW);
displayCharacter(i);
delay(100);
}
}
}
// Jika data yang diterima adalah 4
else if (Slavereceived == 4) {
// Menampilkan angka dari 0 hingga 5 pada digit kedua
for (int i = 0; i <= 9; i++) {
if (i <= 5) {
digitalWrite(dg1, LOW);
digitalWrite(dg2, HIGH);
displayCharacter(i);
delay(100);
} else {
// Menampilkan angka dari 6 hingga 9 pada digit pertama
digitalWrite(dg2, LOW);
digitalWrite(dg1, HIGH);
displayCharacter(i);
delay(100);
}
}
}
// Jika data yang diterima bukan 3 atau 4
else {
// Menampilkan angka dari 0 hingga 9 pada digit kedua
for (int i = 0; i <= 9; i++) {
if (i <= 5) {
digitalWrite(dg1, LOW);
digitalWrite(dg2, HIGH);
displayCharacter(i);
delay(100);
} else {
// Menampilkan angka dari 6 hingga 9 pada digit pertama
digitalWrite(dg2, LOW);
digitalWrite(dg1, HIGH);
displayCharacter(i);
delay(100);
}
}
}
received = false; // Reset flag received setelah pemrosesan data
}
}
b. Flowchart
5. Kondisi [Kembali]Kondisi : Percobaan 2 Kondisi 3
Jika 3 Switch aktif maka counting 0 - 5 pada digit 1 dan 6 - 9 pada digit 2, Jika 4 Switch aktif maka counting 0 - 5 pada digit 2 dan 6 - 9 pada digit 1
Download Simulasi Rangkaian Klik disini
Download HTML Klik disini
Download Video Simulasi Klik disini
Download Datasheet ARDUINO UNO klik disini
Download Datasheet Dipswitch klik disini
Komentar
Posting Komentar