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]
Arduino master memiliki tanggung jawab utama dalam sistem ini. Ia bertugas untuk membaca input dari sebuah set dipswitch dan kemudian mengirimkan pesan ke Arduino slave berdasarkan kondisi yang dideteksinya. Ada enam tombol switch yang terhubung ke pin input Arduino master, dan konfigurasi pull-up memungkinkan mereka untuk menentukan logika 1 atau 0 pada pin input tersebut.
Arduino master secara terus-menerus memonitor kondisi tombol menggunakan fungsi `digitalRead()` untuk setiap pin input. Ketika kondisi tombol memenuhi persyaratan untuk mengaktifkan running LED (yaitu ketika lima tombol pull-up tertekan), Arduino master akan mengirimkan pesan 'B' melalui jalur komunikasi serial. Jika kondisi tombol memenuhi persyaratan untuk mengaktifkan tiga LED (ketika semua tombol pull-up tertekan), Arduino master akan mengirimkan pesan 'A' melalui jalur komunikasi serial.
Arduino slave, di sisi lain, memiliki tugas untuk menerima pesan-pesan yang dikirimkan oleh Arduino master dan bertindak sesuai dengan instruksi yang diterima. Ada enam LED yang terhubung ke pin output Arduino slave, dan LED-LED ini akan dikendalikan berdasarkan pesan yang diterima.
Arduino slave secara terus-menerus memantau komunikasi serial untuk menerima pesan baru dari Arduino master. Ketika pesan 'B' diterima, Arduino slave akan memicu urutan LED yang berjalan, di mana setiap LED akan menyala dan mematikan secara berurutan dari LED kedua hingga keenam. Sebaliknya, ketika pesan 'A' diterima, Arduino slave akan mengaktifkan tiga LED.
Dengan cara ini, Arduino master dan slave dapat berkomunikasi dan mengontrol LED sesuai dengan aksi yang dilakukan pada Arduino master, memberikan respons melalui LED. Ini menciptakan sebuah sistem yang interaktif dan responsif di mana perubahan pada input dipswitch dapat secara langsung tercermin pada output LED.
a. Flowcharth
b. Listing Program
Master:
int sw[] = {2, 3, 4, 5, 6, 7}; // Pin untuk switch
int i, sw_on;
char previous_state = '\0';
void setup() {
Serial.begin(9600);
for (i = 0; i < 6; i++) {
pinMode(sw[i], INPUT_PULLUP); // Mengatur semua switch sebagai input pull-up
}
}
void penjumlahan() {
sw_on = 0;
for (i = 0; i < 6; i++) {
sw_on += digitalRead(sw[i]);
}
}
void loop() {
penjumlahan();
char current_state;
if (sw_on == 6) { // Jika semua switch aktif
current_state = 'A';
} else if (sw_on == 5) { // Jika ada 5 switch aktif
current_state = 'B';
} else {
current_state = 'a';
}
if (current_state != previous_state) {
// Mengirimkan karakter pemisah sebelum command
Serial.write('#');
Serial.write(current_state);
// Mengirimkan karakter pemisah setelah command
Serial.write('$');
previous_state = current_state;
}
}
SLAVE:
// Array of LED pins
int ledPins[] = {2, 3, 4, 5, 6, 7};
int index; // Variable for iteration
char previousMessage = '\0'; // Variable to store the previous message received
void setup() {
Serial.begin(9600); // Begin serial communication
// Set all LED pins as output
for (index = 0; index < 6; index++) {
pinMode(ledPins[index], OUTPUT);
}
}
void loop() {
// Check if there is data available to read from serial
if (Serial.available()) {
// Read the incoming message
char receivedMessage = Serial.read();
// Check if the received message is different from the previous one
if (receivedMessage != previousMessage) {
// Update the previous message with the current one
previousMessage = receivedMessage;
// Perform actions based on the received message
if (receivedMessage == 'A') { // If all switches are active
// Turn on the first three LEDs and turn off the rest
for (index = 0; index < 3; index++) {
digitalWrite(ledPins[index], HIGH);
}
for (index = 3; index < 6; index++) {
digitalWrite(ledPins[index], LOW);
}
} else if (receivedMessage == 'B') { // If there are 5 active switches
// Activate running LEDs from the second LED to the last one
for (index = 1; index < 6; index++) {
digitalWrite(ledPins[index], HIGH);
delay(500);
digitalWrite(ledPins[index], LOW);
}
} else if (receivedMessage == 'a') { // If no switch is active
// Turn off all LEDs
for (index = 0; index < 6; index++) {
digitalWrite(ledPins[index], LOW);
}
}
}
}
}
5. Kondisi
[Kembali]
Percobaan 1 Kondisi 3
Semua Switch dalam kondisi Pull-up, semua switch mengaktifkan 3 led sementara 5 switch mengaktifkan running led dari led kedua hingga ke enam
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