Andy schrieb:
> Wenn du einfach du positiven Flanken an Flow1 zählen willst: ...
Richtig, so und nur so wird das gemacht: eine Speichervariable merkt
sich den alten Wert des Eingangs, damit dieser im Programmablauf mit dem
aktuellen Wert verglichen werden kann. Und nach diesem Vergeleich wird
der aktuelle Wert für den nächsten Durchlauf als alten Wert, und das
Spiel beginnt von vorn.
Diese Vorgehensweise ist vollkommen unabhängig von der
Programmiersprache (über die übrigens nur die streiten, die nur eine
oder zwei kennen und können).
WarumNur schrieb:
> Ich habe folgendes Programm am laufen, welches auch funktioniert
Reduzieren wir das Programm einfach mal und nehmen die
Steigende-Flanken-Zählergeschichte aus der Merker-Geschichte heraus,
dann sieht der exakt funktionsgleiche Code vom ersten Post so aus:
1 | // Flanken erkennen und zählen
|
2 | If ((Flow1 = 1) and (Flow1Helper = 0)) then
|
3 | Flow1Counter = Flow1Counter + 1
|
4 | end if
|
5 |
|
6 | // Merker verwalten
|
7 | If ((Flow1 = 1) and (Flow1Helper = 0)) then
|
8 | Flow1Helper = 1
|
9 | end if
|
10 |
|
11 | If ((Flow1 = 0) and (Flow1Helper = 1)) then
|
12 | Flow1Helper = 0
|
13 | end if
|
Weil Flow1Helper eh' nur 1 oder 0 sein kann, könnte man das auch so
schreiben (darüber einfach mal eine Minute ausgiebig nachdenken):
1 | // Flanken erkennen und zählen
|
2 | If ((Flow1 = 1) and (Flow1Helper = 0)) then
|
3 | Flow1Counter = Flow1Counter + 1
|
4 | end if
|
5 |
|
6 | // Merker verwalten
|
7 | If (Flow1 = 1) then
|
8 | Flow1Helper = 1
|
9 | end if
|
10 |
|
11 | If (Flow1 = 0) then
|
12 | Flow1Helper = 0
|
13 | end if
|
Und damit kann man es auch so schreiben:
1 | // Flanken erkennen und zählen
|
2 | If ((Flow1 = 1) and (Flow1Helper = 0)) then
|
3 | Flow1Counter = Flow1Counter + 1
|
4 | end if
|
5 |
|
6 | // Merker verwalten
|
7 | Flow1Helper = Flow1
|
q.e.d.