1. Komponen
[kembali]
3. Flowchart
[kembali]
4. Listing Program
//MASTER
#include <Wire.h>
#define SLAVE_ADDR 9
int analogPin = 0;
int val = 0;
void setup() {
Wire.begin();
}
void loop() {
delay(50);
val = map(analogRead(analogPin), 0, 1023, 255, 1);
Wire.beginTransmission(SLAVE_ADDR);
Wire.write(val);
Wire.endTransmission();
}
//SLAVE
#include <Wire.h>
#define SLAVE_ADDR 9
int LED = 13;
int rd;
int br;
void setup() {
pinMode(LED, OUTPUT);
Wire.begin(SLAVE_ADDR);
Wire.onReceive(receiveEvent);
Serial.begin(9600);
Serial.println("I2C Slave demo");
}
void receiveEvent(){
rd = Wire.read();
Serial.println(rd);
}
void loop() {
delay(50);
br = map(rd, 1, 255, 100, 2000);
digitalWrite(LED, HIGH);
delay(br);
digitalWrite(LED, LOW);
delay(br);
}
5. Video
6. Kondisi
Jika pada rangkaian
komunikasi I2C menggunakan 2 slave, bagaimana cara master untuk
menentukan berkomunikasi dengan slavaenya, apakah berkominikasi dengan slave 1
atau 2, jelaskan secara rangkaian dan program!
Jawab :
I2C
merupakan jenis komunikasi yang memiliki kecepatan sangat tinggi dan 2 arah
(timbal balik) dengan menggunakan 2 pin yaitu pin SDA dan SCL. Pada I2C
data masuk dari master lalu ditransfer ke slave, begitu juga sebaliknya berlaku
hubungan timbal balik.
Pada rangkaian I2C
menngunakan kondisi start dan stop untuk master berkomunikasi dengan slave.
Jika ingin menambahkan device lain atau slave lain maka pin SDA dan SCL
dihubungkan secara paralel ke jalur yang menghubungkan master dan slave 1. Cara
master memilih slave yaitu master akan mentransferkan data ke slave denga
logika HIGH yaitu pada rangkaian terdapat pada slave 1 sehingga LED paad slave
1 menyala sedangkan slave 2 diberi logika LOW.
Seperti pada gambar rangkaian berikut :
Gambar
1. Rangkaian sebelum dijalankan
Gambar
2. Rangkaian setelah dijalankan
Untuk menjalankan
rangkaian tersebut menggunakan program arduino, dimana terdapat perbedaan pada
program slave 1 dan slave 2 di bagian void loop yaitu slave 1 diberi logika
HIGH dan slave 2 diberi logika LOW.
·
Slave 1
void loop() {
delay(50);
br = map(rd,
1, 255, 100, 2000);
digitalWrite(LED, HIGH);
delay(br);
}
·
Slave 2
void loop() {
delay(50);
br = map(rd,
1, 255, 100, 2000);
digitalWrite(LED, LOW);
delay(br);
}
7. Link Download
Download Rangkaian Simulasi [ DOWNLOAD ]
Download Video Praktikum [ DOWNLOAD ]
Download Program Arduino Master [ DOWNLOAD ]
Tidak ada komentar:
Posting Komentar