PERCOBAAN 5
Rangkaian Komunikasi I2C
- Rangkailah seperti yang ada pada modul
- Buka Arduino IDE dan masukan listing Program
- Upload program ke arduino
- Mencoba rangkaian
2. Hardware dan Diagram Blok
[Kembali]
A. Hardware
1. Push Button
2. Arduino Uno
B. Digram Blok
3. Rangkaian Simulasi dan Prinsip kerja
[Kembali]
Prinsip Kerja
Master:
Pada rangkaian di atas merupakan percobaan Komunikasi I2C. Arduino yang pertama bertindak sebagai master dengan menggunakan push button sebagai input. Setiap button saat ditekan yang mana terdapat 2 buah button yang terhubung kearduino, Arduino akan terus memeriksa status setiap tombol dengan menggunakan fungsi digitalRead(). Jika sebuah button ditekan, Arduino akan mengirimkan karakter yang sesuai dengan menggunakan fungsi dari i2c. Karakter yang dikirimkan akan sesuai dengan button yang ditekan, dan akan dibaca oleh perangkat arduino slave.
Slave:
Pada arduino yang kedua betindak sebagai Slave dimana nantinya akan menerima inputan dari Arduino master dan mengeluarkan output berupa led. Prinsip kerja rangkaian di atas adalah untuk mengontrol output led yang terhubung ke pin Arduino berdasarkan status dari button sesuai dengan program slave yang terhubung ke pin digital lainnya. Pada setup(), pin-pin yang terhubung ke button diatur sebagai input. Pada loop(), program akan terus memeriksa status button tersebut.
4. FlowChart
[Kembali]
MASTER
#include <Wire.h>
#define SLAVE_ADDRESS 9 // Slave Arduino address
#define BUTTON1 2 // Pin for the push button
#define BUTTON2 3
int buttonState1 = 0;
int buttonState2 = 0;
int buttonPrevState1 = 0;
int buttonPrevState2 = 0;
unsigned int counter = 0;
unsigned int count = 0;
void setup() {
Wire.begin(); // Initialize I2C communication
pinMode(BUTTON1, INPUT); // Set button pin as input with internal pull-up resistor
pinMode(BUTTON2, INPUT);
Serial.begin(9600); // Initialize serial communication for debugging
}
void loop() {
buttonState1 = digitalRead(BUTTON1);
buttonState2 = digitalRead(BUTTON2);
if (buttonState2 != buttonPrevState2){
if(buttonState2 == HIGH){
count++;
}
delay(50);
}
buttonPrevState2 = buttonState2;
if(count > 3){
count = 0;
}
if(count % 2 == 0){
if (buttonState1 != buttonPrevState1) {
if (buttonState1 == HIGH) {
// Button is pressed
counter++;
Wire.beginTransmission(SLAVE_ADDRESS);
Wire.write(counter); // Send command to the slave
Wire.endTransmission();
}
delay(50); // Debouncing delay
}
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 // Start pin for the LEDs
void setup() {
Serial.begin(9600);
Wire.begin(9); // Initialize I2C communication as Slave with address 9
Wire.onReceive(receiveEvent); // Register event for receiving data
for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
pinMode(i, OUTPUT); // Set LED pins as output
}
}
void loop() {
// Nothing to do here, all actions are performed in the receiveEvent function
}
void receiveEvent(int numBytes) {
unsigned int command = Wire.read(); // Read incoming command from master
Serial.println(command);
delay(500);
if (command == 1) {
// Turn all LEDs ON
for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
digitalWrite(i, HIGH);
}
} else if (command == 2) {
// Turn all LEDs OFF
for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
digitalWrite(i, LOW);
}
} else if (command == 3) {
// Blink all LEDs
for (int j = 0; j < 5; j++) { // Repeat the blinking 5 times
for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
digitalWrite(i, HIGH);
delay(1000);
}
delay(500); // Delay for ON state
for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
digitalWrite(i, LOW);
delay(1000);
}
delay(500); // Delay for OFF state
}
}
}
B. Flowchart
5. Video Demo [Kembali]
8. Download File
[Kembali]
Download HTML Klik disini
Download Video Demo Klik disini
Download Datasheet ARDUINO UNO Klik disini
Tidak ada komentar:
Posting Komentar