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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.