Pages: [1]   Go Down
Author Topic: Zeit eines Tastendrucks messen  (Read 1048 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21269
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

"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
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21269
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2983
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink

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

Pages: [1]   Go Up
Jump to: