KOMUNIKASI
1. Rangkai komponen sesuai percobaan dan kondisi yang dipilih.
2. Buat program menggunakan Arduino IDE.
3. Transfer program yang telah dibuat ke Arduino yang ada di Proteus.
4. Uji coba program di simulasi sesuai dengan kondisi yang diinginkan.
5. Proses selesai setelah uji coba berhasil dilakukan.
2. Hardware dan Diagram Blok
[Kembali]
a. Hardware
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Prinsip Kerja
4. Flowcharth dan Listing Program [Kembali]
1) MASTER
Arduino master bertugas untuk membaca status tombol yang terhubung, mengidentifikasi tombol mana yang sedang aktif, dan mengirimkan informasi tentang tombol yang aktif ke Arduino slave melalui koneksi SPI. Setiap kali dalam iterasi loop, Arduino master membaca status tombol dan menyimpan nilai tombol yang aktif dalam variabel `digit'. Setelah itu, nilai `digit' dikirimkan ke Arduino slave melalui koneksi SPI. Arduino master akan menunggu untuk jangka waktu k sebelum mengulangi proses tersebut.
2) SLAVE
Arduino slave bertugas menerima pesan dari Arduino master dan mengatur LED sesuai instruksi yang diterima. Kode slave ini bertujuan untuk menerima data melalui komunikasi Serial Peripheral Interface (SPI) dan menampilkannya pada sebuah display segment. Setelah inisialisasi pin dan komunikasi serial, kode mengaktifkan SPI dan menyiapkan fungsi interrupt untuk menangani data masuk. Ketika data diterima, fungsi interrupt memprosesnya dan menyalakan segment yang sesuai pada display. Selanjutnya, dalam loop utama, kode mengecek apakah ada data yang diterima. Jika ada, karakter diterjemahkan ke dalam pola segmen yang sesuai dan ditampilkan pada display. Proses ini berulang secara terus-menerus. Dengan demikian, kode slave ini berfungsi untuk menerima dan menampilkan data yang diterima melalui SPI.
a. Flowcharth
b. Listing Program
Master:
#include <SPI.h>int dip[] = {2, 3, 4, 5, 6, 7, 8, 9};
int dipvalue[8] = {};
void setup() {
Serial.begin(9600);
for (int i = 0; i < 8; i++) {
pinMode(dip[i], INPUT_PULLUP);
}
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV8);
digitalWrite(SS, HIGH);
}
void loop() {
byte Mastersend = 0;
int x = 0;
for (int i = 0; i < 8; i++) {
dipvalue[i] = digitalRead(dip[i]);
if (dipvalue[i] == LOW) {
x++;
}
}
digitalWrite(SS, LOW);
Mastersend = x;
Serial.println(Mastersend);
SPI.transfer(Mastersend);
delay(1000);
}
SLAVE:
#include <SPI.h>
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
volatile boolean received = false;
volatile byte Slavereceived;
void setup() {
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 loop() {
if (received) {
displayCharacter(Slavereceived);
delay(1000);
received = false;
}
}
void displayCharacter(int ch) {
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
};
if (ch >= 0 && ch <= 8) {
// Get the digit index (0-9) from the character
int index = ch;
// Write the pattern to the segment pins
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], patterns[index][i]);
}
}
}
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
volatile boolean received = false;
volatile byte Slavereceived;
void setup() {
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 loop() {
if (received) {
displayCharacter(Slavereceived);
delay(1000);
received = false;
}
}
void displayCharacter(int ch) {
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
};
if (ch >= 0 && ch <= 8) {
// Get the digit index (0-9) from the character
int index = ch;
// Write the pattern to the segment pins
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], patterns[index][i]);
}
}
}
5. Kondisi
[Kembali]
Percobaan 2 Kondisi 5
Setiap 1 Switch aktif muncul angka sesuai jumlah switch yang aktif pada digit 1
6. Video Simulasi
[Kembali]
HTML klik disini
Simulasi klik disini
Gambar Simulasi klik disini
Video Simulasi klik disini
Listing Program klik disini
Datasheet Arduino klik disini