F Renaldi Kapri Utama (2110957003) : Laporan Akhir 2

Laporan Akhir 2




Percobaan V

Komunikasi I2C

1. Prosedur [Kembali]

  1.  Rangkai komponen sesuai percobaan dan kondisi yang dipilih.
  2. Buat program menggunakan Arduino IDE.
  3. Compile program yang telah dibuat lalu Upload ke dalam Arduino Uno.
  4. Uji coba program pada rangkaian percobaan sesuai dengan kondisi yang diinginkan.
  5. Selesai

2. Hardware dan Diagram Blok [Kembali]


1. Arduino Uno


Gambar 1. Arduino Uno

2. Push Button

Gambar 2. Push Button

3. LED

Gambar 3. LED
4. ESP 32
Gambar 4. ESP32


=> Diagram Blok:

Gambar 5. Diagram Blok

3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]


=> Rangkaian Simulasi :
Gambar 6. Rangkaian
=> Prinsip Kerja :

Dalam percobaan yang dilakukan, komunikasi antara dua Arduino menggunakan protokol I2C. Proses dimulai ketika Arduino yang berperan sebagai master menginisiasi transmisi dengan mengirimkan sinyal start, yang kemudian diikuti dengan pengiriman alamat slave yang dituju dan operasi yang akan dilakukan. Setelah mengidentifikasi slave yang tepat, Arduino master menunggu respons dari slave. Komunikasi data antara keduanya terjadi secara serial dan disinkronkan dengan sinyal clock, memastikan setiap bit data diterima dengan benar. Proses ini diakhiri dengan Arduino master mengirimkan sinyal stop untuk menyelesaikan transmisi data.

Di sisi slave, perangkat Arduino bertugas untuk mengontrol LED berdasarkan nilai dari tombol yang ditekan. LED akan dinyalakan atau dimatikan sesuai dengan nilai tombol yang diproses. Jika nilai tombol yang ditekan adalah genap, LED akan dikendalikan oleh tombol bawah, sedangkan jika nilai tombol yang ditekan adalah ganjil, LED akan dikendalikan oleh tombol atas. Informasi mengenai nilai tombol yang ditekan ditampilkan pada layar virtual terminal dengan angka 0-3. Angka yang ditampilkan pada layar tersebut memiliki dua digit: angka di sebelah kanan mewakili nilai tombol bawah (genap), sedangkan angka di sebelah kiri mewakili nilai tombol atas (ganjil).

Dengan demikian, komunikasi antara kedua Arduino dalam rangkaian ini tidak hanya melibatkan pengiriman dan penerimaan data melalui protokol I2C, tetapi juga pengontrolan LED berdasarkan nilai tombol yang ditekan, dengan informasi nilai tombol yang ditampilkan secara visual melalui layar virtual terminal.


=>Flowchart :
Gambar 7. Flowchart Percobaan 5

=>ListingProgram :
  • Master
#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
#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() {
// Nothing to do here, all actions are performed in the receiveEvent function
}
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
}
}
}


Komunikasi I2C Antara 2 Arduino dengan input Push Bitton dan output LED

6. Video Demo [Kembali]

Video 1. Penjelasan Rangkaian

7. Analisa [Kembali]

Gambar 8. Analisa


a. HTML                                [klik disini]
b. Video Percobaan                [klik disini]
c. Listing Program                 [klik disini]
d. Datasheet Arduino             [klik disini]
e. Datasheet Push Button       [klik disini]
f. Datasheet LED                   [klik disini]
g. Datasheet ESP32               [klik disini]

Tidak ada komentar:

Posting Komentar