Tastenabfrage in C

Gast #1550757
Lesenswert?

Ich versuche gerade in C eine Tastenabfrage zu erstellen.
Bei kurzem Druck soll eine Variable hochgezählt werden. Bei langem Druck 
soll die aktuelle Variable ins EEPROM gespeichert werden:
1
while(1)
2
  {
3
    PORTD = pgm_read_byte(&Tabelle[nKeyPress]);
4
    if (bit_is_clear (PINB, PINB0))
5
    {
6
      if (bPortB) // wenn Taster gedrückt
7
      {
8
        dauer++;
9
          }
10
      else // wenn nicht gedrückt
11
      {
12
        if   (dauer > 10)
13
        {
14
          if (nKeyPress < 8)
15
          {
16
            nKeyPress++;
17
            bPortB = 0;
18
          }
19
          else
20
          {
21
            nKeyPress = 0;
22
            bPortB = 0;
23
          }
24
        }
25
        if   (dauer > 20) // wenn länger gedrückt
26
        {
27
          eeprom_write_byte(&eeFooByte, nKeyPress);
28
          dauer = 0;
29
          Warte (100);
30
        }
31
      }
32
      }
33
      else
34
    {
35
          bPortB = 1;
36
      }
37
  }
38
  return 0;
Ich komme nur einfach nicht klar damit.
Ist das der richtige Weg?
#1550783
Lesenswert?

DerSchatten schrieb:

> Ich komme nur einfach nicht klar damit.
> Ist das der richtige Weg?

Dein Fragnment ist gar nicht so einfach zu analysieren.
Alles in allem erscheint es mir aber ünverhältnismässig kompliziert für 
die Funktion die es bereitstellt.

Benutze doch einfach die PeDa Entprellung. Die macht das was du vorhast, 
aus dem Stand.
http://www.mikrocontroller.net/articles/Entprellung#Komfortroutine_.28C_f.C3.BCr_AVR.29
Persönliche Seite #1550796
Lesenswert?

So kann ich das empfehlen, für jeden einfacher(es geht nur um die 
Formatierung.)
1
while(1){
2
        PORTD = pgm_read_byte(&Tabelle[nKeyPress]);
3
        if (bit_is_clear (PINB, PINB0)){
4
                if (bPortB){ // wenn Taster gedrückt
5
                        dauer++;
6
                }
7
                else{ // wenn nicht gedrückt
8
                        if(dauer > 10){
9
                                if (nKeyPress < 8){
10
                                        nKeyPress++;
11
                                        bPortB = 0;
12
                                }
13
                                else{
14
                                        nKeyPress = 0;
15
                                        bPortB = 0;
16
                                }
17
                        }
18
                        if(dauer > 20){ // wenn länger gedrückt
19
                                eeprom_write_byte(&eeFooByte, nKeyPress);
20
                                dauer = 0;
21
                                Warte (100);
22
                        }
23
              }
24
        }
25
        else{
26
                bPortB = 1;
27
        }
28
}
29
return 0;
Gast #1550845
Lesenswert?

Hallo Karl,

hab mir das Beispiel angesehen und ausprobiert.
Erstmal 1:1 übernommen.

Das einzige was jedoch passiert ist, das die 3 LEDs sofort zu leuchten 
beginnen, mehr nicht.
So wie ich das verstanden habe sollen die ja erst leuchten wenn einer 
der 3 Taster gedrückt wird oder?
Was bewirkt hier ein langer Tastendruck?

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