1. Foto Hardware dan Diagram Blok [Kembali]
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
Pada rangkaian, protoko komunikasi yang digunakan adalah SPI. PIn SCK, MISO, dan MOSI secara berurutan terhubung ke pin 13, 12, dan 11 arduino. DIP switch terhubung ke Arduino master, sedangkan 7-segment terhubung ke arduino slave.
Jika pada DIP switch 3 Switch aktif maka counting 1 - 9 pada digit 1 lalu pada digit 2, sedangkan jika 4 Switch aktif maka counting 1 - 9 pada digit 2 lalu pada digit 1
4. Flowchart dan Listing Program [Kembali]
master
#include <SPI.h> // Memasukkan library SPI untuk komunikasi serial.
int dip[] = {2, 3, 4, 5, 6, 7, 8, 9}; // Mendeklarasikan array pin untuk switch DIP.
int dipvalue[] = {}; // Array untuk menyimpan status dari switch DIP.
int activeSwitchCount = 0; // Variabel untuk menghitung jumlah switch yang aktif.
void setup() {
Serial.begin(9600); // Memulai komunikasi serial pada baud rate 9600.
for (int i = 0; i < 8; i++) {
pinMode(dip[i], INPUT_PULLUP); // Mengatur pin sebagai input dengan pull-up resistor.
}
SPI.begin(); // Memulai komunikasi SPI.
SPI.setClockDivider(SPI_CLOCK_DIV8); // Mengatur pembagi clock SPI.
digitalWrite(SS, HIGH); // Mengatur pin SS sebagai HIGH (slave tidak aktif).
}
void loop() {
byte Mastersend; // Variabel untuk menyimpan data yang akan dikirim ke slave.
activeSwitchCount = 0; // Mereset jumlah switch yang aktif.
// Menghitung jumlah switch yang aktif (status LOW).
for (int i = 0; i < 8; i++) {
dipvalue[i] = digitalRead(dip[i]); // Membaca status switch DIP.
if (dipvalue[i] == LOW) {
activeSwitchCount++; // Menambahkan counter jika switch aktif.
}
}
// Mengirim jumlah switch yang aktif ke perangkat slave.
digitalWrite(SS, LOW); // Mengaktifkan slave dengan mengatur pin SS ke LOW.
Mastersend = activeSwitchCount; // Menyimpan jumlah switch aktif ke variabel Mastersend.
Serial.println(Mastersend); // Mencetak jumlah switch aktif ke serial monitor.
SPI.transfer(Mastersend); // Mengirim data ke slave melalui SPI.
digitalWrite(SS, HIGH); // Menonaktifkan slave dengan mengatur pin SS ke HIGH.
delay(100); // Memberikan jeda waktu 100 milidetik sebelum loop berikutnya.
}
slave
#include <SPI.h>
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
const int digitPins[] = {1, 0}; // Pin untuk digit 1 dan digit 2
volatile boolean received = false; // Variabel volatile untuk penerimaan data SPI.
volatile byte Slavereceived;
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
};
void setup() {
Serial.begin(9600);// Memulai komunikasi serial.
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
for (int i = 0; i < 2; i++) {
pinMode(digitPins[i], OUTPUT);// Mengatur pin segmen dan digit sebagai OUTPUT.
}
SPCR |= _BV(SPE); // Mengaktifkan SPI sebagai slave.
SPI.attachInterrupt(); // Mengaktifkan interrupt SPI.
}
// Interrupt Service Routine untuk penerimaan data SPI.
ISR(SPI_STC_vect) {
Slavereceived = SPDR;
received = true;
}
void loop() {
if (received) {
if (Slavereceived == 3) {
// Counting 1-9 on digit 1 then digit 2
for (int i = 1; i <= 9; i++) {
displayCharacter(i, 0); // Digit 1
delay(20);
displayCharacter(i, 1); // Digit 2
delay(20);
}
} else if (Slavereceived == 4) {
// Counting 1-9 on digit 2 then digit 1
for (int i = 1; i <= 9; i++) {
displayCharacter(i, 1); // Digit 2
delay(20);
displayCharacter(i, 0); // Digit 1
delay(20);
}
}
received = false;
}
}
void displayCharacter(int ch, int digit) { // Fungsi untuk menampilkan karakter pada 7-segment display.
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], patterns[ch][i]); // Mengatur segmen berdasarkan pola yang didefinisikan.
}
digitalWrite(digitPins[digit], LOW); // Aktifkan digit yang dipilih
}
Jika 3 Switch aktif maka counting 1 - 9 pada digit 1 lalu pada digit 2, Jika 4 Switch aktif maka counting 1 - 9 pada digit 2 lalu pada digit 1
- HTML↠ klik disini
- Listing Program↠ klik disini
- Video Percobaan↠ klik disini
- Rangkaian Simulasi









Tidak ada komentar:
Posting Komentar