Forum: Mikrocontroller und Digitale Elektronik LED mit Schalter ein und ausschalten


von Max M. (programmiere)


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?

von R. R. (elec-lisper)


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.

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
Noch kein Account? Hier anmelden.