1. Kondisi [Daftar]
Percobaan 3: Komunikasi I2C
Kondisi 1: Buatlah led menyala ketika potensiometer 0% dan led padam ketika potensiometer 100%.
2. Gambar Rangkaian Simulasi [Daftar]
3. FlowchartKondisi [Daftar]
4. Listing Program [Daftar]
a. Master
//MASTER
#include <Wire.h> //Deklarasi library Wire untuk komunikasi I2C
#define MASTER_ADDR 9 //Deklarasi alamat slave yang digunakan 0 - 127
int analogPin = 0; //Deklarasi nilai analogPin = 0
int val = 0; // Deklarasi variable = 0
void setup() {
Wire.begin(); // siap untuk mengirimkan data
}
void loop() {
delay (50);
val = map(analogRead(analogPin), 0, 1023, 255, 1); //Mapping nilai dari pembacaan ADC dari 0-1023 menjadi pwm 255-1 dan dimasukkan ke variable val
Wire.beginTransmission(MASTER_ADDR); //siap mulai mengirimkan data ke alamat slave yang dituju
Wire.write(val); // menulis data pada slave sesuai nilai val
Wire.endTransmission(); // mengakhiri mengirimkan data pada slave
}
#include <Wire.h> //Deklarasi library Wire untuk komunikasi I2C
#define MASTER_ADDR 9 //Deklarasi alamat slave yang digunakan 0 - 127
int analogPin = 0; //Deklarasi nilai analogPin = 0
int val = 0; // Deklarasi variable = 0
void setup() {
Wire.begin(); // siap untuk mengirimkan data
}
void loop() {
delay (50);
val = map(analogRead(analogPin), 0, 1023, 255, 1); //Mapping nilai dari pembacaan ADC dari 0-1023 menjadi pwm 255-1 dan dimasukkan ke variable val
Wire.beginTransmission(MASTER_ADDR); //siap mulai mengirimkan data ke alamat slave yang dituju
Wire.write(val); // menulis data pada slave sesuai nilai val
Wire.endTransmission(); // mengakhiri mengirimkan data pada slave
}
b. Slave
//SLAVE
#include <Wire.h> //Deklarasi library Wire untuk komunikasi I2C
#define SLAVE_ADDR 9 //Deklarasi alamat slave yang digunakan 0 - 127
int LED = 13; //Deklarasi pin 13 terhubung ke LED
int rd; //Deklarasi variable rd
int br; //Deklarasi variable br
void setup() {
pinMode(LED, OUTPUT); //Deklarasi LED sebagai Output
Wire.begin(SLAVE_ADDR); //Inisialisasi library wire alamat slave Untuk memulai
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 variable receiveEvent
rd = Wire.read(); // Memasukkan data pembacaan ke variable rd
Serial.println(rd); //Mencetak nilai rd
}
void loop() {
delay(50);
br = map(rd, 1, 255, 100, 2000); //Mapping nilai dari pembacaan nilai variable rd dari range 1-255 menjadi 100-2000 dan dimasukkan ke variable br
if (rd == 255){ //LED berlogika HIGH pada saat nilai rd = 255
digitalWrite(LED, HIGH); //LED menyala
delay(br);
}
if (rd == 1) { //LED berlogika LOW pada saat nilai rd = 0
digitalWrite(LED, LOW); //LED mati
delay(rd);
}
}
#include <Wire.h> //Deklarasi library Wire untuk komunikasi I2C
#define SLAVE_ADDR 9 //Deklarasi alamat slave yang digunakan 0 - 127
int LED = 13; //Deklarasi pin 13 terhubung ke LED
int rd; //Deklarasi variable rd
int br; //Deklarasi variable br
void setup() {
pinMode(LED, OUTPUT); //Deklarasi LED sebagai Output
Wire.begin(SLAVE_ADDR); //Inisialisasi library wire alamat slave Untuk memulai
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 variable receiveEvent
rd = Wire.read(); // Memasukkan data pembacaan ke variable rd
Serial.println(rd); //Mencetak nilai rd
}
void loop() {
delay(50);
br = map(rd, 1, 255, 100, 2000); //Mapping nilai dari pembacaan nilai variable rd dari range 1-255 menjadi 100-2000 dan dimasukkan ke variable br
if (rd == 255){ //LED berlogika HIGH pada saat nilai rd = 255
digitalWrite(LED, HIGH); //LED menyala
delay(br);
}
if (rd == 1) { //LED berlogika LOW pada saat nilai rd = 0
digitalWrite(LED, LOW); //LED mati
delay(rd);
}
}
5. Video Simulasi [Daftar]
6. Prinsip Kerja Rangkaian [Daftar]
Rangkaian I2C adalah rangkaian standar komunikasi serial dua arah menggunakan dua saluran yang didisain khusus untuk mengirim maupun menerima data secara simplex (satu arah) dan half-duplex (secara bergantian bertgantian menerima dan mengirim data). Rangkaian terdiri dari 2 arduino yang berfungsi sebagai MASTER (mengirim message disini sebagai pengirim data nilai dari potensiometer), dan SLAVE sebagai penerima data dari MASTER yang datanya diubah dari analog menajdi digital. Potensimo meter disini berfungsi sebagai input data. Ketika pada kondisi start dan address pada slave sudah terpenuhi, maka data akan di transmisikan (write) dari MASTER ke SLAVE melalui pin SDA(serial data) sedangkan pin SCL adalah sebagai clock nya. Data yang dikirim pada SDA saat fall atau menurun sedangkan clocknya masih di satu. Ketika data sudah di kirim ke slave dan akan diperiksa oleh ACK apakah sudah sesuai atau belum. Data yang sudah di kirim ke slave, maka akan di ubah ke kondisi stop. Data yang sudah terbaca pada slave ini akan diteruskan ke pin 13 pada Arduino (SLAVE) sebagai output yang terhubung ke LED. Sehingga LED akan ON pada saat potensiometer bernilai 0% dengan penundaan sebesar nilai variabel br. Sedangkan pada saat potensiometer bernilai 100% maka LED akan OFF dengan penundaan sesuai variable rd.
7. Link Download [Daftar]
c. HTML
Tidak ada komentar:
Posting Komentar