if(taster getoggelt)

Gast #3218996
Lesenswert?

Unsauber ohne Entprellung:
1
// Beispiel für einen Taster an PA0
2
#define TASTER_PIN PINA
3
#define TASTER_PNO PA0
4

5
uint8_t taster_pin_old = PINA;
6

7
while(1)
8
{
9
  if((taster_pin_old & (1 << TASTER_PNO)) != (TASTER_PIN & (1 << TASTER_PNO))
10
  {
11
    tue_dies();
12
    tue_das();
13
    tue_jenes();
14
  }
15
}
Gast #3219004
Lesenswert?

... am Ende der mainloop oder sonstwie muss natürlich der Zustand 
umgespeichert werden, oder man macht das im else-Zweig, oder in einem 
Timerinterrupt. Hauptsache regelmäßig und nach(!) der Abfrage, ob sich 
was geändert hat.
1
taster_pin_old = PINA;
Gast #3219039
Lesenswert?

des geht auch kürzer und für meine Begriffe übersichtlicher mit einem 
exor
1
// Beispiel für einen Taster an PA0
2
#define TASTER_PIN PINA
3
#define TASTER_PNO PA0
4

5
uint8_t taster_pin_old = TASTER_PIN;
6

7
while(1)
8
{
9
  if( (taster_pin_old ^ TASTER_PIN) & (1 << TASTER_PNO) )
10
  {
11
    taster_pin_old = TASTER_PIN;
12
    tue_dies();
13
    tue_das();
14
    tue_jenes();
15
  }
16
}
Gast #3219045
Lesenswert?

Für eine Flankenerkennung muss immer der alte Wert als Vergleichswert 
vorliegen. Deswegen auch eine Variable und das umspeichern:
1
Was ich wollte:
2
          _____
3
         |  -1 |    _____
4
in o--+--| Z   |---|     |
5
      |  |_____|   | !=  |----o out
6
      +------------|_____|

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren