Treppenlicht mit I2C

So, hier jetzt das versprochene Beispiel (alles ungetest!!!):

//Für Arduino/Master:

#include <wire.h>

void setup () {
wire.begin();
}

void loop (){

byte Puffer [10];
byte i = 0;

Wire.beginTransmission (Slaveadesse); //Sensordaten vom Slave anfordern
Wire.write (Daten); //irgendein Wert den der Slave so versteht das er den Sensor auslesen soll
Wire.endTransmission

delay(5); //dem Slave Zeit geben um die Anfrage zu bearbeiten

Wire.requestFrom(Slaveadresse,2); //High und Low Byte vom Slave anfordern

while (Wire.available){
Puffer [i] = Wire.read();	//Byte auslesen, High und Low Byte müssen noch zusammengefügt werden 
}

//zweiten Slave auslesen

//Daten auswerten 

Wire.beginTransmission (Slaveadesse);
Wire.write (Daten); //irgendein Wert den der Slave versteht
Wire.endTransmission

delay (100);
}




//Für Slave / ATiny:

#include <TinyWireS.h>

void Setup () {
TinyWireS.begin (Slaveadresse);
}

void loop(){
byte Rec;
int Wert;

if (TinyWireS.available()){  //"Warten" bis Slave von Master angesprochen wird und egal 
			  //welcher Wert gesendet wird, der Slave schickt den Sensorwert zurück 
 Rec = TinyWireS.receive();
 Wert = analogRead(AnalogPin); //hier würde sich auch anbieten den 10bit-Wert auf 8bit Auflösung zu reduzieren
 TinyWireS.send(byte(Wert & 0xFF)); //Lowbyte senden
 TinyWireS.send(byte(Wert >> 8)); //Highbyte senden
}
}

@Marcus W: Was heißt hier nur weil billiger? Hier gehts ja nicht um ein paar Prozent günstiger! Zwischen I2C und EIB Geräten liegt einfach mal locker Faktor 10 bis 20! Bei CAN weis ich das nicht genau, was ich gesehen hatte war aber auch nicht wirklich im einstelligen Euro Bereich. Sicher hat alles seine Gründe, möchte da auch keine Diskusion in die Richtung starten. Wo ich dir natürlich recht geben muss, wenn man nur unter uC Daten überträgt kann man auch ander Bussysteme kostenneutral verwenden (oder man denkt sich selbst ein Protokoll aus ^^). Ich geh aber mal davon aus das da vielleicht auch mal andere I2C Geräte angeschlossen werden sollen :wink: