Hallo Arne,
das sieht ja schon vielversprechend aus. Geht auf jeden Fall schneller voran als mein Fahrpultprojekt (Stell ich irgendwann in den nächsten Tagen im Forum vor, da der erste Meilenstein (MFA-Umbau) fast abgeschlossen ist.)
Ich könnte diese Codeschnipsel anbieten, sofern du den Code aus dem von dir gestarteten Thread verwendest. Der Code läuft in meinem MFA auf einem einzelnen Arduino Mega mit Ethernetshield. Sollten es mehrere Arduinos sein muss der Code auf den jeweiligen Arduinos landen und die entsprechenden Int-Werte an die Arduinos kommuniziert werden (Letzteres nicht getestet, da nur ein Arduino verwendet wird):
Code: Alles auswählen
bool blinking = false; //Muss als globale Variable definiert werden (Am anfang; nicht im Setup, Loop o.ä)
int LM_85 = 0; //Ebenso diese
int LM_70 = 0;
int LM_55 = 0;
int LM_Bef = 0;
int LM_500Hz = 0;
int LM_1000Hz = 0;
//...
const int Pin_LM_Bef = 28; //Pin-Nummern sind natürlich anzupassen
const int Pin_LM_55 = 29;
const int Pin_LM_500Hz = 30;
const int Pin_LM_70 = 31;
const int Pin_LM_1000Hz = 32;
const int Pin_LM_85 = 33;
//...
//Diese Funktionen sind eigenständig und gehören ebenfalls außerhalb des Loops
void updateBlink() {
if (millis() % 2000 < 1000) {
blinking = true;
} else {
blinking = false;
}
}
void setLM(int pin, int state) {
switch (state) {
case 0:
digitalWrite(pin, LOW);
break;
case 1:
digitalWrite(pin, HIGH);
break;
case 2:
digitalWrite(pin, blinking);
break;
case 3:
digitalWrite(pin, !blinking);
break;
}
}
Im Loop kommt dann:
Code: Alles auswählen
void loop() {
//Code zur Kommunikation mit Zusi und anderweitiger Code
updateBlink();
setLM(Pin_LM_Bef, LM_Bef);
setLM(Pin_LM_55, LM_55);
setLM(Pin_LM_500Hz, LM_500Hz);
setLM(Pin_LM_70, LM_70);
setLM(Pin_LM_1000Hz, LM_1000Hz);
setLM(Pin_LM_85, LM_85);
//...
//eventueller anderweitiger Code
}
und in den entsprechenden ID im Code zum Empfangen von Daten:
Code: Alles auswählen
//Im entsprechenden Teil für die Daten der Zugbeeinflussungssysteme
if (dataGroup.i == 0x002F) { // Melder 1000 Hz
LM_1000Hz = nutzdata.i;
} else if (dataGroup.i == 0x0030) { // Melder 85
LM_85 = nutzdata.i;
} else if (dataGroup.i == 0x0031) { // Melder 70
LM_70 = nutzdata.i;
} else if (dataGroup.i == 0x0032) { // Melder 55
LM_55 = nutzdata.i;
} else if (dataGroup.i == 0x0033) { // Melder 500 Hz
LM_500Hz = nutzdata.i;
} else if (dataGroup.i == 0x0034) { // Melder Befehl
LM_Bef = nutzdata.i;
}
//...
Damit es bei den entsprechenden Leuchtmeldern zum Blinken kommt müssen die IDs genommen werden, bei den in der Docu unter Bedeutung "0: aus / 1: an / 2: blinkend (/ 3: blinkend invers)" steht. Obwohl bei diesen IDs Byte als Datentyp steht, müssen sie vom Code als Int (nutzdata.i statt nutzdata.b) ausgelesen werden.
Anmerkung: Die IDs im Code sind schon die richtigen.
Ich hoffe dass ich damit weiter helfen kann.
Gruß, Paul.