Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfänger probleme mit taste
logikbomb
28.12.2004, 22:07
habe eine kleine schaltung geschrieben (Ampelschaltung)
wollte jetzt eine taste nehmen wen die gedrückt wird soll das programm schneller zum anfang gehen da angekommen nach kurzen warten wieder normal weitergehen als tastenport wollte ich wie unten zu sehen Pind.4 nehmen
Code
$regfile = "2313def.dat"
$crystal = 3686400
Config Pind.4 = Input
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
Do
ab hier sollte das prog normal weitermachen
Set Portb.2
Wait 10
Set Portb.1
Wait 2
Reset Portb.1
Reset Portb.2
Set Portb.0
ab hier sollte es bis zum anfang schneller gehen wenn man die taste drückt
Wait 10
Set Portb.1
Reset Portb.0
Set Portb.1
Wait 4
Reset Portb.1
Loop
End
hoffe jemand kann mir helfen dabei
logikbomb
28.12.2004, 22:37
hatte vergessen
Portb.0 = Grün
Portb.1 = Gelb
Portb.2 = Rot
Also wenn ich dich richtig vertehe, dann sollten die einzlnen Pausen zwischen
ab hier sollte es bis zum anfang schneller gehen wenn man die taste drückt
und
Loop
Eine Frage hätte ich dann noch, soll die Zeit verkürzt werden, wenn der Taster an der entsprechenden Stelle gedrückt ist, oder auch dann, wenn er z.B. in der 10 sekündigen Pause gedrückt wird?
im 1. Fall ginge das recht einfach.
im 2. Fall müsste man vermutlich ganz anders Programmieren.
Wichtig ist auch, inwieweit die Zeit verkürzt werden soll, halbiert, und was ist dann, wenn die Hälfte der Pause schon um ist?
MFG Moritz
logikbomb
29.12.2004, 12:55
er soll schneller auf rot schalte so wie du meintest im 1. fall
habe aber das problem das ich generel nicht weiß wie man tasten im programmablauf programmiert
Also da gibt es 2 Möglichkeiten, die erste ist über eine if-Anweisung, was den NAchteil hat, dass du, wenn du keine schnell durchlaufende Schleife hast, nur an einer bestimmten Stelle prüfst, ob die Taste gedrückt ist. Die 2. Möglichkeit wäre ein Interrupt, der ja bekanntermaßen sofort anspringt, allerdings ist es dann etwas schwerer von der Interruptroutine Bezug auf das laufende Programm zu nehmen.
Den Taster würde ich im 1. Fall (if-Anweisung) gegen Masse un an einen beliebigen Pin schließen. AUßerdem muss an dem Pin, nehmen wir mal PinD.4 der Pullup aktiviert werden, denn wenn der Taster nicht gedrückt ist, liegt ja kein Signal an und das ist bei Eingängen garnicht gut.
config Pind.4=input
Portd.4=1 'Beim Setzen im Port!
Nun ist der Taster quasi schon konfiguriert.
Jetzt die If-Anweisung:
If Pind.4=0 then 'Wenn Taster gedrückt, dann
'Tue dies
else
'Tue das
End if
Man könnte jetzt in der If-Anweisung z.B. die Pausen verkürzen, wenn man diese vorher zu Variablen gemacht hätte. Der NAchteil ist halt, dass nur vor der 10 Sek. langen Pause geprüft wird ob ein Taster gedrückt ist, wird er zu spät, also während der Pause gedrükt, dann reagiert das Programm nciht daruaf.
Hier müsste man dann mit Interrupts arbeiten, allerdings dann auch die Pausen z.B. durch SChleifen ersetzen, die Besser verändert werden können.
MFG Moritz
logikbomb
29.12.2004, 17:49
das programm läuft nur ca.30 sek da ist das nicht so schlimm wenn es nicht sofort reagiert hab ja zeit werde es mal so versuchen und wenn es funktioniert oder nicht werde ich dan posten
MFG Mario
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.