MODUL III
PERCOBAAN 5
1. Prosedur
[Kembali]PERCOBAAN 5
- Rangkai seluruh komponen alat dan bahan yang diperlukan sesuai dengan kondisi percobaan yang dipilih.
- Buat program arduino pada aplikasi Arduino IDE sesuai dengan kondisi percobaan. Pastikan aplikasi Arduino IDE sudah mendownload library yang dibutuhkan dan sudah memilih board arduino yang sesuai.
- Verifikasi atau upload program pada arduino.
- Jalankan atau uji coba rangkaian yang telah dibuat sesuai dengan kondisi.
- Perhatikan rangkaian dan output apakah sesuai dengan kondisi.
- Rangkaian telah selesai dibuat.
2. Hardware dan Diagram Blok
[Kembali]
a) Hardware
3. Rangkaian Simulasi dan Prinsip kerja
[Kembali]
a) Rangkaian Simulasi
b) Prinsip Kerja
Inisialisasi:
- Pada Arduino Master, library Wire digunakan untuk menginisialisasi komunikasi I2C dan serial untuk debugging.
- Pada Arduino Slave, library Wire juga digunakan untuk menginisialisasi komunikasi I2C dan juga mengatur pin LED sebagai output.
Loop Utama Master:
- Arduino Master terus memeriksa status tombol. Jika tombol kedua ditekan (BUTTON2), variabel count akan bertambah satu setiap kali tombol ditekan.
- Jika count habis dibagi 2 (count % 2 == 0), Arduino Master akan memeriksa status tombol pertama (BUTTON1). Jika tombol pertama ditekan (BUTTON1), variabel counter akan bertambah satu dan nilai counter akan dikirim ke Arduino Slave melalui I2C.
- Jika count habis dibagi 3 (count % 3 == 0), Arduino Master akan mengirim sinyal endTransmission ke Arduino Slave.
Loop Utama Slave:
Arduino Slave tidak melakukan
apa-apa dalam loop utamanya karena semua aksi dikendalikan oleh fungsi
receiveEvent saat menerima data dari Arduino Master.
Fungsi receiveEvent:
- Ketika Arduino Slave menerima data dari Arduino Master, fungsi receiveEvent akan dijalankan.
- Data yang diterima akan diproses untuk mengendalikan LED sesuai dengan perintah yang diterima.
- Jika perintah adalah 1, semua LED akan dinyalakan.
- Jika perintah adalah 2, semua LED akan dimatikan.
- Jika perintah adalah 3, semua LED akan berkedip sebanyak lima kali.
4. Flowchart dan Listing Program
[Kembali]
a) Flowchart
b) Listing Program
Master
#include <Wire.h>
#define SLAVE_ADDRESS 9
#define BUTTON1 2
#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();
pinMode(BUTTON1, INPUT_PULLUP);
pinMode(BUTTON2, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
buttonState1 = digitalRead(BUTTON1);
buttonState2 = digitalRead(BUTTON2);
if (buttonState2 != buttonPrevState2) {
if (buttonState2 == LOW) {
count++;
}
delay(50);
}
buttonPrevState2 = buttonState2;
if (count > 3) {
count = 0;
}
if (count % 2 == 0) {
if (buttonState1 != buttonPrevState1) {
if (buttonState1 == LOW) {
counter++;
Wire.beginTransmission(SLAVE_ADDRESS);
Wire.write(counter);
Wire.endTransmission();
}
delay(50);
}
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
void setup() {
Serial.begin(9600);
Wire.begin(9);
Wire.onReceive(receiveEvent);
for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
pinMode(i, OUTPUT);
}
}
void loop() {
// Tidak ada yang perlu dilakukan di sini, semua tindakan dilakukan di fungsi receiveEvent
}
void receiveEvent(int numBytes) {
unsigned int command = Wire.read();
Serial.println(command);
delay(500);
if (command == 1) {
// Menyalakan semua LED
for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
digitalWrite(i, HIGH);
}
} else if (command == 2) {
// Mematikan semua LED
for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
digitalWrite(i, LOW);
}
} else if (command == 3) {
// Berkedipkan semua LED
for (int j = 0; j < 5; j++) {
for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
digitalWrite(i, HIGH);
delay(1000);
}
delay(500);
for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
digitalWrite(i, LOW);
delay(1000);
}
delay(500);
}
}
}
6. Kondisi
[Kembali]
Percobaan 5 Komunikasi I2C
0 komentar:
Posting Komentar