Button Implementierung

Gast #1467662
Hallo,

kann mir vielleicht jemand bei meinem Codeproblem helfen?
Hab grad nen Hänger..
Hab nen Taster auf Eingang geschaltet und möchte nen andren Ausgangport 
damit ansteuern, man wird mich vielleicht auslachen, aber irgendwie 
krieg ichs nicht hin, dass mein ausgelöster Zustand beim drücken des 
Tasters stabil bleibt.
Sprich: Man muss den Taster gedrückt halten, damit mein Ausgangsport auf 
"high" ist..
Möchte aber, dass wenn ich den Taster betätige und der Ausgangsport auf 
Low ist High wird... so bleibt bis ich den Taster wieder betätige und 
dann auf Low geht usw.
Hier der Programmausschnitt:

    ...
    volatile unsigned int but = 0;
    ...
    if( (P1IN & 0x02) && (P1OUT&(~0x01)) && but==0){
       BUTTON_HIGH;
       but=1;
    }
    if( (P1IN & 0x02) && (P1OUT | 0x01) && but==1){
       BUTTON_LOW;
       but=0;
    }

Mir ist irgendwie schon klar, dass durch diesen Code immer verlangt 
wird, dass mein Eingangspin (Taster) gedrückt wird, aber irgendwie komm 
ich nicht auf den Zusatz wie ich ihm sag -> "du bist gedrückt worden, 
also veränder deinen Zustand komplett"...
Danke im vorraus für rasche Antworten!

Greetz
V.H.
Moderator (Firma: Titel) Persönliche Seite
> dass mein ausgelöster Zustand beim drücken des Tasters stabil bleibt.
Von prellenden Tastern hast du schon gehört?
(Das ist jetzt gerade nicht dein Problem, es könnte aber noch eins 
werden...)

Das Gute daran: du bist nicht der erste, der dieses Problem hat ;-)
Such mal hier im Forum nach der Tasterentprellung von Peter Danegger.
Gast
Ist relativ einfach, wenn du erkennst, dass der Taster gedrückt wurde 
(also entweder mit steigender ODER fallender Flanke), änderst du den 
Zustand einer Variablen von z.B. 0x00 nach 0x01 und umgekehrt. Oder du 
änderst direkt den Zustand des Ports. Du darfst aber nur bei einer der 
Flanken ändern, sonst hast du wieder Taster- anstatt 
Schalterverhalten...

Ralf

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.