mit einem Taster mehrere Zustände durchschalten

Gast #3378449
Lesenswert?

Hallo,

ich programmiere in C mit einem Atmega 32. Ich möchte gerne mit einem 
Taster mehrere Zustände auf dem Display anzeigen
also das bei Tastendruck halt der nächste Zustand angezeigt wird
Bis jetzt habe ich dies shcon aber es Zeigt mir nicht das gewünschte an
hat jemand eine Idee?
1
if(taste == 0)
2
Zustand = Zustand +1; 
3
if(Zustand == 3) Zustand =0;
4

5
if(Zustand == 1)
6
{
7
//erste Anzeige
8
}
9
if(Zustand == 2)
10
{
11
//zweite Anzeige
12
}
#3378479
Lesenswert?

Stefan us schrieb:
>> if(taste == 0)
>> Zustand = Zustand +1;
>
> So kommst du von 0 zu 1, aber nicht von 1 zu 2 und von 2 zu 3.

Doch kommt er.
Der Teil funktioniert wunderbar.

Aber das Problem ist, dass diese Zustandsweiterschaltung passiert, 
SOLANGE die Taste gedrückt ist. SOLANGE ist aber ein relativer Begriff. 
Egal wie sehr er auch versucht, diese Drückdauer kurz zu halten ... sein 
µC führt die darüberliegende (Haupt-)Schleife ein paar tausendmal in 
dieser Zeit aus und damit erfolgt diese Zustandsweiterschaltung auch ein 
paar tausendmal während er die Taste drückt. Damit ist das aber für 
einen Benutzer nicht mehr handhabbar, denn er kann das gewünschte 
Ergebnis nicht reproduzierbar steuern.

Die Lösung des Problems wurde von Falk schon angesprochen: Sie besteht 
in der Erkennung des Tastenwechsels von 'nicht gedrückt' zu 'gedrückt' 
und der dann einmaligen Ausführung der Zustandsweiterschaltung.
Im Prinzip eine einfache Sache (eine banale Flankenerkennung), wenn da 
nicht das Problem wäre, dass Taster nach einiger Zeit anfangen zu 
prellen.
Gast #3378482
Lesenswert?

Ganz quick & dirty

ich gehe mal davon aus das du den Taster entprellt hast und der 
entprellte Zustand in Variable "taster" abgelegt ist.

1
if(taste == 0 && taste_merk == 1)
2
{
3
    Zustand = Zustand +1; 
4
}
5
taste_merk = taste;
6

7
if(Zustand == 3) Zustand =0;
8

9
if(Zustand == 1)
10
{
11
//erste Anzeige
12
}
13
if(Zustand == 2)
14
{
15
//zweite Anzeige
16
}

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