Tastenstatus während Druck überprüfen

Gast #2809794
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!
#2810412
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.

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