Archiv verlassen und diese Seite im Standarddesign anzeigen : Taster mit Zeitschleife
Hallo Forum,
Ich wollte mal fragen ob ihr wisst, wie Ich folgendes programmieren kann?
Ich möchte einen Taster nehmen und wenn man ihn 1sek gedrückt hat soll er die Aktion erst starten.Wenn er länger oder kürzer gedrückt worden ist, soll nichts passieren.
Wie programmiere ich das????
Wenn es geht hätte ich gerne einen Beispielcode gesehen.
Entweder in Basic oder C
Ich sag schon mal Danke!
peterfido
13.05.2010, 15:47
Ich nutze oft einen Timer, welcher mir die TickCount API nachmacht.
Einfach den Wert des TickCounts merken, wenn der Timer gedrückt wurde und wenn er losgelassen wurde, die Zeit ausrechnen.
Du kannst auch die Sekunden "mißbrauchen", falls Du eine Uhr mitlaufen hast. Oder in der Hauptschleife bei gedrücktem Taster eine ms warten und wenn der Taster nach ~ 1000 Durchläufen losgelassen wurde reagieren.
Beispielcode macht für mich erst Sinn, wenn ich weiß, welche der Vorraussetzungen bei Dir (dem Programm) gegeben sind.
ja so ähnlich mach ichs auch immer
Oder einfach jede 10ms pollen und die Durchgänge Zählen, wie lange er low ist. Bei high abrechen. Am besten mit ISR (interrupt) realisieren.
Hallo!
@ bnitram
Deine Idee hat nur dann Sinn, wenn die 1 Sek mit genauer Toleranz (z.B. +/- 20 %) festgelegt ist. Es ist praktisch nicht möglich einen Taster genau 1 Sek gedrückt halten ... ;)
MfG
@ PICture
Das stimmt auch wieder.
Kennt den jemand einen Beispielcode in Basic oder C ??
( falls es euch hilft, ich habe den Pro-Bot128 )
Also Ich wollte es irgendwie so machen:
....
If sw2 = 1 for AbsDelay(1000) Then
FLL_ON()
End If
.....
Aber das geht mal garnich!!!!
Hat einer ne bessere Idee?????
nflatjor555
16.05.2010, 01:20
Erst eine Frage: ist es OK dass wenn die Taste gedrueckt ist, der uC NUR auf Loslassen der Taste wartet (d.h. er kuemmert sich nicht ums Sensoren einlesen, Daten ausgeben etc....)?
Wenn ja, kannst du etwa wie folgt machen (Syntax in deinem Compiler ist wahrscheinlich anders):
bool Taste1sGedrueckt()
{
// Ich nehme an: "0" = Taste gedrueckt
uint ms=0; // 16-bits uint
while (Taste==0) // Taste gedrueckt?
{
delay_ms(1);
ms++;
}
// Hierher kommen wir wenn die Taste losgelassen wird (oder nicht gedrueckt ist)
// Nun checken wir die verlaufene Zeit
if ((ms>=800) && (ms<=1200)) // 1s +/- 20%
return true;
else
return false;
}
Danke nflatjor555,
leider programmiere ich in Basic mit einer Libyer!!
(ich habe sie unten mal gepostet)
Vielleicht kannst du ja mal nen Basic Code daraus machen???!!
peterfido
16.05.2010, 12:28
Die SYSTEM_CNT() bietet sich an. Wenn sw2 gedrückt ist, darin eine Variable hochzählen.
Wenn sw2 nicht gedrückt ist, abfragen, ob die Variable zwischen 80 und 120 ist, wenn ja entsprechend reagieren und die Variable auf 0 setzen. Wenn nein nur die Variable auf 0 setzen.
Gut,
Hast du auch zufälligerweise einen Beispielcode???
Würde mich freuen wenn!!!
Hallo
Weiß denn keiner wie ich das programmieren kann ????
Wie frage ich denn den Befehl ab ( SYSTEM_CNT() )???
If butten() =1 Then
SYSTEM_CNT()
End If
If SYSTEM_CNT() = 1000 Then
FLL_ON()
End If
Das Funktioniert nicht!!
Wie muss ich das richtig machen???
PS:
Die Libyer habe ich ja oben schon gepostet falls euch das hilft!!
ginge es nicht mit einer while...wend Schleife. Das Ergebnis wird dann ausgewertet?
Ne das geht auch nicht!!
Hauptsächlich geht es um dieses hier:
"If SYSTEM_CNT() = 1000 Then"
Dann kommt immer folgender Fehler:
Semantik Fehler - Operator "="für Typ undefiniert nicht erlaubt
Jetzt weiß ich nicht wie ich es machen soll!!?? :-k :-k
PS:
Es muss nicht mit SYSTEM_CNT() Befehl sein!!
Es kann auch anders gemacht werden!!
peterfido
28.05.2010, 17:49
System_cnt ist kein Befehl sondern eine SUB (Unterroutine), welche laut Beschreibung alle 10ms aufgerufen wird.
Diese könnte um die Funktion erweitert werden.
Wenn der Button gesetzt ist, wird eine Variable hochgezählt, wenn der Button nicht gesetzt ist, wird die Variable auf Wertigkeit zwischen 90 und 110 verglichen und wenn wahr dann die gewünschte Aktion ausführen und in beiden Fällen die Variable auf 0 zurücksetzen.
Genau vorgeben kann ich es nicht, da mir die nötige Umgebung zum Testen fehlt weil ich die Tasterabfrage etwas ungewöhnlich finde...
Danke peterfido,
wenn jemand einen Beispiel code hat, dann bitte posten!!!
:D
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.