falscher Wert im LCD Disply, seriell aber i.o?

Hallo

ich möchte mit dem Arduino eine Temperatur an Pin 3 auswerten und Anzeigen lassen. Anzeige soll seriell auf dem Monitor erfolgen und auf dem LCD Display. Funktioniert soweit. Seriell wird der Temperaturwert angezeigt. Auf dem LCD erscheinen komische Zeichen und ab 65 °C wird auf dem Display ein A angezeigt für 66 ein B und so weiter.

Der gleiche wert wird auf dem LCD also in ASCII ausgegeben auf dem Monitor aber korrekt.

Wie bekomm ich das geändert?

dies ist Programmiert:

#include <LCD4Bit_mod.h>
#include <LiquidCrystal.h>


LCD4Bit_mod lcd = LCD4Bit_mod(2); //Displayzeilen

void setup ()
{  
   Serial.begin(9600); //initialisieren serielle Schnittstelle auf 9600 Baud
   Serial.println("Start");
   
  
  lcd.clear();
  lcd.printIn("Start");
}



void loop()
{
   int sensorLesen = analogRead(3);   //lesen den Sensorwert in Pin A3 ein
   int temperatur = (5.0 * sensorLesen * 100 / 1024-35); //Umrechnung in Grad Celsius bei Betriebsspannung von 5 Volt, -35 Korrektur des Meßwertes
  
  
   Serial.print("Temperatur: "); //Ausgabe auf serieller Konsole 
   Serial.print(temperatur);
   Serial.println(" C");
   
  
   lcd.clear();// Ausgabe auf Display
   lcd.printIn("Temperatur ist:"); 
   lcd.cursorTo(2, 0);  //line=2, x=0
   lcd.print(temperatur);
  
   delay(1000); //1 Sekunde Pause,
   
}

Hallo,

die Variable temperatur wird als int deklariert also als Ganzzahl.
Ich denke vom LCD Display wird dann dieser Wert als Wert aus einer ASCII-Tabelle interpretiert. Diese Tabelle enthält auch zunächste "komische Zeichen" und ab 65 kommen Großbuchstaben. Ich kenne die Bibliotheken

#include <LCD4Bit_mod.h>
#include <LiquidCrystal.h>

nicht, kann mir aber vorstellen, dass es vielleicht schon hilft wenn Du die Variable temperatur als float deklarierst.

Gruß
Josef Sommer

Danke für die schnelle Antwort

die bibliotheken hab ich beim Display dazu runtergeladen

das display funktioniert ja auch soweit

mit float wird jetzt im seriell mit 2 stellen hinter komma angezeigt z.bsp 12.31
im Display ist jetzt nur noch der text zu sehen die variable gar nicht mehr

Du schreibst auf das Display keine Zahl sondern ein Zeichen und die Zahl ist der Zeichencode des Displays der teilweise mit dem ASHII- Code identisch ist.
Das könnte Dir weiterhelfen: http://www.daniweb.com/software-development/c/threads/35242
Grüße Uwe

Vielleicht gibt es für das Display die gleiche Möglichkeit wie bei Serial.print():

Serial.print(temperatur,DEC);

mfg Reinhard

Schau in die Doku (LiquidCrystal - Arduino Reference) genau so ist es:
lcd.print(temperatur, DEC);

Hallo uwefed,

die Seite ist bestimmt später für mich mals sehr hilfreich leider bin ich im englischen nicht ganz so fit,
auf jedenfall ist schon mal klar das die variable falsch vom Display ausgewertet wird...

Hallo Hammerhai
Hallo Spaceball,

dank auch an euch leider hats so nicht funktioniert
ich erhalte beim compilieren eine fehlermeldung:

no matching funktion for call to'LCD4Bit_mod::print(int&.int)'

ich nehme an das der fehler in der libary von lcd4bit.... liegt, kennt ihr ne andere bessere die verwendbar wäre

Hallo,

ich habe leider nicht das Display welches Du verwendest, deshalb arbeite ich nach dem Prinzip "trail and error" ohne selbst testen zu können. Aber versuch mal folgenden Code:

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Verwendete Pins des Displays angeben

// Bedeutet wie folgt
// * LCD RS pin to digital pin 12
// * LCD Enable pin to digital pin 11
// * LCD D4 pin to digital pin 5
// * LCD D5 pin to digital pin 4
// * LCD D6 pin to digital pin 3
// * LCD D7 pin to digital pin 2

void setup ()
{
Serial.begin(9600); //initialisieren serielle Schnittstelle auf 9600 Baud
Serial.println("Start");

lcd.begin(16, 2);

}

void loop()
{
int sensorLesen = analogRead(3); //lesen den Sensorwert in Pin A3 ein
float temperatur = (5.0 * sensorLesen * 100 / 1024-35); //Umrechnung in Grad Celsius bei Betriebsspannung von 5 Volt, -35 Korrektur des Meßwertes

Serial.print("Temperatur: "); //Ausgabe auf serieller Konsole
Serial.print(temperatur);
Serial.println(" C");

lcd.clear();// Ausgabe auf Display
lcd.setCursor(0, 0);
lcd.print("Temperatur ist:");
lcd.setCursor(0, 1); //line=2, x=0
lcd.print(temperatur,5);

delay(1000); //1 Sekunde Pause,

}

Wie gesagt, ohne Gewähr... :slight_smile:
Viel Erfolg!
Gruß
Josef Sommer

joh371:
ich nehme an das der fehler in der libary von lcd4bit.... liegt, kennt ihr ne andere bessere die verwendbar wäre

Deine Bibliothek hat scheinbar die Funktion fürs Printen von Zahlen nicht drin. Nimm die Standardbibliothek aktueller Arduino-Versionen, die versteht seit einiger Zeit auch 4bit-Verbindungen.
Hab leider kein LCD um das selbst zu testen - Conrad ist einfach zu Teuer was 20x4 angeht, und wenn ich mir schon ein LCD hole, dann möchte ich auch eins wo man ein User-Interface drauf aufbauen kann.

Ein Hallo an alle Helfer

die Libary LCD4Bit_mod.h kann wahrscheinlich nur ASCII Zeichen. Es half nix.

Nach langem Versuchen am Wochenende habe ich mit Hilfe des Codes von josefsommer endlich die Lösung gefunden

Mein Display belgt halt nur andere PINs

mein Code sieht folgendermasen aus:

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);  // Verwendete Pins des Displays angeben

// Bedeutet wie folgt
// * LCD RS pin to digital pin 8
// * LCD Enable pin to digital pin 9
// * LCD D4 pin to digital pin 4
// * LCD D5 pin to digital pin 5
// * LCD D6 pin to digital pin 6
// * LCD D7 pin to digital pin 7


void setup ()
{  
   Serial.begin(9600); //initialisieren serielle Schnittstelle auf 9600 Baud
   Serial.println("Start");
   
   lcd.begin(16, 2);

}



void loop()
{
   int sensorLesen = analogRead(3);   //lesen den Sensorwert in Pin A3 ein
   float temperatur = (5.0 * sensorLesen * 100 / 1024-35); //Umrechnung in Grad Celsius bei Betriebsspannung von 5 Volt, -35 Korrektur des Meßwertes
  
  
   Serial.print("Temperatur: "); //Ausgabe auf serieller Konsole 
   Serial.print(temperatur);
   Serial.println(" C");
   
  
   lcd.clear();// Ausgabe auf Display
   lcd.setCursor(0, 0);
   lcd.print("Temperatur ist:"); 
   lcd.setCursor(0, 1);  //line=2, x=0
   lcd.print(temperatur,5);
  
   delay(1000); //1 Sekunde Pause,
   
}

nu gehts endlich danke euch allen