Go Down

Topic: falscher Wert im LCD Disply, seriell aber i.o? (Read 1 time) previous topic - next topic

joh371

Oct 18, 2011, 10:07 pm Last Edit: Oct 19, 2011, 12:44 am by UweFederer Reason: 1
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:

Code: [Select]
#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,
 
}



#1
Oct 18, 2011, 10:42 pm Last Edit: Oct 19, 2011, 12:45 am by UweFederer Reason: 1
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

Code: [Select]
#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


joh371

#2
Oct 18, 2011, 10:48 pm Last Edit: Oct 18, 2011, 10:55 pm by joh371 Reason: 1
Danke für die schnelle Antwort

die bibliotheken hab ich beim Display dazu runtergeladen

http://www.dfrobot.com/index.php?route=product/product&product_id=51

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

uwefed

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

spaceball

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

Serial.print(temperatur,DEC);

mfg Reinhard

hammerhai

Schau in die Doku (http://arduino.cc/en/Reference/LiquidCrystalPrint) genau so ist es:
lcd.print(temperatur, DEC);

joh371

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...

joh371

Hallo Hammerhai
Hallo Spaceball,

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

[font=Verdana]no matching funktion for call to'LCD4Bit_mod::print(int&.int)'[/font]

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... :)
Viel Erfolg!
Gruß
Josef Sommer

Fat D

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.

joh371

#10
Oct 24, 2011, 09:19 pm Last Edit: Oct 24, 2011, 09:46 pm by uwefed Reason: 1
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:
Code: [Select]
#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

Go Up