[Kembali ke Menu Sebelumnya]

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

MODUL 3: Communication
Selasa, 30 April 2024
Tugas Pendahuluan 2

1. Prosedur [Daftar Isi]
1. Susunlah susunan komponen dalam perangkat lunak Proteus sesuai dengan kondisi eksperimen.
2. Buatlah skrip untuk perangkat Arduino menggunakan perangkat lunak Arduino IDE.
3. Lakukan proses kompilasi untuk skrip tersebut, kemudian unggah ke perangkat Arduino.
4. Setelah proses pengunggahan selesai, aktifkan simulasi rangkaian dalam perangkat lunak Proteus.

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, 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 [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 Simulasi [Daftar Isi]
Percobaan 5


7. Download File [Daftar Isi]
Untuk HTML di sini
Unduh Rangkaian Simulasi di sini
Unduh Program di sini
Unduh Video Simulasi di sini
Unduh Datasheet Arduino UNO di sini