LAPORAN AKHIR 1
Percobaan 5 (Komunikasi I2C)
1. Rangkai semua komponen sesuai dengan percobaan yang dipilih
2. Buat program di aplikasi aduino IDE
3. Hubungkan perangkat arduino ke perangkat laptop
4. Jalankan program pada arduino dan uji cobakan sesuai dengan modul
2. Hardware dan Diagram Blok [Kembali]
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
Rangkaian pada percobaan ini terdiri dari dua Arduino yang berkomunikasi menggunakan protokol I2C, di mana satu Arduino bertindak sebagai master dan yang lainnya sebagai slave. Pada Arduino master, terdapat dua tombol push button yang digunakan untuk mengontrol operasi pada Arduino slave. Ketika salah satu tombol ditekan, sinyalnya akan dikirim melalui bus I2C ke Arduino slave.
Pertama, program pada Arduino master membaca status tombol push button. Jika tombol kedua ditekan, counter pada master akan diinkremen sebanyak satu setiap kali tombol ditekan. Jika counter tersebut bernilai genap (modulo 2), maka program akan membaca status tombol pertama. Jika tombol pertama ditekan, counter akan diinkremen lagi dan nilai tersebut akan dikirim ke Arduino slave melalui komunikasi I2C. Selain itu, jika counter melebihi nilai 3, counter akan direset kembali ke 0.
Pada Arduino slave, programnya menunggu perintah yang dikirim melalui bus I2C dari Arduino master. Ketika menerima perintah, seperti nilai 1, 2, atau 3, Arduino slave akan menjalankan aksi sesuai perintah tersebut. Misalnya, jika nilai yang diterima adalah 1, maka semua LED yang terhubung akan dinyalakan; jika nilai adalah 2, semua LED akan dimatikan; dan jika nilai adalah 3, semua LED akan berkedip selama beberapa kali dengan delay tertentu. Perintah yang diterima akan diimplementasikan dalam bentuk aksi fisik pada LED yang terhubung ke Arduino slave.
4. Flowchart [Kembali]
A. Listing Program
// Master
#include <Wire.h>
#define SLAVE_ADDRESS 9 // Alamat Arduino slave
#define BUTTON1 2 // Pin untuk tombol push button 1
#define BUTTON2 3 // Pin untuk tombol push button 2
int buttonState1 = 0;
int buttonState2 = 0;
int buttonPrevState1 = 0;
int buttonPrevState2 = 0;
unsigned int counter = 0;
unsigned int count = 0;
void setup() {
Wire.begin(); // Inisialisasi komunikasi I2C
pinMode(BUTTON1, INPUT_PULLUP); // Set pin tombol 1 sebagai input dengan resistor pull-up internal
pinMode(BUTTON2, INPUT_PULLUP); // Set pin tombol 2 sebagai input dengan resistor pull-up internal
Serial.begin(9600); // Inisialisasi komunikasi serial untuk 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) {
counter++;
Wire.beginTransmission(SLAVE_ADDRESS);
Wire.write(counter); // Kirim perintah ke Arduino slave
Wire.endTransmission();
}
delay(50); // Delay untuk debouncing
}
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 // Pin awal untuk LED
void setup() {
Serial.begin(9600);
Wire.begin(9); // Inisialisasi komunikasi I2C sebagai Slave dengan alamat 9
Wire.onReceive(receiveEvent); // Daftarkan event untuk menerima data
for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
pinMode(i, OUTPUT); // Set pin LED sebagai output
}
}
void loop() {
// Tidak ada yang perlu dilakukan di sini, semua aksi dilakukan dalam fungsi receiveEvent
}
void receiveEvent(int numBytes) {
unsigned int command = Wire.read(); // Baca perintah yang masuk dari master
Serial.println(command);
delay(500);
if (command == 1) {
// Nyalakan semua LED
for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
digitalWrite(i, HIGH);
}
} else if (command == 2) {
// Matikan semua LED
for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
digitalWrite(i, LOW);
}
} else if (command == 3) {
// Berkedipkan semua LED
for (int j = 0; j < 5; j++) { // Ulangi berkedip 5 kali
for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
digitalWrite(i, HIGH);
delay(1000);
}
delay(500); // Delay untuk keadaan ON
for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
digitalWrite(i, LOW);
delay(1000);
}
delay(500); // Delay untuk keadaan OFF
}
}
}
B. Flowchart
5. Kondisi [Kembali]
Percobaan 5: Komunikasi I2C
6. Video Demo [Kembali]
7. Analisa [Kembali]
1. Bagaimana cara mengupload program arduino dengan komunikasi yang digunakan?
jawab: Cara mengunggah program pada arduino yang menggunakan komunikasi serial I2C dilakukan dengan saling tidak menghubungkan terlebih dahulu port komunikasi (pin SCL dan SDA) pada kedua arduino saat pengunggahan. Setelah program selesai diunggah, port komunikasi kedua arduino baru dihubungkan menggunakan kabel jumper.
2. Kenapa cara pengupload program pada komunikasi percobaan 5 tidak sama dengan cara pengupload-an program dengan komunikasi UART?
Jawab: Cara pengupload program pada komunikasi serial I2C berbeda dengan cara pengupload-an program dengan komunikasi UART karena keduanya memiliki karakteristik yang berbeda sehingga mempengaruhi proses pengupload-an. Pada komunikasi serial I2C, setiap perangkat memiliki alamat unik yang digunakan untuk berkomunikasi dengan perangkat lainnya dalam bus I2C. Ketika melakukan pengupload program pada perangkat yang menggunakan komunikasi I2C, penting untuk memastikan bahwa bus I2C tidak terhubung dengan perangkat lain yang dapat mengganggu proses upload atau menghasilkan konflik alamat.
Di sisi lain, dalam komunikasi UART, tidak ada alamat perangkat yang harus dipertimbangkan saat pengupload-an program. Komunikasi UART menggunakan jalur transmit (TX) dan receive (RX) yang sederhana untuk mentransfer data antara perangkat. Proses pengupload-an program dengan komunikasi UART biasanya tidak memerlukan pertimbangan terhadap pengaturan khusus seperti yang diperlukan dalam komunikasi I2C.
8. Download File [Kembali]
Download Html klik disini
Download Video Simulasi klik disini
Download Datasheet Arduino Uno klik disini
Download Datasheet Dip Switch klik disini
Download Datasheet LED klik disini
Tidak ada komentar:
Posting Komentar