RE: Arduino: Weichen-Stellbefehle per Taster. Programmierproblem IDE

#1 von FlowUS ( gelöscht ) , 28.10.2015 22:33

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:

1
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

1
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:

1
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


FlowUS

RE: Arduino: Weichen-Stellbefehle per Taster. Programmierproblem IDE

#2 von FlowUS ( gelöscht ) , 28.10.2015 23:08

Problem scheinbar gefunden, aber noch nicht gelöst.
Der Fehler ist der, dass pro Programmdurchlauf ein neuer Befehl ins Loconet geschickt wird, was nicht sein darf.

Muss den Code ändern, dass der Weichenbefehl nur einmalig kommt. Dann wird es gehen.


FlowUS

   


  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz