Treppenlicht mit I2C

Jago:
@xpix: Wie gesagt, ungetestet... ...hab das Prog in Wordpad geschrieben.

So, alles aufgebaut und was soll ich sagen, es funktionierte auf Anhieb. Hier mal ein Foto des Versuchsaufbau's und der Code für master und Slave. Auf dem Foto seht ihr den Arduino Nano sowie ein BlinkM Device sowie das I2C mit dem Drucksensor FSR 402. Das BlinkM hat in dem Aufbau erst einmal keine Funktion ... sobald man den Sensor betätigt bekommt man Werte bis 256 auf der Konsole.

//Für Arduino/Master:

#include <Wire.h>

void setup () {
  Serial.begin(9600);
  Wire.begin();
}

void loop (){

  byte Puffer;
  byte i = 0;
  byte Daten = 1;
  int Slave = 4;

  Wire.beginTransmission(Slave); //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(Slave, 2); //High und Low Byte vom Slave anfordern
  
  while (Wire.available()){
    Puffer = Wire.read();	//Byte auslesen, High und Low Byte müssen noch zusammengefügt werden 
    Serial.print("Receive: ");
    Serial.println(Puffer);
  }

  //zweiten Slave auslesen (in sub auslagern)
  //dritten Slave auslesen
  delay (100);
}
//Für Slave / ATiny:

#include <TinyWireS.h>

int Slave = 4; // Slave Adresse 
int AnalogPin = 2; // Port wo der FSB angeschlossen ist

void setup () {
  TinyWireS.begin (Slave);
}

void loop(){
  if (TinyWireS.available()){  //"Warten" bis Slave von Master angesprochen wird und egal 
    //welcher Wert gesendet wird, der Slave schickt den Sensorwert zurück 
    byte Rec = TinyWireS.receive();
    int Wert = analogRead(AnalogPin); 
    TinyWireS.send(byte(Wert & 0xFF)); //Lowbyte senden
    TinyWireS.send(byte(Wert >> 8)); //Highbyte senden
  }
}

Der Test mit den 3m sowie 6m kommt morgen dran, als Pullups konnte ich nur 5,2k einsetzen aber das sollte gehen.

Wie kann man eigentlich die Geschwindigkeit des Busses einstellen unter Wire?

Foto.JPG

Foto(1).JPG