Button Implementierung

Gast #1467662
Lesenswert?

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

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

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

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