Tastenabfrage else Anweisung nur ein Durchlauf

Gast #4252566
Lesenswert?

Hallo zusammen,

ich komme da gerade mit einem einfachen Problem nicht weiter:

Mittels einer Tasterabfrage will ich das, was in der else Anweisung 
steht, nur einmal durchlaufen haben, d.h. nicht solange die Taste an PD2 
gedrückt ist, sondern nur einmal. Erst nachdem die Taste erneut gedrückt 
wird, soll die else Anweisung wieder erneut durchgeführt werden.

while (1)
{

if ( PIND & (1<<PD2) )   // Taster nicht gedrückt

  {  ...
        }

else    {  ...
        }

}

Ich komme da gerade nicht drauf, vielleicht könnte ihr mir einen Hinweis 
geben.
Gast #4252569
Lesenswert?

Dann musst du im else-Zweig solange verbleiben, bis die Taste wieder 
losgelassen wird - oder ein Flag setzen, wenn gedrückt und es wieder 
zurücksetzen, wenn losgelassen wurde.
Tastenentprellung nicht vergessen.
#4252570
Lesenswert?

Guten Morgen

mit
1
if (PIND & (1<<PD2)) ..
 fragst Du nur einen Pin ab, was man aber braucht, ist 
Tasterentprellung.
Und nur so erhält man eine Flankenerkennung - Taste gedrückt oder Taste 
losgelassen.

# https://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen

# 
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Taster_und_Schalter

# Beitrag "Universelle Tastenabfrage"
Gast #4252934
Lesenswert?

W.A. schrieb:
> Womit sich das Programm sicher aufhängen würde, weil es dann nie wieder
> zur Tastenabfrage kommt ;-(

Doch, z.B. so. Aber wie schon gesagt: "Tastenentprellung nicht 
vergessen".
Dass das Programm dann nur die Tasten bedient, ist klar.
1
while (1)
2
{
3

4
if ( PIND & (1<<PD2) )   // Taster nicht gedrückt
5

6
  {  ...
7
        }
8

9
else    {  ...
10
           while (!( PIND & (1<<PD2) ));
11
        }
12

13
}

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