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?

