Wegweiser

Titelseite

Gabi

Haus

Bernd

Mobil

Schweden

Imperium

Dies & Das

Titelseite

Gabi

Elektronik / Arduino / Wissenswertes / I2C

Haus

Elektronik

Mobil

Schweden

Imperium

Dies & Das

Die Situation:

Der eine Arduino will dem anderen etwas sagen. Und erwartet, dass das, was er ihm gesagt hat, auch angekommen ist. Er besteht also auf einer Antwort.

Diese Form der Konversation erlaubt die Verwendung des sog. I2C-Bus. Ein als Master deklarierter Arduino sendet dem als Slave bezeichneten Arduino über den Bus Daten. Der Slave seinerseits sendet auf dem gleichen Bus seine Daten an den Master.  

In diesem Beispiel wird beim Master und beim Slave eine LED gedimmt. Der Slave sendet dann an den Master die Nachricht, dass er auch gedimmt hat.. Aber Achtung, sehen Sie sich das mal an.

Equipment

Projekte

Arduino

Leiterplatten

Barbie

Murmeln

//********** Master *************
#include <Wire.h>
int POTI=A0;
int LED1=6;
int LED2=13;
int WERT;
byte WERT2=0;
void setup()
{
    pinMode(POTI,INPUT);
    pinMode(LED1,OUTPUT);
    pinMode(LED2,OUTPUT);
    Wire.begin();
}
void loop()
{
    WERT=map(analogRead(POTI),0,1023,0,255);
    analogWrite(LED1,WERT);
    Wire.beginTransmission(4);
    delay(10);
    Wire.send(WERT);
    delay(10);
    Wire.endTransmission();
    delay(10);
    digitalWrite(LED2,LOW);
    Wire.requestFrom(4, 1);
    while(Wire.available()==0){}
    WERT2=Wire.receive();
    if(WERT2==99)
    {
        digitalWrite(LED2,HIGH);
        delay(300);
        digitalWrite(LED2,LOW);
    }   	
    delay(500);
    digitalWrite(LED2,HIGH);
    delay(50);
    digitalWrite(LED2,LOW);    		
}

 

//********** Slave ************* 
#include <Wire.h>
int LED=6;
int WERT=0;
void setup()
{
    pinMode(LED,OUTPUT);
    Wire.begin(4);
    Wire.onReceive(LESEN);
    Wire.onRequest(SCHREIBEN);
}
void loop()
{
    delay(100);      
}
void LESEN(int EMPFANGEN)
{
    WERT=Wire.receive();
    delay(100);
    analogWrite(LED,WERT);
    SCHREIBEN;    
}
void SCHREIBEN()
{
    Wire.send(99);
}