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
initialisieren, dann geht gar nichts (Led's an Pin 10, 11, 12,
13)blinken nicht mehr. Bei einer geraden Zahl i= 3, i=9 funktioniert die
ganze Sache gut.
Danke Mad
•
1 | //+++++ Master-Sketch ++++++
|
2 |
|
3 | #include <Wire.h>
|
4 | int i = 0;
|
5 |
|
6 | void setup()
|
7 | {
|
8 | //Teilnehmer am I2C-Bus
|
9 | //keine Adresse, da Master
|
10 | Wire.begin();
|
11 | }
|
12 | void loop()
|
13 | {
|
14 | delay(10); // Durchlaufzeit
|
15 | //Datenübertragung an Empfänger mit Ardesse 3 starten
|
16 | Wire.beginTransmission(3);
|
17 | // Wert zum Senden
|
18 | int dataval = i;
|
19 | // Daten senden
|
20 | Wire.write(dataval);
|
21 | // Datenübertragung stoppen
|
22 | Wire.endTransmission();
|
23 | //weitere Anweisungen
|
24 | i++;
|
25 |
|
26 | if(i == 14) // nur Pin 10 - 13 werden für die Led's verwendet
|
27 | {
|
28 | i = 9;
|
29 | }
|
30 | }
|
++++++++ Slave-Sketch ++++++++
•
1 | #include <Wire.h>
|
2 | boolean running = false; // Var. zum toggeln
|
3 | int TasterPin = 2; // Taster für die Freigabe LED blinken am Slave
|
4 |
|
5 | void setup()
|
6 | {
|
7 | // Teilnehemer am Bus als Slave mit der Adresse #3
|
8 | Wire.begin(3);
|
9 | // falls Daten empfangen wurden, Funktion
|
10 | Wire.onReceive(receiveData);
|
11 |
|
12 | pinMode(10, OUTPUT); // Led an Pin 10
|
13 | pinMode(11, OUTPUT); // Led an Pin 11
|
14 | pinMode(12, OUTPUT); // Led an Pin 12
|
15 | pinMode(13, OUTPUT); // Led on Board
|
16 |
|
17 | pinMode(TasterPin, INPUT); // Taster als Eingang def.
|
18 | digitalWrite(TasterPin, HIGH); // Pullup ein
|
19 | }
|
20 | void loop()
|
21 | {
|
22 | // delay(100);
|
23 | }
|
24 |
|
25 | // Funktion ausführen, falls Daten empfangen
|
26 | void receiveData(int AnzahlBytes)
|
27 | {
|
28 | //Daten empfangen und in Variable ablegen
|
29 | int recData = Wire.read();
|
30 | //Verarbeitung der empfangenen Daten
|
31 | if(digitalRead(TasterPin) == LOW) // Ist Taster gedrückt (Pin 0 auf Masse)
|
32 | {
|
33 | running = !running; // Wert der Variablen hin- und herschalten (toggle)
|
34 | digitalWrite(recData, running); // toggle LED's
|
35 | }
|
36 | }
|