Doch, aber die willst du nicht hören.
Dein Lösungsversuch funktioniert deshalb nicht, weil die Flanke nicht
real ist, sondern sich aus der Belegung der Variablen nach dem
Einschalten ergibt. D.h. selbst wenn du den µc 2 Stunden warten lassen
würdest, würdest du immer noch diese falsche Flanke kriegen.
Aus dem Bauch raus denke ich, dass du dir hier
1 | if ( ...._TRIG(!licht_status[9])
|
mit dem ! keinen Gefallen getan hast. Du wolltest clever sein und
licht_status eine für dich logische Belegung für TRUE und FALSE geben,
hast dich damit aber ins Knie geschossen.
Allerdings:
licht_status klingt nicht danach, dass da ein Taster dahinter steckt.
licht_status sagt einfach nur, dass das Licht eingeschaltet ist oder
nicht. RIchtig?
Wozu brauchst du dann diese komplizierte ENtprellung dafür? Das wirst du
doch wohl auch selber hinkriegen, dass du das Schaltkommando nur dann
weiter gibts, wenn das Licht ausgeschaltet wird. Oder nicht? Dein
Programm führt intern für jedes Licht 2 Variablen, die eine sagt aus, in
welchem Zustand das Licht ist, die andere sagt aus in welchem Zustand es
sein soll und die beiden vergleichst du. Wenn sie nicht übereinstimmen,
dann muss geschaltet werden, wobei dir die Soll-Variable sagt, ob ein
oder aus.
Und die Soll Variable manipulierst du dann im weiteren Programm nach
Bedarf und dieser einfache Mechanismus generiert dir dann das Einschalt-
bzw. Ausschaltkommando.
1 | uint8_t Zustand_Ist;
|
2 | uint8_t Zustand_Soll;
|
3 |
|
4 | ....
|
5 |
|
6 | while( 1 )
|
7 | {
|
8 |
|
9 | ....
|
10 | if( Zustand_Ist != Zustand_Soll )
|
11 | {
|
12 | if( Zustand_Soll == AUS )
|
13 | Schicke Kommando zum ausschalten
|
14 | else
|
15 | Schicke Kommando zum einschalten
|
16 |
|
17 | Zustand_Ist = Zustand_Soll;
|
18 | }
|
19 |
|
20 | ....
|
21 |
|
22 | aufrgund irgendwelcher Sachen wird Zustand_Soll
|
23 | auf neue Werte gesetzt.
|
24 | }
|