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