Variable spinnt rum

Hallo :smiley:
Ich sitze im moment an einem Programm zur Steuerung der Fahrgassen an einer Sähmaschine.
Soweit funktioniert es auch allerdings spinnt die variable i auf dem Display rum sobald sie über Spur 9 geht.
Könnt ihr mir wohl helfen ?
Anbei mein Code.

Gruß

Fahrgassenschaltung.ino (5.08 KB)

Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Das kannst Du auch noch nachträglich ändern.

Wenn Du uns auch noch mitteilst, was Du erwartest und was demgegenüber passiert, ist es einfacher zu helfen.

Gruß Tommy

Und rücke deinen Sketch bitte vorher richtig ein, ist so nicht lesbar. Drücke dazu in der IDE einfach STRG+T

Hi

Ohne den Sketch gesehen zu haben, gehe ich davon aus, daß Du Müll angezeigt bekommst, wenn von einer 2-stelligen Zahl zurück auf eine 1-stellige Zahl gewechselt wird.

Warum?

Weil Du NUR diese eine Stelle ausgibst.
8
9
10
11
12
11
10
90
80
70

Die stehende Null, Die von der 10 über bleibt, wird von der 9 nicht gelöscht, sondern die 9 wird nur davor geschrieben.

Wenn Du die Zahlen immer 2-stellig ausgibst (ob führende Null oder Leerzeichen ist egal), wird das erste Zeichen überschrieben und Alles ist gut.

Zumindest, was ich mir aus den mir zugänglichen Informationen zusammen reime.
Bis 9000 Zeichen darf Dein Post lang werden - Da ist doch bestimmt Platz für einen Code-Tag und 5000 Zeichen Programm, oder?

MfG

Hallo erstmal danke für die Tipp

Bin nicht so oft in Foren unterwegs und deswegen kenn ich mich nicht so gut aus.
Hier ist jedenfalls mein richtiger Code.
Also das Problem ist das durch einen Taster eine Variable Hochgezählt wird und auf einem LCD ausgegeben wird.Allerdings zählt er bis zu 11 hoch und dann beginnt er bei 21 31 41 weiterzuzählen.
Eigentlich möchte ich das er bis 12 hochzählt und dann zurückgesetzt wird.
Schönen Abend noch
LG

#include "Arduino.h"
#include "avdweb_Switch.h"
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
const byte pushButtonpin = A1;
const byte pushButtonpin1 = A0;
const byte pushButtonpin2 = A2;
int i = 1;
int o = 12;
Switch pushButton = Switch(pushButtonpin);
Switch pushButton1 = Switch(pushButtonpin1);
Switch pushButton2 = Switch(pushButtonpin2);
void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(11, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);
  digitalWrite(6, LOW);
  digitalWrite(5, LOW);
  lcd.init();
  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Fahrgassen");
  lcd.setCursor(0, 1);
  lcd.print("Computer");
  lcd.setCursor(11, 0);
  lcd.print("V.1.0");
  delay(1825);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Spur:");
  lcd.setCursor(0, 1);
  lcd.print("Abstand:");
  lcd.setCursor(10, 1);
  lcd.print("m");
}
void loop() {
  // put your main code here, to run repeatedly:
  pushButton.poll();
  if (pushButton.pushed()) {
    Serial.print("pushButton pushed ");
    Serial.print(++i);
    Serial.println(" times");
    delay(80);
  }
  lcd.setCursor(5, 0);
  lcd.print(i);
  pushButton1.poll();
  if (pushButton1.pushed()) {
    Serial.print("pushButton pushed ");
    Serial.print(++++++o);
    Serial.println(" times");
    delay(80);
  }
  if (o > 36) {
    o = 12;
  }
  lcd.setCursor(8, 1);
  lcd.print(o);
  pushButton2.poll();
  if (pushButton2.pushed()) {
    Serial.print("pushButton pushed ");
    Serial.print(--i);
    Serial.println(" times");
    delay(80);
  }
  if (i < 1) {
    i = 1;
  }
{ if (o == 12) {
      if (i > 4) {
        i = 1;
      }
      if (i == 2) {
        lcd.setCursor(15, 1);
        lcd.print("F");
        digitalWrite(LED_BUILTIN, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        digitalWrite(6, HIGH);
        digitalWrite(5, LOW);
      }
      if (i != 2) {
        lcd.setCursor(15, 1);
        lcd.print(" ");
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(5, HIGH);
      }
    }
  }

{ if (o == 15) {
      if (i > 5) {
        i = 1;
      }
      if (i == 3) {
        lcd.setCursor(15, 1);
        lcd.print("F");
        digitalWrite(LED_BUILTIN, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        digitalWrite(6, HIGH);
        digitalWrite(5, LOW);
      }
      if (i != 3) {
        lcd.setCursor(15, 1);
        lcd.print(" ");
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(5, HIGH);
      }
    }
  }

{ if (o == 18) {
      if (i > 6) {
        i = 1;
      }
      if (i == 3) {
        lcd.setCursor(15, 1);
        lcd.print("F");
        digitalWrite(LED_BUILTIN, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        digitalWrite(6, HIGH);
        digitalWrite(5, LOW);
      }
      if (i != 3) {
        lcd.setCursor(15, 1);
        lcd.print(" ");
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(5, HIGH);
      }
    }
  }
{ if (o == 21) {
      if (i > 7) {
        i = 1;
      }
      if (i == 4) {
        lcd.setCursor(15, 1);
        lcd.print("F");
        digitalWrite(LED_BUILTIN, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        digitalWrite(6, HIGH);
        digitalWrite(5, LOW);
      }
      if (i != 4) {
        lcd.setCursor(15, 1);
        lcd.print(" ");
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(5, HIGH);
      }
    }
  }
{ if (o == 24) {
      if (i > 8) {
        i = 1;
      }
      if (i == 4) {
        lcd.setCursor(15, 1);
        lcd.print("F");
        digitalWrite(LED_BUILTIN, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        digitalWrite(6, HIGH);
        digitalWrite(5, LOW);
      }
      if (i != 4) {
        lcd.setCursor(15, 1);
        lcd.print(" ");
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(5, HIGH);
      }
    }
  }
{ if (o == 27) {
      if (i > 9) {
        i = 1;
      }
      if (i == 4) {
        lcd.setCursor(15, 1);
        lcd.print("F");
        digitalWrite(LED_BUILTIN, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        digitalWrite(6, HIGH);
        digitalWrite(5, LOW);
      }
      if (i != 4) {
        lcd.setCursor(15, 1);
        lcd.print(" ");
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(5, HIGH);
      }
    }
  }
{ if (o == 30) {
      if (i > 10) {
        i = 01;
      }
      if (i == 5) {
        lcd.setCursor(15, 1);
        lcd.print("F");
        digitalWrite(LED_BUILTIN, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        digitalWrite(6, HIGH);
        digitalWrite(5, LOW);
      }
      if (i != 5) {
        lcd.setCursor(15, 1);
        lcd.print(" ");
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(5, HIGH);
      }
    }
  }
{ if (o == 33) {
      if (i > 11) {
        i = 1;
      }
      if (i == 5) {
        lcd.setCursor(15, 1);
        lcd.print("F");
        digitalWrite(LED_BUILTIN, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        digitalWrite(6, HIGH);
        digitalWrite(5, LOW);
      }
      if (i != 5) {
        lcd.setCursor(15, 1);
        lcd.print(" ");
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(5, HIGH);
      }
    }
  }
{ if (o == 36) {
      if (i > 12) {
        i = 01;
      }
      if (i == 6) {
        lcd.setCursor(15, 1);
        lcd.print("F");
        digitalWrite(LED_BUILTIN, HIGH);
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        digitalWrite(6, HIGH);
        digitalWrite(5, LOW);
      }
      if (i != 6) {
        lcd.setCursor(15, 1);
        lcd.print(" ");
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(5, HIGH);
      }
    }
  }
}

Hallo ich nochmal
Ich habe es jetzt hinbekommen.
Ich lasse jetzt die stelle nachdem sie zurückgesetzt ist durch ein leerzeichen ersetzten.
Danke an alle :smiley: ;D

Oder schau Dir mal an, wie man Zahlen rechtsbündig mit führender 0 / Leerzeichen formatiert, z.B. mit sprintf oder printf.

Gruß Tommy

ok schaue ich mir mal an
Trotzdem danke

Tommy56:
Oder schau Dir mal an, wie man Zahlen rechtsbündig mit führender 0 / Leerzeichen formatiert, z.B. mit sprintf oder printf.

Oder einfach per Hand:

if (zahl < 10)
  lcd.print(' ');

Ja so hatte ich es jetzt gemacht

Hi

Tip(p) für's nächste Mal:
Wer ist i, was macht o, was machen die ganzen 'magic numbers' in Deinem Sketch?

So ganz habe ich nicht gefunden, wo der Anzeigefehler wohl her kam - ist jetzt aber wohl auch nicht mehr so wichtig.

MfG

Ok ich werde das nächste mal versuchen es etwas lesbarer zu schreiben.
i und o sind einfach Variablen für Spurzahl und Abstand. Die Zahlen sind die Breiten der Sähmaschine wo sie eine Fahrgasse machen soll.
Ich bin jetzt erstmal nur froh das es jetzt funktioniert.
Danke