PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C Kommunikation zwischen zwei Arduino UNO funktioniert nicht optimal!



papuadive
26.02.2014, 07:09
Hallo!
Vielleicht kann mir jemand helfen!
Habe eine Master-Slave via I2C realisiert und kann mir folgendes nicht ganz erklären.
Wenn ich bei dem Master-Sketch die Laufvariable i mit einer geraden Zahl initialisiere (z.B. i = 8, 10) dann geht gar nichts - Led's an Pin 10, 11, 12, 13 blinken nicht mehr.
Bei einer ungeraden Zahl z.B. i= 3, i=9 funktioniert die ganze Sache gut.
Habe schon mal den Code beigelegt - vielleicht findet jemand den Fehler auf Anhieb.
Danke Papua

+++++++ Master Sketch +++++++++



#include <Wire.h>
int i = 0;

void setup()
{
//Teilnehmer am I2C-Bus
//keine Adresse, da Master
Wire.begin();
}
void loop()
{
delay(10); // Durchlaufzeit
//Datenübertragung an Empfänger mit Ardesse 3 starten
Wire.beginTransmission(3);
// Wert zum Senden
int dataval = i;
// Daten senden
Wire.write(dataval);
// Datenübertragung stoppen
Wire.endTransmission();
//weitere Anweisungen
i++;

if(i == 14) // nur Pin 10 - 13 werden für die Led's verwendet
{
i = 9;
}
}


++++++++ Slave-Sketch ++++++++


#include <Wire.h>
boolean running = false; // Var. zum toggeln
int TasterPin = 2; // Taster für die Freigabe LED blinken am Slave

void setup()
{
// Teilnehemer am Bus als Slave mit der Adresse #3
Wire.begin(3);
// falls Daten empfangen wurden, Funktion
Wire.onReceive(receiveData);

pinMode(10, OUTPUT); // Led an Pin 10
pinMode(11, OUTPUT); // Led an Pin 11
pinMode(12, OUTPUT); // Led an Pin 12
pinMode(13, OUTPUT); // Led on Board

pinMode(TasterPin, INPUT); // Taster als Eingang def.
digitalWrite(TasterPin, HIGH); // Pullup ein
}
void loop()
{
// delay(100);
}

// Funktion ausführen, falls Daten empfangen
void receiveData(int AnzahlBytes)
{
//Daten empfangen und in Variable ablegen
int recData = Wire.read();
//Verarbeitung der empfangenen Daten
if(digitalRead(TasterPin) == LOW) // Ist Taster gedrückt (Pin 0 auf Masse)
{
running = !running; // Wert der Variablen hin- und herschalten (toggle)
digitalWrite(recData, running); // toggle LED's
}
}