LA 1-M3




Modul III
Percobaan 5

1. Prosedur
[Kembali]
 1. Rangkai komponen sesuai percobaan dan yang dipilih.

2. Buat program menggunakan Arduino IDE.

3. Transfer program yang telah dibuat ke Arduino Uno.

4. Uji coba program pada rangkaian percobaan sesuai dengan kondisi yang diinginkan.

5. Proses selesai setelah uji coba berhasil dilakukan.

2. Hardware dan Diagram Blok [Kembali]
a. Hardware
b. Diagram Blok

3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

a. Rangkaian Simulasi

b. Prinsip Kerja

 Komunikasi I2C, singkatan dari Inter-Integrated Circuit, merupakan sebuah protokol komunikasi serial yang menawarkan cara efisien dan handal untuk mentransfer data antara perangkat-perangkat dalam suatu sistem. Prinsip kerjanya melibatkan dua perangkat utama: master dan slave. Hubungan antara keduanya terjadi melalui dua jalur komunikasi, yaitu SDA (Serial Data Line) dan SCL (Serial Clock Line).

Pada awal proses komunikasi, master memulai dengan mengirimkan sinyal start ke bus I2C. Tindakan ini menandai awal dari transaksi yang akan dilakukan. Selanjutnya, master mengirimkan alamat slave yang dituju beserta bit yang menunjukkan jenis operasi yang akan dilakukan, apakah itu pembacaan (baca) atau penulisan (tulis). 

Setelah slave menerima alamatnya dan mengonfirmasikannya, master kemudian mengirimkan data atau instruksi ke slave melalui bus I2C. Data ini dikirimkan secara serial dan diikuti oleh konfirmasi dari slave bahwa data telah diterima dengan benar. 

Selanjutnya, proses komunikasi ditutup dengan master mengirimkan sinyal stop ke bus I2C, menandakan akhir dari transaksi. Ini membebaskan bus I2C dan memungkinkan perangkat lain untuk menggunakan jalur komunikasi.

Dengan prinsip-prinsip ini, komunikasi I2C menyediakan cara yang efisien dan handal untuk pertukaran data antara perangkat dalam sistem. Keunggulan protokol ini mencakup kemampuannya untuk mendukung banyak perangkat dalam satu bus, efisiensi penggunaan pin, serta kemampuan untuk beroperasi dalam berbagai kondisi lingkungan. Oleh karena itu, I2C sering digunakan dalam berbagai aplikasi, mulai dari sistem mikrokontroler hingga komunikasi antar-perangkat dalam perangkat elektronik rumah tangga dan industri.
 4. Flowcharth dan Listing Program [Kembali]
a. Flowcharth
b. Listing Program
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
 }
 }
}


5. Kondisi [Kembali]
Modul 3 Percobaan 5 Komunikasi I2C

6. Video Demo[Kembali]



7. Download File [Kembali]
Download HMTL Klik disini
Download Gambar Hardware Klik disini
Download Gambar Simulasi Klik disini
Download Video Demo klik disini
Download Listing Program klik disini
Datasheet Arduino klik disini
Datasheet Push Button klik disini
Datasheet LED klik disini
Datasheet Resistor klik disini