"elegante" Werteingabe für relativ große Zahlen

Hallo,

ich versuche gerade eine Werteingabe zu schreiben, die mir, so wie ich sie gerne hätte, nicht gelingen möchte.
Wenn ich den Taster einmal kurz betätige, soll der Wert um eins erhöht bzw. verkleinert werden. Wenn ich den Taster länger gedrückt halte, soll der Wert bspw. um 10 steigen bzw. fallen.
Hier mein MB:

  if(Up()){
      ulStartTime = millis();
      endtime = ulStartTime + 1000;
      if(endtime < millis()){
        Sollwert+10;
      }
      else if(((millis() - pressTime) > waitTime)){
        Sollwert++;
        pressTime = millis();
      }
   }

Wobei Up = true ist, wenn der Taster betätigt wird. Bzgl. debounce eine waitTime von 200 ms.
Habt ihr da vielleicht einen Tipp, warum er nicht um die 10 beim längeren Betätigen erhöht oder ein andere Idee?

;D Du setzt ulStartTime ja jedesmal wieder zurück. Das darf nur gesetzt werden, wenn up() zum ersten mal aktiv war.

Die Lösung ist da immer etwas trickreich:

IF ( up() ) {
   IF (! keyPressed) {
      endtime = millis() + 1000;
      keyPressed = TRUE;
    }
  }
 ELSE
  keyPressed = false;

ulStartTime brauchst Du Dir nicht zu merken...

Oder doch... wegen der "pressTime"....

Man kann das auch noch etwas "sparsamer" programmieren

IF up() {
   IF (endTime==0)
      endTime = millis() + 1000;
 } 
 ELSE
    endTime = 0;

Hallo syntec

bedenke auch daß ein Taster normalerweise prellt (bei Betätigung mehrmals kurz auf und zugeht). Das könnte auch als wiederholtes Drücken des Tasters interpretiert werden.

Grüße Uwe

Da er erst nach "waitTime" reagieren will, ist das schon vorgesehen. 10ms? Es soll allerdings auch Taster geben, die prellen 100ms ...