Hallo an Alle, ich habe ein Problem welches ich einfach nicht gelöst bekomme. Programmieren ist noch ganz neu für mich und ich hoffe auf eure Unterstützung. Im der letzten Aufgabe habe ich es geschafft, eine LED so lange zum leuchten zu bringen, wie ich den Taster halte: Void init_MCU() { DDRC|=1<<LED1; PORTA|=1<<SWT1; } Void init_MCU(); Int main (void) { Uint8_t IN; Init_MCU(); While (1) { In=(~PINA&(1<<SWT1))==(1<<SWT1); If (IN) PortC|=(1<<LED1); Else Portc&=~(1<<LED1); } } Ich bekomme es aber nicht umgebaut, dass wenn ich eine Taste drücke der Zustand beibehalten wird. Ich habe versucht mit in Flanken und entprellen von Schalter einzulesen aber komme da nicht weiter. Hat jemand einen Vorschlag?
Wäre prima wenn du den Code 1:1 posten könntest und mit [ c ]...[ /c ] umgeben könntest, dann würde die Formatierung nicht flöten gehen. Prinzipiell musst du dir den Zustand in einer Variablen merken, die du nicht bei jeder Runde überschreibst:
1 | uint8_t on = 0; |
2 | while (1) |
3 | {
|
4 | if ((~PINA & (1<<SWT1)) == (1<<SWT1) |
5 | on = 1; |
6 | |
7 | if (on) PORTC |= (1 << LED1); |
8 | else PORTC &= ~(1 << LED1); |
9 | }
|
Entprellen geht bspw. mit einem delay nach der 1. Messung der Pin-Zustände. Wenn dann nach dem delay der Zustand gleich ist, kannst du "on" bspw. wieder zurück setzen. Dafür solltest du aber was mit der Google-Suche in diesem Forum finden.
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.