Forum: Mikrocontroller und Digitale Elektronik Zeit eines tastendrucks messen


von Robin F. (gehacktes)


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.

von Kan a. (Firma: Basta) (kanasta)


Lesenswert?

Robin F. schrieb:
> Was mach ich falsch?

Du hast dir einen Arduino gekauft, um programmieren zu lernen.

von Robin F. (gehacktes)


Lesenswert?

Ja das kann vlt. sein...aber das bringt mich auch nicht weiter bei 
meinem Problem...ich programmiere auch normales C, krieg es trotzdem 
nich hin!

von Kan a. (Firma: Basta) (kanasta)


Lesenswert?

Wie zählst du denn hoch? Mit einem Timer?
Da sollte man den Timerwert jedes mal neu setzen,
wenn der Interrupt abgelaufen ist.
Durch setzen eines größeren Timer-Werts wird schneller
der Overflow Interrupt erreicht, der Timer ist dann schneller.

von Robin F. (gehacktes)


Lesenswert?

Ja.
Okey dann werde ich da nochmal ansetzen und es mit einem Interrupt 
versuchen.

Vielen dank erstmal

von Weingut P. (weinbauer)


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.

von Karl H. (kbuchegg)


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.

von Robin F. (gehacktes)


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

von Praktiker (Gast)


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

von Robin F. (gehacktes)


Lesenswert?

Ja der Taster ist enprellt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.