Percobaan 3
Komunikasi I2C Menggunakan Arduino
1. Rangkai komponen sesuai percobaan dan kondisi yang dipilih.
2. Buat program menggunakan Arduino IDE.
3. Compile program yang telah dibuat lalu Upload ke dalam Arduino Uno.
4. Uji coba program pada rangkaian percobaan sesuai dengan kondisi yang diinginkan.
5. Selesai
2. Hardware dan Diagram Blok
[Kembali]
Hardware:
1.Arduino Uno
2.Keypad
3.LCD 16x2
Diagram Blok:
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
Rangkaian Simulasi :
Percobaa3 merupakaian komunikasi antar arduino dengan komunikasi I2C. pada rangkaian ini terdapat 2 arduino yang mana satu arduino berfungsi sebagai master yang akan memberi perintah sedangkan arduino yang lain sebagai slave atau penerima perintah/pengekesekusi perintah. pada rangkaian ini, input dari sistem berasal dari keypad yang dihubungkan ke pin arduino master. untuk outputnya berupa LCD 16x2 yang dihubungkan dengan pin arduino slave. Ketika tombol pada keypad kita tekan, maka output yang dihasilkan berupa tampilan dari karakter yang sesuai dengan tombol yang kita tekan pada layar LCD. misal kita menekan angka 1 di keypad, maka layar lcd akan menampilkan angka 1 dan seterusnya.
4. Flowchart dan Listing Program [Kembali]
Flowchart :
Master
Slave
ListingProgram :
Master
//Master Arduino
#include <Keypad.h>
#include <Wire.h>
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'A', 'B', 'C' },
{'D', '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)
}
//byte x = 0;
void loop(){
char key = keypad.getKey();
if (key) {
Wire.beginTransmission(4); // transmit to device #4
Wire.write(key);
Wire.endTransmission(); // stop transmitting
}
}
Slave
#include <LiquidCrystal.h>
#include <Wire.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Define LCD object with pin connections
char lcdText[17] = " "; // Array to store characters displayed on LCD
int lcdIndex = 0; // Index to keep track of the position in the lcdText array
void setup() {
lcd.begin(16, 2); // Initialize the LCD with 16 columns and 2 rows
Wire.begin(4); // Join the I2C bus as a slave with address #4
Wire.onReceive(receiveEvent); // Register the receiveEvent function to handle incoming data
Serial.begin(9600); // Start serial communication for debugging
}
void loop() {
delay(100); // Delay to avoid unnecessary looping
}
// Function that executes whenever data is received from the master
void receiveEvent(int howMany) {
char c = Wire.read(); // Receive the byte sent by the master and store it in a character variable
Serial.println(c); // Print the received character to the serial monitor for debugging
// Shift characters to the right in the first column
for (int i = 15; i >= 1; i--) {
lcdText[i] = lcdText[i - 1];
}
lcdText[0] = c; // Insert the received character at the beginning of the array
// Display the updated array on the LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(lcdText);
}
6. Kondisi
[Kembali]
Percobaan 3 ( Komunikasi I2C Menggunakan Arduino - rangkaian sesuai dengan modul dan program sama dengan TP)
Datasheet Keypad klik disini
Datasheet LCD 16x2 klik disini
Tidak ada komentar:
Posting Komentar