LED mit Schalter ein und ausschalten

OP #4866562
Lesenswert?

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?
#4866619
Lesenswert?

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.

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