Messwert auf einem LCD ausgeben

Hallo liebes Forum,
ich versuche einen Messwert auf einem LCD auszugeben. Ich kann die Bezeichnung als String ausgeben,
leider funktioniert die Ausgabe des Messwertes vom Analogeingan1 vom Typ "int" nicht (sieht irgendwie komisch aus). Kann es sein dass man auf dem LCD nur "Char" ausgeben kann?

int U_soll;
...
void loop()
{
lcd.print("Vsoll = ");
lcd.setCursor(8, 0); // set the cursor to column 0, line 1
lcd.print(U_soll);
...
Vielen Dank für eure Hilfe

Vielleicht was in der Richtung?

lcd.print(U_soll/10000+'0');
lcd.print((U_soll/1000)%10+'0');
lcd.print((U_soll/100)%10+'0');
lcd.print((U_soll/10)%10+'0');
lcd.print(U_soll%10+'0');

Ggf. musst Du U_soll als "unsigned int" definieren.

Hallo Joghurt,
das bringt leider auch nichts. Eine Skalierung habe ich auch bereits mehr fach ausprobiert.
die ausgabe auf meine LCD sieht immer noch so aus:
Vsoll = XC xxxxx
X steht für Zeichen die ich nicht kenne und nicht deuten kann. Die letzten 5 "x" flimmern, das liegt vielleicht an der Schleife ohne delay.
HAt jemand einen Tipp für mich.

Was ist denn U_Soll ?
Ist das ein Kommawert?
Ich hatte auch so ein Problem bei meinen versuchen mit der Waage.
Habe selber noch nicht viel Ahnung!
Bin bei meiner Waage hingegangen und habe den Wert zerpflückt.
Worauf man auch vielleicht noch achten muss:
Wenn Du zu schnell Werte auf dem Display aktulaisierst die sich verändern kann man nix mehr lesen.
Bei der Waage trage ich den Wert erst ein wenn er fest steht und bei meiner Uhr
wird das Display im Sekundentakt aktualisiert.

Aber leider kann ich Dir nicht genau sagen woran das liegt, sorry!

Gruß Thorsten

Hallo MueThoS,
ich habe mir den Messwert jetzt auch auf die Serielleschnittstelle gpackt. Hier bekomme ich eine klare Anzeige in Ganzenzahlen.
wenn ich den Messwert einzeln auf dem Display ausgebe bekomme ich ein "s" oder ein "su".

Habe die Ausgabe in die VoidSetup geschoben, das funktioniert. Ist aber leider noch nicht befriedigend.

Hallo Floppy !

in http://www.earthshineelectronics.com/files/ASKManualRev5.pdf ( Projekt 12 )

wird beschrieben, wie man mittels der Modulo-Funktion Nachkommastellen bekommt.

Falls es das ist, was du meinst...

MfG

Das ist nicht das Problem, die Anzeige funktionirt jetzt, ich bin mir aber noch nicht sicher warum. Ich glaube das Problem ist die Trägheit des Displays. Die Ausgabe funktioniert nur mit einem Ausreichenden Delay und nicht in der Void Loop. Bis das diese Funktion funktioniert ist noch eine Menge Gehirnschmalz erforderlich. Ich würde gerne zur Laufzeit einen Parameter mittels Poti-Eingabe ändern, die Potispannung möchte ich auf dem LCD darstellen. Ich befürchte ich benötige einen weiteren Zustand den ich mit einem Schalter definiere. In diesem Zustand wird die Regelung ausgesetzt und nur die Poti-Eingabe aktiviert.
Das währe allerdings nicht befriedigend.
Hat jemand eine andere Idee?

Sag doch erstmal was du genau haben willst und zeige mal deinen kompletten Code.
Ich kann mir nicht vorstellen das etwas in der setup geht und in der loop nicht es sei denn wegen der schnellen Ansteuerung.
Vielleicht können die Profis Dir schneller helfen wenn sie sehen was Du da geschrieben hast.
Wie gesagt als ich mein Display zu schnell angesteuert habe konnte ich auch nichts mehr erkennen.

Das Display dient nur zur kontrolle der Eingabewerte. Die Hauptaufgabe ist es eine Positions- und Geschwindigkeitsregelung für einen Linearantrieb in Abhängigkeit eines Stromsignals das mit 80Hz-200Hz wechselt zu realisieren. Die Regelung funktioniert bereits recht gut, nur mit der Anzeige meines Potiwertes hapert es noch. Ein Potiknopf mit Skala ist etwas zu archaisch, für eine moderne Maschine.

Hast Du irgendwo in Deiner Schleife einen Befehl, der das LCD löscht? Ein lcd.clear() oder so?

Lass das mal weg, gehts dann?

Ohne Code ist das nur raterei

Hallo MueThoS,
"Hast Du irgendwo in Deiner Schleife einen Befehl, der das LCD löscht? Ein lcd.clear() oder so?"
Nein, habe ich nicht.

Ich muss versuchen die Ausgabe aus der Hauptschleife heraus zu bekommen, dann könnte es gehen. Ich habe aber noch keine richtig gute Idee. Daher kann ich auch keinen Code veröffentlichen. Vielleicht habt Ihr ein Beispiel?

Die Ausgabe funktioniert jetzt auch mit "float"-Daten, aber nur wenn ich ein "Delay" nach der lcd.print()-Funktion schreibe:

// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.setCursor(0, 0);
lcd.print("Vsoll = ");
lcd.setCursor(0, 1); // set the cursor to column 0, line 1
lcd.print((U_soll));
delay (5000);

warum diese erst nicht funktionierte, kann ich leider nicht sagen. (Ist jetzt auch nicht mehr so wichtig)

Ein Fehler war, dass das "Delay" zu klein war.
Ich habe auch gelernt, wenn man die Daten-"Pins" in umgekehrter Reihenfolge anschließt, Zeigt das LCD schwarze Balken.

Pack mal den begin(16,2) in die setup() und den Rest in die loop().

Und den kompletten Code zu sehen wäre wirklich hilfreich. :wink:

Es scheint im trocken Lauf (ohne Maschine) zu funktionieren.

Ich habe jetzt folgendes Konstrukt gebaut:

voit loop ()
{
Poti2V=analogRead(poti2Pin);

if (Poti2V != Poti2Valt)
{
U_soll=Poti2V;

// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.setCursor(0, 0);
lcd.print("Vsoll = ");
lcd.setCursor(8, 0); // set the cursor to column 0, line 1
lcd.print((U_soll*6/1024));
delay (500);
}
Poti2Valt=analogRead(poti2Pin);
}

Ich hoffe nur dass die Maschinenregelung jetzt auch noch funktioniert.
Viele Grüße

Probier mal:

void setup() {
  lcd.begin(16, 2); // set up the LCD's number of columns and rows:
}

voit loop ()
{
  Poti2V=analogRead(poti2Pin); 
  if (Poti2V != Poti2Valt)
  {
    U_soll=Poti2V;
    lcd.setCursor(0, 0);
    lcd.print("Vsoll = ");
    lcd.setCursor(8, 0);
    lcd.print((U_soll*6/1024)); 
    Poti2Valt=Poti2V;
  }
}

Jo, das lcd.begin gehört nicht in den loop sondern in den setup.

Yso wie es Joghurt schreibt sollte es gehen.

Hallo Joghurt,
ich habs getestet, leider funktioniert es nicht mit dem lcd.begin(16, 2) im Setup.
Die Anzeige ist dann nicht lesbar. Die Zeichen laufen durch, weder "Usoll =" noch der Potiwert ist lesbar.
Auch nicht funktionieren tut, die Kalibrierung außerhalb des Printbefehls. Dann werden die Nachkomma stellen zu Null gesetzt.

Hallo noch einmal,
das Setup ins Setup zuschreinen war mein erster Ansatz.
Eigendlich würde ich auch das:
lcd.setCursor(0, 0);
lcd.print("Vsoll = ");
gerne in das Setup schreiben, das soll ja immer angezeigt werden, aber dann flackert es genau so grässlich wie wenn man nur das lcd.beginn in das Stupschreibt. Sieht so aus als würde alles durch die Usoll-werte überschrieben.

DrFlopp:
Die Zeichen laufen durch

Definiere das, was genau meinst Du damit?

DrFlopp:
Dann werden die Nachkomma stellen zu Null gesetzt.

Schätze mal dann arbeitest Du mit ints statt mit doubles...