Percobaan 3
Komunikasi I2C Menggunakan Arduino
1. Foto Hardware dan Diagram Blok [Kembali]
Diagram Blok:
2. Prosedur Percobaan [Kembali]
+ Rangkai semua komponen
+ buat program di aplikasi arduino IDE
+ setelah selesai masukkan program ke arduino
+ jalankan program pada simulasi dan cobakan dengan modul
Prinsip Kerja
Pada rangkaian ini terdapat 2 arduino yaitu master dan slave. Master bertanggung jawab untuk mengirimkan pesan yang diinput dari keypad, sementara slave sebagai penerima dan menampilkan pesan tersebut pada LCD. Keduanya berkomunikasi melalui komunikasi I2C yang memungkinkan perangkat mikrokontroler saling berkomunikasi secara digital melalui pin SDA dan pin SCL.
Pada Arduino Master, inisialisasi komunikasi I2C dilakukan dengan memanggil fungsi 'Wire.begin()', yang menandakan bahwa Arduino tersebut akan berperan sebagai master dalam komunikasi I2C. Arduino Master terhubung pada sebuah keypad untuk memasukkan karakter. Setiap kali tombol ditekan, karakternya dikirimkan melalui jalur I2C ke Slave.
Pada Arduino Slave, juga terdapat inisialisasi komunikasi I2C dengan memanggil Wire.begin(9), yang menandakan bahwa Arduino tersebut akan berperan sebagai slave dengan alamat I2C 9. Pada Arduino Slave, ketika ada data yang diterima melalui jalur I2C dari master, fungsi 'receiveEvent' akan dipanggil secara otomatis. Di dalam fungsi ini, karakter yang diterima dibaca menggunakan 'Wire.read()' dan ditambahkan ke dalam variabel 'message'. Jika panjang pesan sudah lebih dari 16 karakter, karakter pertama akan dipotong agar pesan tetap dalam batas 16 karakter. Setelah itu, pesan akan ditampilkan pada LCD dengan memanggil fungsi 'displayMessage()'.
Pada Arduino Slave, juga terdapat inisialisasi komunikasi I2C dengan memanggil Wire.begin(9), yang menandakan bahwa Arduino tersebut akan berperan sebagai slave dengan alamat I2C 9. Pada Arduino Slave, ketika ada data yang diterima melalui jalur I2C dari master, fungsi 'receiveEvent' akan dipanggil secara otomatis. Di dalam fungsi ini, karakter yang diterima dibaca menggunakan 'Wire.read()' dan ditambahkan ke dalam variabel 'message'. Jika panjang pesan sudah lebih dari 16 karakter, karakter pertama akan dipotong agar pesan tetap dalam batas 16 karakter. Setelah itu, pesan akan ditampilkan pada LCD dengan memanggil fungsi 'displayMessage()'.
Dengan prinsip kerja ini, data dapat dikirim dari Arduino Master ke Arduino Slave melalui jalur I2C, dan Arduino Slave akan menampilkan pesan yang diterima pada layar LCD.
4. Flowchart dan Listing Program [Kembali]
Master Arduino:
Slave Arduino:
Listing Program:
Master
#include <Keypad.h>
const byte ROWS = 4; // Jumlah baris pada keypad
const byte COLS = 4; // Jumlah kolom pada keypad
// Matriks keypad
char keys[ROWS][COLS] = {
{'7','8','9','A'},
{'4','5','6','B'},
{'1','2','3','C'},
{'*','0','#','D'}
};
// Pin yang terhubung ke baris keypad
byte rowPins[ROWS] = {7, 8, 9, 10};
// Pin yang terhubung ke kolom keypad
byte colPins[COLS] = {3, 4, 5, 6};
// Membuat objek keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(9600);
Wire.begin(); // Mulai komunikasi I2C sebagai master
}
void loop() {
char key = keypad.getKey(); // Membaca tombol yang ditekan pada keypad
if (key != NO_KEY) { // Jika tombol ditekan
Serial.println(key); // Tampilkan tombol yang ditekan di serial monitor
Wire.beginTransmission(9); // Mulai transmisi ke slave dengan alamat 9
Wire.write(key); // Kirim tombol yang ditekan ke slave
Wire.endTransmission(); // Akhiri transmisi
delay(100); // Tunda sebentar untuk menghindari bouncing pada tombol
}
}
Slave
#include <Wire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Inisialisasi objek LCD dengan pin yang terhubung
String message = ""; // Pesan yang akan ditampilkan di LCD
void setup() {
lcd.begin(16, 2); // Inisialisasi LCD dengan ukuran 16x2
Wire.begin(9); // Mulai komunikasi I2C sebagai slave dengan alamat 9
Wire.onReceive(receiveEvent); // Panggil fungsi receiveEvent() saat menerima data dari master
}
void loop() {
// Tidak ada yang perlu dilakukan di loop()
}
void receiveEvent(int byteCount) {
while (Wire.available()) {
char receivedChar = Wire.read(); // Baca karakter yang diterima dari master
message += receivedChar; // Tambahkan karakter ke pesan
if (message.length() > 16) { // Jika panjang pesan lebih dari 16 karakter
message = message.substring(1); // Potong karakter pertama dari pesan
}
displayMessage(); // Tampilkan pesan pada LCD
}
}
void displayMessage() {
lcd.clear(); // Bersihkan layar LCD
lcd.setCursor(0, 0); // Set posisi kursor di baris pertama
lcd.print(message); // Tampilkan pesan di LCD
}
Pada kondisi 6 dari percobaan 3, Key A - D menampilkan huruf A - D secara berurut, huruf yang ditampilkan mengalami scroll ke kanan pada kolom pertama
᭒ HTML↠ klik disini
᭒ Rangkaian ↠ klik disini
᭒ Video Percobaan↠ klik disini
᭒ Datasheet Arduino↠ klik disini
᭒ Datasheet LCD↠ klik disini
᭒ Datasheet Keypad↠ klik disini
᭒ Datasheet Potensiometer↠ klik disini
Komentar
Posting Komentar