Hallo Allerseits.
Ich möchte folgendes realisieren:
Per Taster sage ich dem Arduino: Weiche XY Stellen. Anzeige ob "gerade" oder "abzweig" jeweils mit einer LED an definierten Ausgängen. Das ganze funktioniert mit der LoconetMaster Bibliothek.
Nach einem Beispielcode, welche zwei Taster zum Verändern der Weichenstellung vorsieht, möchte ich nur einen Taster pro Weiche nutzen (Toggle).
Dafür passe ich den Beispielcode an, was bis jetzt nur begrenzt funktioniert.
Bin im Programmierbereich eher Anfänger und vielleicht gibt es unter Euch ja jemanden, der mir mit dem Quelltext helfen kann.
Der Loop des Programmquelltextes sieht wie folgt aus:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
void loop()
{
int reading = digitalRead(buttonPin);
if (reading != lastButtonState)
{
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay)
{
if (reading != buttonState)
{
buttonState = reading;
if (buttonState == HIGH)
{
switchState = !switchState;
}
}
}
if (switchState == HIGH)
{
setLNTurnout(LN_TURNOUT, TURNOUT_NORMAL);
}
if (switchState == LOW)
{
setLNTurnout(LN_TURNOUT, TURNOUT_DIVERGING);
}
digitalWrite(ledPinGreen, switchState);
digitalWrite(ledPinRed, !switchState);
digitalWrite(statePin, switchState);
lastButtonState = reading;
//Check for any received LocoNet packets
LnPacket = LocoNet.receive() ;
if ( LnPacket )
{
LocoNet.processSwitchSensorMessage(LnPacket);
}
digitalWrite(ledPinGreen, switchState);
}
Dieser Teil
2
3
4
5
6
7
8
9
if (switchState == HIGH)
{
setLNTurnout(LN_TURNOUT, TURNOUT_NORMAL);
}
if (switchState == LOW)
{
setLNTurnout(LN_TURNOUT, TURNOUT_DIVERGING);
}
ist die If-Bedingung, die je nach dem welchen Wert die Variable "switchState" annimmt, die Weiche umstellen soll.
Habe mich mit dem Quelltext hier auf den wesentlichen Teil beschränkt, im zZusammenhang mit dem Rest ist er kompilierbar.
Nehme ich diese If-Bedingung aus dem Quelltext heraus, läuft der Wechsel der LEDs sehr direkt und flüssig bei Tasterbetätigung, mache ich dies nicht, scheint die Schaltlogik extreme Verzögerungen zu haben. Zudem schaltet die Weiche nicht in eine definierte Richtung.
Nehme ich eine einen Teil davon heraus, beispielsweise folgenden:
2
3
4
5
if (switchState == LOW)
{
setLNTurnout(LN_TURNOUT, TURNOUT_DIVERGING);
}
Dann ist es mir möglich, die Weiche zumindest in die noch im Quelltext vorhandene Richtung zu Schalten.
Ist der Quelltext komplett wie oben angegeben, Bleiben auch die LEDs auf einem Zustand stehen und ich kann mit dem Taster den Zustand nicht "kippen". Die geradeaus ist also HIGH, und den Zustand bekomme ich dann nicht mehr weg mittels Taster.
Danke fürs Lesen. Mir fällt es nicht leicht, das Problem auf den Punkt zu formulieren.
MfG
Florian