Forum: Mikrocontroller und Digitale Elektronik mit einem Taster mehrere Zustände durchschalten


von Bernd H. (Gast)


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
}

: Bearbeitet durch User
von Sebastian H. (technik_freak)


Lesenswert?

Hallo,

Mache eine Schleife o.ä. mit hinein, die verhindert, dass dein Zähler 
während der Betätigung inkrementiert.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Du musst die Taste entprellen und den Wechsel zwischen nicht gerückt -> 
gedrückt erkennen.

Siehe Entprellung

von Stefan F. (Gast)


Lesenswert?

> if(taste == 0)
> Zustand = Zustand +1;

So kommst du von 0 zu 1, aber nicht von 1 zu 2 und von 2 zu 3.

von Karl H. (kbuchegg)


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.

: Bearbeitet durch User
von nurmal so (Gast)


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
}

: Bearbeitet durch User
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.