Zeit eines tastendrucks messen

OP #2714780
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.
(Firma: Basta)
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.
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.
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
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.