Forum: Mikrocontroller und Digitale Elektronik anzugsverzögerung für taster in C


von Daniel T. (wildforce)


Lesenswert?

hi,
wie kann ich hier:

 if(PINB.1 == 0) //Stop/Pause Taster
  {
   TCCR1B=0x00;     // Timer 1 stop
   TCCR0B=0x00;     // Timer 0 stop
   laeuft = 0;          // Programm läuft nicht
   manual_stop = 1;     // Stop Taster wurde gedrückt, Reset freigegeben
   PORTC.0 = 0;         // grüne LED aus
   PORTC.2 = 0;         // Motor Stop
   lcd_gotoxy(0,1);     // LCD Ausgabe
   lcd_putsf("Pause           ");
   pausiert = 1;        // Programm ist pausiert
   stoerung = 0;        // falls eine Störung vorlag wird sie bestätigt
  }

eine zeitverzögerung für den taster einbauen, dass ich ihn erst 2sec 
gedrückt halten muss, dass die if ausgeführt wird?
finde nur entwas zur zeitverzögerungen in laufenden programmen -.-"

Grüße :)

von Karl H. (kbuchegg)


Lesenswert?

Muss in der Zwischenzeit (in diesen 2 Sekunden) irgendwas anderes 
weiterlaufen?

Wenn nein

 if(PINB.1 == 0) //Stop/Pause Taster
 {

    warte 2 Sekunden

    Taster immer noch gedrückt?
    ja ->
      TCCR1B=0x00;     // Timer 1 stop
      TCCR0B=0x00;     // Timer 0 stop
      ....


Wenn da sonst noch irgendwas anderes weiterlaufen muss, so dass warten 
nicht erlaubt ist, dann könnte man einen Timer einsetzen, der nach 2 
Sekunden abläuft. Taste gedrückt -> Timer starten, Taste losgelassen -> 
Timer zurücksetzen. Schafft es der Timer abzulaufen, dann löst er den 
Resetvorgang aus.

von Daniel T. (wildforce)


Lesenswert?

also so?:

 if(PINB.1 == 0) //Stop/Pause Taster

delay_ms(2000);
if(PINB.1 == 0)
{
   TCCR1B=0x00;     // Timer 1 stop
   TCCR0B=0x00;     // Timer 0 stop
   laeuft = 0;          // Programm läuft nicht
   manual_stop = 1;     // Stop Taster wurde gedrückt, Reset freigegeben
   PORTC.0 = 0;         // grüne LED aus
   PORTC.2 = 0;         // Motor Stop
   lcd_gotoxy(0,1);     // LCD Ausgabe
   lcd_putsf("Pause           ");
   pausiert = 1;        // Programm ist pausiert
   stoerung = 0;        // falls eine Störung vorlag wird sie bestätigt
  }

es muss sonst nichts anderes gleichzeitig ausgeführt werden.

von Karl H. (kbuchegg)


Lesenswert?

Daniel Träger schrieb:
> also so?:
>
>  if(PINB.1 == 0) //Stop/Pause Taster
>
> delay_ms(2000);
> if(PINB.1 == 0)
> {

und jetzt schaust du dir noch an, ob das erste if ein paar { } braucht

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.