Pages: [1]   Go Down
Author Topic: falscher Wert im LCD Disply, seriell aber i.o?  (Read 1426 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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,
  
}

« Last Edit: October 18, 2011, 05:44:51 pm by UweFederer » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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

« Last Edit: October 18, 2011, 05:45:49 pm by UweFederer » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: October 18, 2011, 03:55:50 pm by joh371 » Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21269
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
 
Logged

Meran/BZ/IT
Offline Offline
Full Member
***
Karma: 0
Posts: 184
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Serial.print(temperatur,DEC);

mfg Reinhard
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 42
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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



Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 78
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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
« Last Edit: October 24, 2011, 02:46:44 pm by uwefed » Logged

Pages: [1]   Go Up
Jump to: