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

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.