Percobaan 3
Komunikasi I2C Menggunakan Arduino
1. Foto Hardware dan Diagram Blok [Kembali]
3. LCD
Diagram Blok:
2. Prosedur Percobaan [Kembali]
+ Rangkai semua komponen
+ Buka Arduino IDE dan masukan listing Program
+ Upload program ke arduino
+ jalankan program pada simulasi dan cobakan dengan modul
Prinsip Kerja
Pada percobaan ini masih tetap menggunakan 2 tipe arduino yang bertindak sebagai Master (pengirim data) dan Slave (penerima data) dan untuk arduino master terhubung dengan keypad sebagai input dan arduino slave terhubung dengan LCD 16 x 2 sebagai output dan jenis komunikasi yang digunakan pada percobaan 3 ini adalah I2C
Pin yang digunakan untuk percobaan ini adalah SDA dan SCL, keypad yang diketahui sebagai input dapat berguna untuk memasukkan karakter yang kita inginkan sesuai kondisi yang diminta dan karakter tersebut akan dimunculkan/ ditampilkan pada LCD yang bertindak sebagai output pada percobaan ini
Dan karena tipe LCD yang digunakan adalah 16 x 2 maka hanya dapat menampilkan maksimal 16 karakter dan jika karakter 17 ditambahkan atau dimasukkan maka karakter ke-1 atau pertama akan terhapus dan tergantikan oleh karakter 17 diakhir.
4. Flowchart dan Listing Program [Kembali]
Master Arduino:
Slave Arduino:
Listing Program:
Master
// Master
#include <Keypad.h> // Library untuk keypad
#include <Wire.h> // Library untuk I2C communication
// Deklarasi jumlah baris dan kolom keypad beserta karakternya
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'A', 'B', 'C'},
{'D', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
// Pin yang digunakan untuk menghubungkan keypad dengan Arduino
char rowPins[ROWS] = {9, 8, 7, 6};
char colPins[COLS] = {5, 4, 3};
// Inisialisasi objek Keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Wire.begin(); // Memulai komunikasi I2C
}
void loop() {
// Mendapatkan karakter yang ditekan pada keypad
char key = keypad.getKey();
if (key) {
// Mengirim karakter melalui komunikasi I2C
Wire.beginTransmission(4); // Mulai transmisi ke perangkat dengan alamat #4
Wire.write(key);
Wire.endTransmission(); // Berhenti transmisi
}
}
Slave
// Slave Versi Biasa
#include <LiquidCrystal.h>
#include <Wire.h>
// Inisialisasi objek lcd dengan pin yang sesuai
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Variabel untuk menyimpan posisi kolom dan baris saat ini
int col = 0; // Kolom saat ini (dimulai dari 0)
int row = 0; // Baris saat ini (dimulai dari 0)
void setup() {
// Mulai LCD dengan ukuran 16x2
lcd.begin(16, 2);
// Mulai komunikasi dengan bus I2C dengan alamat #4
Wire.begin(4);
// Daftarkan fungsi receiveEvent() sebagai event ketika data diterima dari master
Wire.onReceive(receiveEvent);
// Mulai komunikasi serial dengan kecepatan 9600 bps
Serial.begin(9600);
}
void loop() {
// Tunda eksekusi program selama 100 milidetik
delay(100);
}
// Fungsi yang dieksekusi ketika data diterima dari master
void receiveEvent(int howMany) {
// Baca data yang diterima sebagai karakter
char c = Wire.read();
// Tampilkan karakter yang diterima melalui komunikasi serial
Serial.println(c);
// Periksa apakah posisi kolom sudah melebihi batas LCD
if (col >= 16) {
col = 0; // Reset ke posisi kolom awal
row++; // Pindah ke baris berikutnya
// Periksa apakah sudah mencapai batas baris LCD
if (row >= 2) {
row = 0; // Kembali ke baris awal
}
// Set posisi kursor LCD ke posisi baru
lcd.setCursor(col, row);
}
// Tampilkan karakter yang diterima ke LCD
lcd.write(c);
// Pindah ke kolom berikutnya
col++;
}
Sama seperti pada kondisi TP, LCD akan menampilkan karakter yang ditekan pada keypad sebagai input.
᭒ HTML↠ klik disini
᭒ Rangkaian ↠ klik disini
᭒ Video Percobaan↠ klik disini
᭒ Program Master↠ klik disini
᭒ Program Slave↠ klik disini
᭒ Datasheet Arduino↠ klik disini
᭒ Datasheet LCD↠ klik disini
᭒ Datasheet Keypad↠ klik disini






