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!
Tasten fragt manmit einem Timer raster und einer Zustandsmaschine ab.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.