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 +++++++++
++++++++ Slave-Sketch ++++++++Code:#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; } }
Code:#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 } }







Zitieren

Lesezeichen