TP 1 - M3



1. Prosedur [Kembali]
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
 
1. Arduino Uno
 Spesifikasi:

2. Dipswitch
 
Spesifikasi:

3. RESISTOR

4. LED


b. Diagram Blok

3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
 



Prinsip Kerja

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.
 
4. Flowcharth dan Listing Program [Kembali]
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]






7. Download File [Kembali]

HTML klik disini  
Simulasi  klik disini
Gambar Simulasi  klik disini 
Video Simulasi  klik disini 
Listing Program klik disini
Datasheet Arduino klik disini
Datasheet Dipswitch klik disini
Datasheet LED klik disini
Datasheet Resistor klik disini