Nach erreichen eines bestimmten Wertes, Wert zurücksetzen

Hallo :slight_smile:
Ich hoffe ich bin hier richtig :o wenn nicht entschuldige ich mich schon einmal.

Ich hab mir letzte Woche meinen erstes Arduino Starterkit zugelegt.

Jetzt bin ich bei meinem ersten Programm, und komme bei einer Kleinigkeit nicht weiter…
und zwar hier…

void Distance_Click() {
     if (distance < 2000)
     {
     distance = distance + 500;
     }
     else
     {
     distance = 500;

Ich verwende die OneButton library und will das wenn ich den Klick ausführe der
int distance = 500;
in 500er Schritten bis inkl 2000 zählt und sich dann wieder auf 500 zurücksetzt.

Das selbe hab ich schon mit speed probiert wo es wunderbar klappt.

Den Wert von distance geb ich auf einen Display aus und es passiert folgendes:

500
1000
1500
2000
5000
1000
1500
usw.

Ich hoffe um schnelle Hilfe :frowning:

Ganzes Programm:

#include <LiquidCrystal.h>
#include <OneButton.h>
#include <Stepper.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int SPMU = 32;
Stepper myStepper(SPMU, 6,7,8,9);

int sped = 300;
int distance = 500;
int distancemax = 2000;
int distancestep = distancemax/4;
int gohome = 0;

  OneButton button1 = OneButton(10,false);
  OneButton button2 = OneButton(13,false);
  
//-------------------------------------------------------------------------------------------------------------
void setup() {

  lcd.begin(16, 2);

  pinMode(10,INPUT);
  pinMode(13,INPUT);

  button1.attachClick(Speed_Click);
  button1.attachDoubleClick(Distance_Click);
  
  button2.attachClick(forward_Click);
  button2.attachDoubleClick(Back_Click);
  button2.attachDuringLongPress(GoHome_Click);
  
}
//-------------------------------------------------------------------------------------------------------------
void loop() {

  myStepper.setSpeed(sped);

//Speed Button
  button1.tick();
  delay(10);

//Start Button
  button2.tick();
  delay(10);

  
  lcd.setCursor(0, 0);
  lcd.print("Speed");
  lcd.setCursor(7, 0);
  if (sped == 300)
      {lcd.print("LVL 1");}
  if (sped == 500)
      {lcd.print("LVL 2");}
  if (sped == 700)
      {lcd.print("LVL 3");}
  if (sped == 900)
      {lcd.print("LVL 4");}
  

  lcd.setCursor(0, 1);
  lcd.print("Way");
  lcd.setCursor(7, 1);
  if (distance == distancemax/4)
      {lcd.print("1/4");}
  if (distance == distancemax/2)
      {lcd.print("2/4");}
  if (distance == distancemax/4*3)
      {lcd.print("3/4");}
  if (distance == distancemax/1)
      {lcd.print("4/4");}

  lcd.setCursor(11, 1);
  lcd.print(distance);
   
}
//-------------------------------------------------------------------------------------------------------
 void Speed_Click() {
      if (sped < 900)
      {
      sped = sped + 200;
      }
      else
      {
      sped = 300;  
      }
    }

 void Distance_Click() {
     if (distance < 2000)
      {
      distance = distance + 500;
      }
      else
      {
      distance = 500;  
      }
    }
   
 void forward_Click(){
     if (gohome + distance - 1 < distancemax)
      { 
       myStepper.step(distance);
       gohome = gohome + distance;
      }
    }
    
 void Back_Click(){
     if (gohome - distance > gohome - gohome)
      {
     myStepper.step(-distance);
     gohome = gohome - distance;
      }
    }

 void GoHome_Click(){
     myStepper.step(-gohome);
     gohome = 0;
    }

HelloWorld.ino (2.11 KB)

Ich denke mal dass die letzte Null von 2000 nicht gelöscht wird, und in Wirklichkeit auf dem Display "500"“0” steht?
Lass Dir doch den Wert von distance einfach auf dem seriellen Monitor ausgeben

Was genau willst du mit der OneButton-Lib erreichen?

Ich kenne die nicht, daher vermute ich, du musst die Taste noch entprellen, damit nur ein Impuls ankommt. Anders sieht die Elektronik viel Impulse und schaltet dementsprechend schnell.

Poste doch mal dein gesamtes Programm/Sketch.
Oft liegt der Fehler genau da, wo man es nicht vermutet.
Und vor allem: poste Code der compiliert (was dein Codeschnipsel nicht tut).

Und verwende Code-Tags
Code_Tags.jpg

Moko:
Ich denke mal dass die letzte Null von 2000 nicht gelöscht wird, und in Wirklichkeit auf dem Display "500"“0” steht?

Das klingt recht plausibel!

OK! Das ging schnell! vielen vielen dank :) :)

Das ist das Problem Moko, die 0 bleibt stehen! Ich glaub da wär ich lange nicht drauf gekommen ;D

gibt es vll einen befehl der das verhindert?

HotSystems: Die OneButton library entprellt die Butten und erleichtert das "Programmieren" von Tastern, soweit mein Wissen geht.

uxomm: Hab meinen Beitrag jetzt verbessert :D wusste noch nicht wie das geht^^

Dank Euch nochmal für die schnelle Hilfe!!

Scoolt:
gibt es vll einen befehl der das verhindert?

Eine simple Lösung wäre es, wenn du einfach je nach Zahlengröße Leerzeichen davor (oder danach) einsetzt. Zum Beispiel so:

...
if (distance < 1000)
{   lcd.print(" ");
}
if (distance < 100)
{   lcd.print(" ");
}
if (distance < 10)
{   lcd.print(" ");
}
lcd.print(distance);
...

Scoolt:
uxomm:
Hab meinen Beitrag jetzt verbessert :smiley: wusste noch nicht wie das geht^^

Suuper! :slight_smile: