Forum: Compiler & IDEs Fallende Flanke von Variable nach MC neustart


von Max Mustermann (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe ein Programmproblen, eher gesagt bin ich zu doof.
Ich habe eine Softwareentprellung von Peter Danneger womit ich eine 
fallende Flanke erkenne (s.Anhang). Mein Problem ist, wenn ich jetzt den 
MC einschalte, wird diese fallende Flanke einmal erkannt.
Dieses will ich aber nicht, somit habe ich mir eine Variable geschaffen, 
die nach 5 Sekunden nach MC Neustart auf True geht und diese dann vor 
der Routine eingefügt,
1
if (MC_hochgefahren && R_TRIG(!licht_status[9])) {DimmenAus (PSTR("89|11|02|00\r"),PSTR("98|11|02|00\n\r"),9);}

Trozdem wird die "Iffe" nach 5 Sek einmal Wahr. Ich habe da irgendeinen 
Denkfehler, kann mir dort bitte jemand helfen?

Danke!

: Verschoben durch User
von Max (Gast)


Lesenswert?

Hat keiner eine Idee?

von Karl H. (kbuchegg)


Lesenswert?

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
  }

: Bearbeitet durch User
von Max Mustermann (Gast)


Lesenswert?

Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.