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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Max M. (programmiere)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.