Komunikasi I2C



1. Hardware [Kembali]


A. LED


B. Push Button



2. Rangkaian Simulasi [Kembali]



3. Flowchart [Kembali]


A. Master




B. Slave




4. Listing Program [Kembali]


A. I2C Master

//
// Menambahkan library wire
#include <Wire.h>

// Deklarasi Button
#define BUTTON 2

uint8_t _data;

void setup() {
  // Konfigurasi button sebagai INPUT
  pinMode(BUTTON, INPUT);
  // Bergabung dengan I2C Bus
  Wire.begin();
}

void loop() {
  if (digitalRead(BUTTON) == LOW) {
    // Mengirim byte Alamat (Alamat slave #8)
    Wire.beginTransmission(8);
    // Mengirim data (data = 1)
    _data = 1;
    Wire.write(_data);
    // Berhenti mengirim
    Wire.endTransmission();
  } else {
    // Mengirim byte Alamat (Alamat slave #8)
    Wire.beginTransmission(8);
    // Mengirim data (data = 0)
    _data = 0;
    Wire.write(_data);
    // Berhenti mengirim
    Wire.endTransmission();
  }
}
//

B. I2C Slave

//
// Menambahkan library Wire
#include <Wire.h>

// Deklarasi LED
#define LED 2

// Data yang diterima Slave
uint8_t _data;
// Flag data telah diproses
bool proceed = true;

void setup() {
  // Konfigurasi LED sebagai OUTPUT
  pinMode(LED, OUTPUT);
  // Bergabung dengan I2C Bus dengan alamat 8 (Desimal)
  Wire.begin(8);         
  // Mengatur event ketike I2C Slave menerima data
  Wire.onReceive(receiveEvent); 
}

void loop() {
  if(!proceed){
    // Mengecek Data
    if(_data == 1){
      digitalWrite(LED, HIGH);
    }else if(_data == 0){
      digitalWrite(LED, LOW);      
    }
    proceed = true;
  }
}

// Fungsi untuk menghandel I2C receive event
void receiveEvent(int howMany) {
  // Membaca data 
  _data = Wire.read();
  proceed = false; 
}
//

5. Video Simulasi [Kembali]



6. Link Download [Kembali]









0 komentar:

Posting Komentar