PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : i2c warum doppelte abfrage nötig



simonprein
07.03.2014, 23:30
Hi comunity

Ich habe volgenden sketch aus dem internet gedownloadet und für meine zwecke modifiziert .

#include <Wire.h>

int x;
int c;
void setup()
{
pinMode (4,OUTPUT);
Wire.begin(4); // join i2c bus with address #4
Wire.onReceive(receiveEvent); // register event
Serial.begin(9600); // start serial for output
}

void loop()
{
delay(100);
}


void receiveEvent(int howMany)
{
while(1 < Wire.available())
{
c = Wire.read();
Serial.print(c);
}
x = Wire.read();
Serial.println(x);

if (x <128)
{
digitalWrite (4,LOW);
}
else
{
digitalWrite (4,HIGH);
}
}

nun ist mir aufgefallen das zweimal der befehl wire.read auftauch und ich hab versucht einen block zu löschen danach funktionierte der sketch aber nicht mehr wieso??

fredred
08.03.2014, 17:44
Hallo,

in jedem Bussystem muss erst mal der Teilnehmer angesprochen werden.
Ist Adresse OK kommt Rückmeldung ich bin bereit und sperrt Bus für andere Teilnehmer.
Nun Kommando senden was das „Ding“ machen soll. Somit ist dies keine doppelte Abfrage sondern einfach nötig. Nach Kommando natürlich den Bus wieder frei gegeben.

Mit freundlichen Grüßen
Fred

- - - Aktualisiert - - -

Hallo,

Noch mal angeschaut, Problem HIER. Wenn JA was hängt am Bus.

{
digitalWrite (4,LOW);
}
else
{
digitalWrite (4,HIGH);
}

Gruß
Fred