Taster auf und abwärts zählen

Gast #1978622
Lesenswert?
• ▲
▼
Hallo,

ich versuche hier 2 Taster, jeweils einen für hoch und den anderen für 
runter auf eine 7 Segment Anzeige auszugeben. Jedoch scheiterts schon 
daran, dass ich es nicht hinbekomme bei einem Tasterdruck die Variable 
menuValue nur um einen erhöht wird! Er soll von 1-9 hoch und runter 
zählen können! 0x1 ist hoch und 0x2 ist runter.

Danke!!
1
int main()
2
{
3
    static int menuValue = 1;
4
    int pushButtons;
5
    int pushCnt = 0;
6
    
7
    
8
    menu();
9
    do{
10
        pushButtons = IORD_16DIRECT(IO_IN_PUSH_BUTTONS_BASE,0);
11
        if(pushButtons && 0x01)
12
        {    
13
            pushCnt++;
14
            if(pushCnt > 8)
15
                if(menuValue < 9)
16
                {
17
                    menuValue++;
18
                    pushCnt = 0;
19
                    usleep(10000);
20
                }
21
        }
22
        if(pushButtons && 0x02)
23
        {
24
            pushCnt++;
25
            if(pushCnt > 8)
26
                if(menuValue >= 1)   
27
                {     
28
                    menuValue--;
29
                    pushCnt = 0;
30
                    usleep(10000);
31
                }
32
        }
33
        else if(pushButtons && 0x03)
34
            break;
35
        printf("%i %i\n",menuValue, pushCnt);
36
        usleep(10000);
37
//        IOWR_16DIRECT(IO_OUT_7_SEGMENT_BASE, 0, 0x40);
38
//        buttonState();
39
    }while(1);
#1978674
Lesenswert?
• ▲
▼
Das hier

        pushButtons = IORD_16DIRECT(IO_IN_PUSH_BUTTONS_BASE,0);

klingt nach einer mehr oder weniger direkten Port Abfrage.

Damit macht dein Programm aber:
  Solange eine Taste gedrückt ist, mache ....

und nicht
  Bei einem Tastendruck mache ...

Das ist ein Unterschied, wie bei den Scheibenhebern im Auto.
Da gibt es welche, auf die drückt man kurz drauf und die Scheibe fährt 
ganz nach oben. Und es gibt welche, bei denen bewegt sich die Scheibe 
nur dann, wenn man den Taster gedrückt hält.
#1979430
Lesenswert?
• ▲
▼
Holzi schrieb:
> Wie realisiere ich
> das am logischsten in C?

Z.B. mit meiner Entprellroutine (s.o.).

Die Anpassung auf andere CPUs ist ganz leicht, nur der Timerinterrupt 
(Init, Syntax) muß angepaßt werden.

So eine zentrale Entprellroutine ist ein echter Zeitsparer. Man muß sich 
nie wieder mit Entprellen und Flanke erkennen abquälen. Man kann sich 
voll auf die eigentliche Aufgabe konzentrieren.
Das Zeitsparen ist sogar doppelt: Der Entwickler spart Zeit und die CPU 
auch (keine Delayloops).


Peter
Gast #1979444
Lesenswert?
• ▲
▼
danke gelöst!
1
pushButtons = IORD_16DIRECT(IO_IN_PUSH_BUTTONS_BASE,0);
2
    segment7(menuValue);
3
    if((pushButtons & 0x01) && (button1Mode == TRUE))
4
    {    
5
        if(menuValue < 9)
6
        {
7
            button1Mode = FALSE;
8
            menuValue++;
9
        }
10
    }
11
    if(!(pushButtons & 0x01))
12
        button1Mode = TRUE;
13
    if((pushButtons == 0x02) && (button2Mode == TRUE))
14
    {
15
        if(menuValue > 1)   
16
        {     
17
            button2Mode = FALSE;
18
            menuValue--;
19
        }
20
    }
21
    if(!(pushButtons & 0x02))
22
        button2Mode = TRUE;

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.