Dafür musst du gucken, ob der Ausgang schon auf High ist oder nicht.
Mal in Pseudocode ausgedrückt:
Code:
if Taste==High and Dir==High
Dir=Low;
elseif Taste==High and Dir==Low
Dir=High;
Das sorgt dann dafür, dass bei Tastendruck umgeschaltet wird, allerdings schaltet der dann immer um, wenn er die Schleife aufruft, hält man also länger gedrückt, wechselt es immer zwischen vor und zurück. Daher müsstest du wohl noch eine Variable einführen, die in der Schleife gesetzt wird und dann ein erneutes Umschalten verhindert.
Quasi so:
Code:
if Taste==High and Dir==High and Bla==Low
Dir=Low;
Bla=High;
elseif Taste==High and Dir==Low and Bla==Low
Dir=High;
Bla=High;
elseif Taste==Low and Bla==High
Bla=Low;
Edit: Schalter entprellen? Hmm, das weiß ich ehrlich gesagt auch nicht, bei Tastern muss es aber sein. Entprellen bedeutet, dass beim Drücken der Kontakt nicht sofort geschlossen wird, sondern eventuell durch irgendwelche Effekte noch ein zweites Mal auslöst. Dies lässt sich entweder durch einen Kondensator zwischen Eingang und Gnd lösen, der das Spannung für die kurze Zeit hält, oder man macht das softwareseitig, indem man nach dem ersten Kontakt ein Weilchen wartet, bis der Eingang wieder abgefragt wird. Das Entprellen macht aber auch nur Sinn, wenn durch den Taster ein Interrupt ausgelöst wird, wenn du ihn eh nur alle 100ms abfragst, ist die Chance sehr gering, dass er ausgerechnet in dem Moment, wo er abgefragt wird, prellt.
Lesezeichen