1. Foto Hardware dan Diagram Blok [Kembali]
Diagram Blok:

2. Prosedur Percobaan [Kembali]
- Rangkai semua komponen
- Buat program di aplikasi arduino IDE
- Setelah selesai masukkan program ke arduino
- Jalankan program pada simulasi dan cobakan dengan modul
Prinsip Kerja
Pada percobaan 2 kondisi 2, komponen utama dari rangakainnya adalah dipswitch sebagai input, dual seven segment sebagai output, dan arduino uno sebagai mikrokontroler yang digunakan untuk menyimpan dan menjalankan program.
Pada rangkaian, digunakan 2 arduino uno yang masing-masingnya berfungsi sebagai master dan slave. Arduino master dihubungkan dengan dipswitch sebagai input, sementara arduino slave dihubungkan dengan display 7 segment sebagai output.
Arduino membaca input total dipswitch yang aktif. Setiap 1 switch aktif muncul, arduino mengirimkan Mastersend 1 ke arduino slave. Arduino slave yang menerima data tersebut memberi output pattern membentuk karakter 1 pada digit ke 1 pada display 7 segment. Dan begitupula saat 4 switch aktif, maka angka 4 akan muncul di kedua display.
4. Flowchart dan Listing Program [Kembali]
Master
Slave
Listing Program Master:
#include <SPI.h>
int dip[] = {2, 3, 4, 5, 6, 7, 8, 9};
int dipvalue[] = {}; //array untuk menyimpan nilai-nilai yang dibaca dari dip switch
int dipCount = 0; // variabel menghitung ds yang aktif
void setup() {
//Serial.begin(9600);
for (int i = 0; i < 8; i++) {
pinMode(dip[i], INPUT_PULLUP);
}
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV8); //Mengatur pembagian clock SPI menjadi SPI_CLOCK_DIV8
digitalWrite(SS, HIGH);
}
void loop() {
byte Mastersend = 0;
for (int i = 0; i < 8; i++) {
dipvalue[i] = digitalRead(dip[i]);
if (dipvalue[i] == LOW) {
dipCount++;
}
}
if (dipCount == 1) {
Mastersend = 1; //menyimpan nilai yang akan dikirimkan melalui protokol SPI
} else if (dipCount == 4) {
Mastersend = 4;
}
dipCount = 0; // Reset dip switch count for next iteration
digitalWrite(SS, LOW); //memulai komunikasi SPI dengan perangkat lain
SPI.transfer(Mastersend); //mengirim data jumlah ds yang aktif
delay(100);
}
Listing Program Slave:
#include
#define D1 A0
#define D2 A1
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
volatile boolean received = false;
volatile byte Slavereceived;
void setup() {
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
//Serial.begin(9600);
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
SPCR |= _BV(SPE);
SPI.attachInterrupt();
}
ISR(SPI_STC_vect) {
Slavereceived = SPDR;
received = true;
}
void displayCharacter(int digit, int digitPosition) {
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
};
// Write the pattern to the segment pins
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], patterns[digit][i]);
}
// Aktifkan digit yang sesuai
if (digitPosition == D1) {
digitalWrite(D1, HIGH);
digitalWrite(D2, LOW);
} else if (digitPosition == D2) {
digitalWrite(D1, LOW);
digitalWrite(D2, HIGH);
}
delay(5);
}
void loop() {
if (received) {
if (Slavereceived == 1) {
displayCharacter(1, D1); // Menampilkan angka 1 hanya pada digit 1
} else if (Slavereceived == 4) {
// Menampilkan angka 4 pada kedua digit
displayCharacter(4, D1);
displayCharacter(4, D2);
}
delay(100);
received = false;
}
}
Percobaan 2 Kondisi 2 : "Setiap 1 switch aktif muncul angka berbeda pada digit ke 1, setiap Switch aktif muncul angka pada kedua digit"
- HTML↠ klik disini
- File Rangkaian↠ klik disini
- Video Percobaan↠ klik disini
- Listing Program↠ master slave
- Datasheet Arduino↠ klik disini
- Datasheet 7 segment↠ klik disini
- Datasheet Dipswitch↠ klik disini









0 Komentar