1. Komponen [kembali]
Gambar 1. Komponen Percobaan 3 (Arduino)
Gambar 2. Komponen Percobaan 3 (LED)
Gambar 3. Komponen Percobaan 3 (Potensiometer)
2. Rangkaian Simulasi [kembali]
3. Flowchart [kembali]
Gambar 5. Flowchart Master
4. Listing Program [kembali]
Listing Master :
//MASTER
#include <Wire.h> //Deklarasi library Wire
#define SLAVE_ADDR 9 //Deklarasi pin 9 untuk alamat slave
int analogPin = 0; //Deklarasi nilai analogPin sama dengan 0
int val = 0; //Deklarasi nilai variabel val adalah 0
void setup() { //Merupakan fungsi yang dieksekusi sekali
Wire.begin(); //Inisiasi library Wire
}
void loop() { //Merupakan fungsi yang dieksekusi berulang atau looping
delay(50); //Penundaan eksekusi selama 50 ms
val = map(analogRead(analogPin), 0, 1023, 255, 1); //Mengubah atau mapping nilai dari pembacaan analog dari range 0-1023 menjadi 255-1 dan dimasukkan ke variabel val
Wire.beginTransmission(SLAVE_ADDR); //Memulai transmisi data ke alamat slave yang dituju
Wire.write(val); //Menulis data pada slave
Wire.endTransmission(); //Mengakhiri transmisi data ke slave
}
#include <Wire.h> //Deklarasi library Wire
#define SLAVE_ADDR 9 //Deklarasi pin 9 untuk alamat slave
int analogPin = 0; //Deklarasi nilai analogPin sama dengan 0
int val = 0; //Deklarasi nilai variabel val adalah 0
void setup() { //Merupakan fungsi yang dieksekusi sekali
Wire.begin(); //Inisiasi library Wire
}
void loop() { //Merupakan fungsi yang dieksekusi berulang atau looping
delay(50); //Penundaan eksekusi selama 50 ms
val = map(analogRead(analogPin), 0, 1023, 255, 1); //Mengubah atau mapping nilai dari pembacaan analog dari range 0-1023 menjadi 255-1 dan dimasukkan ke variabel val
Wire.beginTransmission(SLAVE_ADDR); //Memulai transmisi data ke alamat slave yang dituju
Wire.write(val); //Menulis data pada slave
Wire.endTransmission(); //Mengakhiri transmisi data ke slave
}
Listing Slave :
//SLAVE
#include <Wire.h> //Deklarasi library Wire
#define SLAVE_ADDR 9 //Deklarasi pin 9 milik alamat slave
int LED = 13; //Deklarasi pin 13 terhubung ke LED
int rd; //Deklarasi variabel rd
int br; //Deklarasi variabel br
void setup() { //Fungsi ini dieksekusi sekali
pinMode(LED, OUTPUT); //Deklarasi LED sebagai Output
Wire.begin(SLAVE_ADDR); //Inisiasi library Wire dan Alamat Slave
Wire.onReceive(receiveEvent); //Memanggil fungsi ketika slave mendapat transmisi dari master
Serial.begin(9600); //Set baud rate 9600
Serial.println("I2C Slave demo"); //Mencetak data
}
void receiveEvent(){ //Deklarasi variabel receiveEvent
rd = Wire.read(); //Memasukkan data pembacaan ke variabel rd
Serial.println(rd); //Mencetak nilai rd
}
void loop() { //Fungsi yang dieksekusi berulang atau looping
delay(50); //Mendelay eksekusi 50 ms
br = map(rd, 1, 255, 100, 2000); // //Mengubah atau mapping nilai variabel rd dari range 1-255 menjadi 1000-2000 dan dimasukkan ke variabel br
digitalWrite(LED, HIGH); //LED diberi logika 1 sehingga LED menyala
delay(br); //Eksekusi program delay selama br
digitalWrite(LED, LOW); //LED diberi logika 0 sehingga LED mati
delay(br); //Eksekusi program delay selama br
}
#include <Wire.h> //Deklarasi library Wire
#define SLAVE_ADDR 9 //Deklarasi pin 9 milik alamat slave
int LED = 13; //Deklarasi pin 13 terhubung ke LED
int rd; //Deklarasi variabel rd
int br; //Deklarasi variabel br
void setup() { //Fungsi ini dieksekusi sekali
pinMode(LED, OUTPUT); //Deklarasi LED sebagai Output
Wire.begin(SLAVE_ADDR); //Inisiasi library Wire dan Alamat Slave
Wire.onReceive(receiveEvent); //Memanggil fungsi ketika slave mendapat transmisi dari master
Serial.begin(9600); //Set baud rate 9600
Serial.println("I2C Slave demo"); //Mencetak data
}
void receiveEvent(){ //Deklarasi variabel receiveEvent
rd = Wire.read(); //Memasukkan data pembacaan ke variabel rd
Serial.println(rd); //Mencetak nilai rd
}
void loop() { //Fungsi yang dieksekusi berulang atau looping
delay(50); //Mendelay eksekusi 50 ms
br = map(rd, 1, 255, 100, 2000); // //Mengubah atau mapping nilai variabel rd dari range 1-255 menjadi 1000-2000 dan dimasukkan ke variabel br
digitalWrite(LED, HIGH); //LED diberi logika 1 sehingga LED menyala
delay(br); //Eksekusi program delay selama br
digitalWrite(LED, LOW); //LED diberi logika 0 sehingga LED mati
delay(br); //Eksekusi program delay selama br
}
5. Video [kembali]
6. Analisa [kembali]
1. Apabila ada tambahan slave, bagaimana cara master membedakan satu slave dengan slave lainnya pada i2C pada saat berkomunikasi? Apakah pada bagian program, atau rangkaian, atau keduanya ?
Ø
Apabila ada
tambahan slave, komunikasi pada I2C sama dengan SPI yaitu menghubungkan pin-pin
slave secara parallel ke pin-pin master. Agar tidak ada terjadinya tabrakan data
atau error pada saat pengiriman data maka addres atau alamat pada slave-slave
dibedakan di dalam program.
7. Link Download [kembali]
Tidak ada komentar:
Posting Komentar