Forum: Mikrocontroller und Digitale Elektronik Tastenstatus während Druck überprüfen


von Andi (Gast)


Lesenswert?

Hallo zusammen,

mit Sicherheit für viele von Euch eine Anfängerfrage.
Ich programmiere in C mit einem ATmega8.

Problem:
Taster 1 gedrückt -> rote LED leuchtet
Taster 2 gedrückt -> gelbe LED leuchtet
Taster 1+2 gedrückt -> rote,gelbe,grüne LED leuchtet.
Lasse ich nun einen der Taster wieder los ändert sich der Status der 
LEDs nicht mehr.
Auch wenn nur einer der beiden Taster gedrückt ist(nachdem beide 
zusammen gedrückt waren) leuchten alle 3 LEDs weiter.

Ich will gar keine Fertiglösung sondern nur ein Stichwort/Thema unter 
dem ich suchen muss. SuFu hat keine brauchbaren Ergebnisse gegeben.
Ich habe Peter Daneggers Lösung zum entprellen eines Tasters gesehen und 
habe die Vermutung das ich irgendwie einen FLAG Wert setzen muss. Bin 
ich da auf dem richtigen Weg? Die Entprellung habe ich selber noch nicht 
implementiert da ich gerade noch dabei bin diese zu verstehen. Hier der 
Quelltext:

// Target: ATmega 8

#include <avr/io.h>
#include <util/delay.h>
//#define  F_CPU 3686400

int main()
{
  DDRB =  (1 << DDB0) | (1 << DDB1) | (1 << DDB2);  // Bit 1,2,3 auf 
high(Ausgang);
  DDRC = 0x00;  // PORT-C als Eingang definieren ( nicht zwingend 
notwendig!)
  PORTC |= (1 << DDD0) | (1 << DDD1);  // Interne Pull-ups für C0 und C1

  do 
  { 
      if ( (PINC & (1 << PINC0)) == 0)    // falls Taster 2 gedrückt, we 
gen internen Pull-up        {
   PORTB = PORTB | (1 << DDB0);            // rote LED an

     if ( (PINC & (1 << PINC1))== 0) // falls beide Tasten gedrückt...       
  
        {
                          PORTB |= 0x07 ;     // alle LEDS an
        }
      }
      else if (!(PINC & (1 << PINC1)))    // falls Taster 1 gedrückt...    
     
    {
                  PORTB |= 0x02;      // gelbe LED an
    }
      else                // ansonsten alle LEDS aus!        
    {
                  PORTB &= 0x00;
    }
      
  }
      while (true);

      return 0;
}



Danke im voraus!

von Purzel H. (hacky)


Lesenswert?

Tasten fragt manmit einem Timer raster und einer Zustandsmaschine ab.

von Thomas E. (thomase)


Lesenswert?

Andi schrieb:
> Lasse ich nun einen der Taster wieder los ändert sich der Status der
> LEDs nicht mehr.
> Auch wenn nur einer der beiden Taster gedrückt ist(nachdem beide
> zusammen gedrückt waren) leuchten alle 3 LEDs weiter.
Wie denn auch?
Die Leds werden nur abgeschaltet, wenn beide Tasten nicht gedrückt sind.
Das reicht aber nicht. Es müssen bei jeder Tastenkombination auch die 
entsprechenden Leds abgeschaltet werden.

mfg.

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.