DAFTAR ISI
1. Prosedur
2. Hardware dan Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja
4. Flowchart dan Listing Program
5. Kondisi
6. Video Demo
7. Download File

MODUL 3: Communication
Selasa, 30 April 2024
Laporan Akhir 1

1. Prosedur
a. Susunlah seperti rangkaian yang ada,
b. Buka Arduino IDE dan masukkan listing program, 
c. Unggah program ke Arduino, dan
d. Variasikan sesuai kondisi.

2. Hardware dan Diagram Blok [Daftar Isi]
a) Modul Arduino

b) ESP32

c) Dipswitch

d) LED

e) Seven Segment

Percobaan 5


3. Rangkaian Simulasi dan Prinsip Kerja [Daftar Isi]
Percobaan 5

    Rangkaian ini terdiri dari dua buah Arduino: Arduino slave di sebelah kiri untuk menghasilkan output dan Arduino master di sebelah kanan untuk menerima input dari dua buah tombol. Tombol atas merupakan tombol logika dan tombol bawah merupakan tombol aktivasi. LED pada sisi slave akan menyala jika nilai tombol atas ganjil dan nilai tombol bawah genap. Nilai tombol dapat dilihat pada layar virtual terminal (virtual terminal tidak dipakai dalam demo, jadi diperkirakan saja), dengan angka 0-3, di mana angka kanan menunjukkan nilai tombol bawah dan angka kiri menunjukkan nilai tombol atas. Komunikasi ini menggunakan sistem komunikasi I2C.


4. Flowchart dan Listing Program [Daftar Isi]
Percobaan 5

//Master Arduino (sebelah kanan)
#include <Wire.h>
#define SLAVE_ADDRESS 9 // Slave Arduino address

#define BUTTON1 2 // Pin for the push button
#define BUTTON2 3
int buttonState1 = 0;
int buttonState2 = 0;
int buttonPrevState1 = 0;
int buttonPrevState2 = 0;
unsigned int counter = 0;
unsigned int count = 0;

void setup() {
  Wire.begin(); // Initialize I2C communication
  pinMode(BUTTON1, INPUT_PULLUP); // Set button pin as input with internal pull-up resistor
  pinMode(BUTTON2, INPUT_PULLUP);
  Serial.begin(9600); // Initialize serial communication for debugging
}

void loop() {
  buttonState1 = digitalRead(BUTTON1);
  buttonState2 = digitalRead(BUTTON2);
 
  if (buttonState2 != buttonPrevState2){
    if(buttonState2 == LOW){
      count++;
    }
    delay(50);
  }

  buttonPrevState2 = buttonState2;

  if(count > 3){
    count = 0;
  }
if(count % 2 == 0){
  if (buttonState1 != buttonPrevState1) {
    if (buttonState1 == LOW) {
      // Button is pressed
      counter++;
      Wire.beginTransmission(SLAVE_ADDRESS);
      Wire.write(counter); // Send command to the slave
      Wire.endTransmission();
    }
    delay(50); // Debouncing delay
  }
 
  buttonPrevState1 = buttonState1;

  if(counter > 3){
    counter = 0;
  }
}else if(count % 3 == 0){
  Wire.endTransmission();
}
Serial.print(count); Serial.println(counter);
}

//Slave Arduino (sebelah kiri)
#include <Wire.h>
#define LED_COUNT 8
#define LED_PIN_START 2 // Start pin for the LEDs

void setup() {
  Serial.begin(9600);
  Wire.begin(9); // Initialize I2C communication as Slave with address 9
  Wire.onReceive(receiveEvent); // Register event for receiving data
  for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
    pinMode(i, OUTPUT); // Set LED pins as output
  }
}

void loop() {
}

void receiveEvent(int numBytes) {
  unsigned int command = Wire.read(); // Read incoming command from master
  Serial.println(command);
  delay(500);
  if (command == 1) {
    // Turn all LEDs ON
    for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
      digitalWrite(i, HIGH);
    }
  } else if (command == 2) {
    // Turn all LEDs OFF
    for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
      digitalWrite(i, LOW);
    }
  } else if (command == 3) {
    // Blink all LEDs
    for (int j = 0; j < 5; j++) { // Repeat the blinking 5 times
      for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
        digitalWrite(i, HIGH);
        delay(1000);
      }
      delay(500); // Delay for ON state
      for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
        digitalWrite(i, LOW);
        delay(1000);
      }
      delay(500); // Delay for OFF state
    }
  }
}

5. Kondisi [Daftar Isi]
Pada percobaan kali ini, kami melakukan percobaan ke-5 yang berfokus pada mengkomunikasikan I2C tanpa kondisi.

6. Video Demo



7. Download File
Unduh HTML di sini
Unduh Video Demo di sini
Unduh Datasheet Arduino UNO di sini
Unduh Datasheet ESP32 di sini
Unduh Datasheet Dipswitch di sini
Unduh Datasheet LED di sini
Unduh Datasheet Seven Segment di sini