PERCOBAAN 3
KOMUNIKASI I2C MENGGUNAKAN ARDUINO
1. Rangkai komponen sesuai percobaan dan kondisi yang dipilih.
2. Buat program menggunakan Arduino IDE.
3. Transfer program yang telah dibuat ke Arduino yang ada di Proteus.
4. Uji coba program di simulasi sesuai dengan kondisi yang diinginkan.
5. Proses selesai setelah uji coba berhasil dilakukan.
2. Hardware dan Diagram Blok
[Kembali]
a. Hardware
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
B. Prinsip Kerja
MASTER
Arduino master berfungsi untuk membaca input yang diberikan oleh keypad kemudian menerjemahkan input tersebut menjadi sebuah pesan sesuai dengan kondisi yang diberikan. berdasarkan kondisi, key A- D menampilkan huruf A- D secara berturut- turut. ketika key 1, 2, dan 3, ditekan, maka inputan tersebut akan diterjemahkan menjadi pesan "A". Jika key 4, 5, 6 ditekan, maka inputan tersebut akan ditulisan sebagai pesan "B". Ketika tombol yang ditekan adalah 7, 8, 9 maka inputan tersebut akan diterjemahkan menjadi pesan "C" sedangkan ketika input yang diberikan selain yang ditulisakn sbeelumnya, maka diterjemahkan menjadi pesan "D". Kemudian pesan tersebut akan dikirimkan oleh arduino master ke arduino slave melalui komunikasi I2C.
SLAVE
Arduino slvae berfungsi untuk menerima pesan yang dikirimkan oeh arduino master. Arduino salve dihubungkan dengan LCD sebagai output untuk menampilkan instruksi yang dibawa oelh pesan. Berdasarkan kondisi, huruf akan ditempilkan akan mengalami blinking pada kolom pertama. Ketika pesan yang diterima adalah A, maka LCD akan menampilkan huruf "A", ketika pesan yang diterima adalah B, maka LCD akan menampilkan huruf "B", ketika pesan yang diterima adalah C, maka LCD akan menampilkan huruf "C", sedangkan ketika pesan yang diterima adalah D, maka LCD akan menampilkan huruf "D". Pesan tersebut diterima oleh arduino slave melalui komunikasi I2C.
4. Flowcharth dan Listing Program [Kembali]
a. Flowcharth
Master:
#include <Keypad.h>
#include <Wire.h>
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'},
};
char rowPins[ROWS] = {9, 8, 7, 6};
char colPins[COLS] = {5, 4, 3};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Wire.begin(); // join i2c bus (address optional for master)
}
void loop() {
char key = keypad.getKey();
if (key) {
char letter;
if (key == '1' || key == '2' || key == '3') {
letter = 'A';
} else if (key == '4' || key == '5' || key == '6') {
letter = 'B';
} else if (key == '7' || key == '8' || key == '9') {
letter = 'C';
} else {
letter = 'D';
}
Wire.beginTransmission(4); // transmit to device #4
Wire.write(letter);
Wire.endTransmission(); // stop transmitting
delay(100); // Added delay for stability
}
}
Slave:
#include <LiquidCrystal.h>
#include <Wire.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Sesuaikan pin sesuai dengan koneksi LCD
char receivedLetter;
bool letterReceived = false;
void setup() {
lcd.begin(16, 2);
Wire.begin(4); // join i2c bus with address #4
Wire.onReceive(receiveEvent); // register event
Serial.begin(9600); // start serial for output
}
void loop() {
if (letterReceived) {
for (int i = 0; i < 5; i++) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(receivedLetter);
delay(300); // Wait for 300ms
lcd.clear(); // Clear LCD
delay(300); // Wait for another 300ms
}
letterReceived = false; // Reset letterReceived flag
}
}
void receiveEvent(int howMany) {
receivedLetter = Wire.read(); // Read the received character
letterReceived = true; // Set the flag to indicate letter received
}
5. Kondisi
[Kembali]
Percobaan 3 kondisi 5
5. Video Simulasi
[Kembali]
Download HMTL Klik disini
Download Program Klik disini
Download Video Percobaan Klik disini
Download Datasheet ARDUINO UNO klik disini
Download Datasheet Keypad klik disini