Go Down

Topic: Zeit eines Tastendrucks messen (Read 1 time) previous topic - next topic

Gehacktes

Schönen guten Abend,

ich habe gerade eine Denkblockade und vlt. könnt ihr mir dabei helfen.
Unzwar will ich bei einem Tastendruck normal einen Wert hoch zählen lassen. Wenn ich dann aber die Taste ca. 5s gedrückt halte, dann sollen die Werte alle 500ms ausgegeben werden. Das ist meine derzeitige Tasten abfrage :

Code: [Select]
if ( digitalRead ( 2 ) == LOW ) {
 
  Wert += 1.0f;
  Serial.println ( Wert );
  delay ( 50 );
 
  while ( digitalRead ( 2 ) == LOW ) {}
  }


Ich dachte bisher mithilfe einer if() Bedingung die Zeit zu messen wie lange ich die Taste gedrückt halte, habe aber keine Ahnung wie ich das am besten anstellen kann.
Ich hoffe ihr könnt mir irgendwie Tipps geben.

Danke schonmal!

Liebe Grüße

uwefed

1) Wieso nimmst du eine Float-Variable für den Wert?
2) pulseIn(). Dies Blockiert aber den Sketch
3) Millis()
4) interrupt

Grüße Uwe

Gehacktes

"float" deshalb, weil ich später mit Fließkommazahlen arbeiten will und bisher nur zum testen in einer Schritten zähle.

Gut dann versuch ich das mal per interrupt und gucke was es mit dem "pulseIn()" aufsich hat.

Vielen Dank erstmal.
Ich meld mich dann wieder!

Grüße

uwefed

float ist wegen seines Aufbaus von Mantisse und Exponet relativ ungenau (nur 6 bis 7 Stellen) unsignd long ist genauer.
Grüße Uwe

michael_x

Deine Denkblockade lag daran, dass dein Sketch nach einer Ausgabe in der nixtu while Schleife hing:
Quote
unsigned long Wert=0;
while ( digitalRead ( 2 ) == LOW ) {
   Serial.println ( ++Wert );
   delay ( 500 );

sollte das tun was du beschrieben hast ( soweit ich es verstanden habe ):
Solange die Taste gedrückt ist, alle 500ms eine Zahl hochzählen und ausgeben, in 5 sec also von 1 bis 10 .

Bitte sehr ;)

"Zeit eines Tastendrucks messen" heisst aber pulseIn(), und mit millis() oder interrupt zu arbeiten ist noch besser, da möchte ich Uwe absolut zustimmen.

Go Up