Zeit eines tastendrucks messen

OP #2714780
Lesenswert?

Hallo,

ich habe hier ein Arduino wo ich bei einem tastendruck normal einen Wert 
hoch zählen lassen möchte. Wenn ich den Taster aber ca. 5 Sekunden 
gedrückt halte, dann soll der Wert schneller und automatisch hoch 
zählen. Ich habe gelesen das der Befehl " pulseIn();" dafür zu benutzen 
is, um die Zeit zu messen, wie lange der taster gedrückt wird. Das 
klappt nicht      ( zumindest nich wie ich es mache ).

Hier einmal der Code eines Versuchs von mir:

void loop() {

    if ( digitalRead ( TasterH ) == HIGH ){
      Wert++;
      lcd.clear();
      lcd.print ( Wert );
      while ( digitalRead ( TasterH ) == HIGH ) {
      if ( pulseIn ( TasterH, HIGH, 5000 ) {
         Wert++;
         lcd.clear();
         lcd.print ( Wert );
           delay (100);
     }
   }
 }
}

Was mach ich falsch? Hoffe irgendwer kann mir helfen.
#2714994
Lesenswert?

du nimmst nen Timer, und fragst in dessen ISR den Tastenzustand ab.
Den ist der Tastenzustand gedrückt, dann zählst Du eine Variable hoch.
Ist der Taster ist nicht gedrückt, dann setzt Du die Variable wieder auf 
Null.
Erreicht die Variable ihren maximalen Wert, z.B. 255 für n Byte, dann 
stoppst Du das Hochzählen oder ziehst wieder 1 von der Variable ab, 
damit die nicht überlaufen kann.
Die Variable kannst Du dann in der Mainloop auswerten, also in der Art

wenn Zählvariable ist Null, dann mach nix,
wenn kleiner 100 dann erhöhe Wert langsam,
ansonsten erhöhe Wert schnell.
#2715068
Lesenswert?

Robin F. schrieb:

> zählen. Ich habe gelesen das der Befehl " pulseIn();" dafür zu benutzen
> is, um die Zeit zu messen, wie lange der taster gedrückt wird. Das
> klappt nicht      ( zumindest nich wie ich es mache ).

Wenn ich mirt die Doku von PulseIn so ansehe

http://arduino.cc/en/Reference/pulseIn

dann sehe ich nicht nicht ganz, wie man das für den angestrebten Fall 
benutzen kann.
Du Idee das PulseIn dann loszulassen, wenn der Pin schon High ist, 
klingt erst mal plausibel. Dann muss PulseIn allerdings auf den Übergang 
High-Low warten, damit es dir sagt, dass da die Taste länger als das 
Timeout gedrückt ist. Nur sehe ich jetzt noch nicht, wie man dann das 
PulseIn davon abhält das Nichtgedrücktsein der Taste auszumessen.
OP #2715633
Lesenswert?

Schönen guten Morgen,

erstmal Danke für die schnellen Antworten.

@Karl Heinz Buchegger: Ja das is auch so mein Problem, es scheint auf 
dem ersten Blick ganz einfach und logisch, also das man abfragt welcher 
Pin wie lange HIGH oder LOW ist, aber das ist es nicht. Ich sitzt da 
schon eine ganze Weile dran...das irgendwie hin zu bekommen abr ohne 
erfolg. Ich werde jetzt mal versuchen das mit dem PulseIn zu lassen und 
schau mal die Idee von "Fhutdhb Ufzjjuz" umzusetzen.

Ich melde mich dann nachher nochmal ob ich irgendwie erfolge gemacht 
habe.

mfG
Gast #2715740
Lesenswert?

Hallo,

hast du auch beachtet da ein Taster prellt, d.h. das nicht sofort 
tatsächlich eine 1 (high) anligt sondern für einen kurzen Zeitraum 
(einige ms) immer zwischen 1 und 0 hin und her geschaltet wird ?
Dein Stichwort ist Tasterentprellung (böse Falle wenn man wenig 
erfahrung mit der Hardware hat).

mgf
    Praktiker

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