Problem mit Lcd und DHT Code

Hallo zusammen

Ich bin neu hier und blutiger Anfängerund dehr wenig englischkenntnis, lese abert schon eine kleine Ewigkeit im Forum mit, da mich diese Materie sehr interesiert.

Habe mir einen Arduino Uno r3, und auch eine Leonardo (beides Originale) zugelegt mit einigen Displays dazu

ein16 x 2 ein 20 x 4 und ein SainSmart 16 x 2, 20 x 4 I2C, einen DHT 11 und DHT22.

http://www.amazon.de/HD44780-Module-Display-Anzeigen-Zeichen/dp/B009GEPZRE/ref=sr_1_1?ie=UTF8&qid=1420382895&sr=8-1&keywords=lcd+display+arduino

http://www.amazon.de/niceeshop-Arduino-Basierend-Beliebten-Controller/dp/B00MODAKM4/ref=sr_1_3?ie=UTF8&qid=1420382895&sr=8-3&keywords=lcd+display+arduino

Soweit so gut.

Mein Problem ist das ich das ganze nicht zum laufen bringe.

Am normalen 16x2 ist "Hallo Welt" kein problem aber die DHT wöllen nicht mehr, immer diese Fehlermeldung (siehe unten).

Man liest immer Display gekauft, Sketch drauf, alles super.

Ich habe schon sehr viel darüber gelesen, aber ich komme praktisch nicht weiter.

Ich habe mich jetzt schon Tagelang durch das Netz gelesen, etliche Sketch ausprobiert, selber an

den Sketch herumgeübt aber immer wieder der selbe eintrag nach dem überprüfen

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
sketch_jan04b:4: error: 'LiquidCrystal' does not name a type
sketch_jan04b.ino: In function 'void setup()':
sketch_jan04b:7: error: 'lcd' was not declared in this scope

Es ist immer wieder diese zeile die erscheint (error: 'LiquidCrystal' does not name a type )

egal welches Display oder auch sensor angeschlossen ist.

#include < Wire.h >
#include < LiquidCrystal.h >

LiquidCrystal lcd (0x3F, 16, 2); // Initialize a single i2c LCD

void setup() {
lcd.begin(16, 2); //Set up our 16x2 LCD
lcd.print("Line 1 text");
lcd.setCursor(0,1); // Set our cursor to character 0, line 1
lcd.print("Line 2 text");
}

void loop() {
}

Ich hoffe das ich ein paar praktische tipps bekommen kann.

Danke schon mal an Euch Profis

Martin

Hallo Martin,

erstmal herzlich willkommen in unserer Community.

"LiquidCrystal" ist eine Library, die zusätzlich installiert werden muss. Hast du das berücksichtigt?

Das gleiche gilt, wenn du eine Library für DHT11/22 benutzen willst.
Schau dir das hier mal an, das sollte dir weiterhelfen.

Hier wird erklärt, wie eine Library installiert wird. Müsste auch mit wenig Englischkenntnis zu verstehen sein.

Die Library in deinem Programm ist auch nicht für i2c Displays geeignet. Lade dir die richtig Library hier

Gruß
Reinhard

sima6201:
#include < LiquidCrystal.h >

LiquidCrystal lcd (0x3F, 16, 2); // Initialize a single i2c LCD

Bei den inkludierten Dateien sollte der Dateiname direkt zwischen den eckigen Klammern stehen, ohne Leerzeichen dazwischen. Also:
#include <LiquidCrystal.h>
Übrigens bei allen inkludierten Dateien.

Und zweitens ist die LiquidCrystal Library nur für Textdisplays geeignet, die "direkt" im 4-Bit Mode angeschlossen und betrieben werden sollen.

Für I2C-Displays, die hinten eine kleine I2C-Huckepackplatine drauf haben und per I2C angesteuert werden, ist das generell die falsche Library. Für I2C-Textdisplays heißt die benötigten Library irgendwas in die Richtung "LiquidCrystal_I2C" oder so ähnlich.

siehe mein letztes edit, Jurs war schneller

Hallo Jurs

Ich will mit diesen Display ja nur Text oder Sensorergebnisse auslesen.
Mein ziel ist es einen Datenlogger wie diesen hier herzustellen
http://forum.arduino.cc/index.php?topic=224198.0

Habe da nur einmal ein ein Library beispiel genommen, das war ein falsches, ich habe bereits eine menge Libs durchprobiert aber immer das gleiche ergebnis.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);  // set the LCD address to 0x3F for a 16 chars and 2 line display
void setup()
{
 lcd.init();                      // initialize the lcd 
 // Print a message to the LCD.
 lcd.backlight();
 lcd.print("Hello, world!");
}
void loop()
{
}

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
_16_2_lcd:3: error: 'LiquidCrystal_I2C' does not name a type
_16_2_lcd.ino: In function 'void setup()':
_16_2_lcd:6: error: 'lcd' was not declared in this scope

Egal welchen code ich probiere es ist immer diese zeile die plokiert

error: 'LiquidCrystal_I2C' does not name a type

Habe es mit I2C und mit normalen LCD probiert, ausser Hallo Welt am normalen LCD funktioniert gar nichts.
Martin

Wie installierst du die Library?

Dieser Fehler deutet meistens auf eine falsch installierte Library hin. Du musst die zip Datei in das library Verzeichnis deiner Arduino Installation entpacken. Manchmal muss noch den Ordern umbenennen, wenn die z.B. sowas wie "lcdi2c_master" heißen.

Hallo Serenifly

Ich Downloade die librarys, Entpacke sie mit zip7 und speichere sie in einen Ordner.

"lcdi2c_master" Diese bezeichnung ist mir noch nicht untergekommen.

Von diesen kopiere ich sie in die Arduino IDE.

Habe verschiedene Versionen von den IDE von 1.0.1 - 1.0.6

Aber egal wo ich die Library aufspiele es ist immer ds gleiche "does not name a type",

auch wenn ich die DHT11 oder DHT22 Sensoren anschließe.

Martin

sima6201:
"lcdi2c_master" Diese bezeichnung ist mir noch nicht untergekommen.

Falscher Verzeichnisname.

Das Library-Verzeichnis muss immer genau so heißen wie die Library auch.

Wenn sich da beim Auspacken irgendein xy-master-Verzeichnisname zwischengemogelt hat, mußt Du es so ändern/verschieben, dass sich die Library in einem Verzeichnis befindet, das denselben Namen wie die Library hat.

Die neuesten Arduino IDE Versionen, ich glaube an 1.0.4 oder so haben eine Menue Funktion, um die gezippte Lib direkt an die richtige Stelle zu entpacken.

Sketch->Library iportieren-> add Library (ganz oben)
Dann die herunter geladene gezippte Lib auswählen. Wird dann in den richtiegn Ordner gepackt.

Die IDE muss dann neu gestartet werden.

Gruß
Reinhard

Hallo zusammen

Besten Dank für die Tipps, binn jetzt etwas weiter gekommen.

Die ersten erfolgserlebnisse sind vorhanden, Anzegen OK jetzt muß ich erstmal wieder pausieren bis zum WE.

Martin

Hallo zusammen

Dank euren Tipps habe ich meine LCD, LCD_I2C und auch

dieses hier 0,96 Zoll I2C IIC SPI serielle 128 x 64 OLED LCD zun laufen gebracht.

Habe auch schon einen ersten Versuch gestartet und folgenden Code geschrieben.

Dazu gleich einige Fragen.

Ist das überhaupt möglich das man einen DHT11 und einen DHT22 auf einen Arduino uno gleichzeitig betreibt?

Die DHT hängen an einen Steckbrett mit 20 cm Kabel und Wiederstand zwischen Datenleitung und Plus5V,

am Display werden aber immer die gleichen Werte angezeigt.

Am Serial Monitor wird dieses angezeigt

"DHT22 Serielle Ausgabe
DHT11 Serielle Ausgabe
Temperatur: 23.00 C Luftfeuchte. 38.00 %
Temperatur: 23.00 C Luftfeuchte. 38.00 %
Temperatur: 23.00 C Luftfeuchte. 38.00 %
Temperatur: 23.00 C Luftfeuchte. 38.00 %"

Hier der Code

//DHT11, DHT22, und 2004 I2c Display

#include "DHT.h"
#define DHTPIN 8
#define DHTPIN 7
#define DHTTYPE DHT22
#define DHTTYPE DHT11
DHT dht22(DHTPIN, DHTTYPE);
DHT dht11(DHTPIN, DHTTYPE);

//Einbinden des LCD
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C lcd(0x3F,20, 4);
void setup()
{
  {
    Serial.begin(9600);
  Serial.println("DHT22 Serielle Ausgabe");
dht22.begin();
lcd.init(); 
lcd.backlight();




  Serial.begin(9600);
  Serial.println("DHT11 Serielle Ausgabe");
dht11.begin();
lcd.init();
lcd.backlight();
 }
}
void loop()
{
 {
  float t = dht22.readTemperature();
  float h = dht22.readHumidity();
  
  Serial.print("Temperatur: ");             // Ausgabe im Seriellen Monitor
  Serial.print(t);                          // Ausgabe im Seriellen Monitor
  Serial.print(" C\t");                     // Ausgabe im Seriellen Monitor  
  Serial.print("Luftfeuchte: ");            // Ausgabe im Seriellen Monitor
  Serial.print(h);                          // Ausgabe im Seriellen Monitor
  Serial.println(" %");                     // Ausgabe im Seriellen Monitor
  
  delay(1000);
  
lcd.setCursor(0, 0);                       // Anfang auf Stelle 0, Zeile 0 setzen
lcd.print("Temp. :");                      // Temp. : auf LCD ausgeben
lcd.setCursor(9, 0);                       // Anfang auf Stelle 9, Zeile 0 setzen
lcd.print(t);                              // Wert aus "t" ausgeben (Temperatur)
lcd.setCursor(15, 0);                      // Anfang auf Stelle 15, Zeile 0 setzen
lcd.print("C");                            // C auf LCD ausgeben
lcd.setCursor(0, 1);                       // Anfang auf Stelle 0, Zeile 1 setzen
lcd.print("Luftf.:");                      // Luft.: auf LCD ausgeben
lcd.setCursor(9, 1);                       // Anfang auf Stelle 9, Zeile 1 setzen
lcd.print(h);                              // Wert aus "h" ausgeben (Luftfeuchtigkeit)
lcd.setCursor(15, 1);                      // Anfang auf Stelle 15, Zeile 1 setzen
lcd.print("%");                            // % auf LCD ausgeben

}
{

float t = dht11.readTemperature();
float h = dht11.readHumidity(); 

   Serial.print("Temperatur: ");             // Ausgabe im Seriellen Monitor
  Serial.print(t);                          // Ausgabe im Seriellen Monitor
  Serial.print(" C\t");                     // Ausgabe im Seriellen Monitor  
  Serial.print("Luftfeuchte: ");            // Ausgabe im Seriellen Monitor
  Serial.print(h);                          // Ausgabe im Seriellen Monitor
  Serial.println(" %");                     // Ausgabe im Seriellen Monitor
  
  delay(1000);
  
lcd.setCursor(0, 2);                       // Anfang auf Stelle 0, Zeile 0 setzen
lcd.print("Temp. :");                      // Temp. : auf LCD ausgeben
lcd.setCursor(9, 2);                       // Anfang auf Stelle 9, Zeile 0 setzen
lcd.print(t);                              // Wert aus "t" ausgeben (Temperatur)
lcd.setCursor(15, 2);                      // Anfang auf Stelle 15, Zeile 0 setzen
lcd.print("C");                            // C auf LCD ausgeben
lcd.setCursor(0, 3);                       // Anfang auf Stelle 0, Zeile 1 setzen
lcd.print("Luftf.:");                      // Luft.: auf LCD ausgeben
lcd.setCursor(9, 3);                       // Anfang auf Stelle 9, Zeile 1 setzen
lcd.print(h);                              // Wert aus "h" ausgeben (Luftfeuchtigkeit)
lcd.setCursor(15, 3);                      // Anfang auf Stelle 15, Zeile 1 setzen
lcd.print("%");                            // % auf LCD ausgeben
 }
}

Was muss ich am code ändern?

Gruß Martin

Einges. Arbeite dich nebenbei auch mal richtig in den Arduino/C Code ein. Da sind dicke Schnitzer drin und das ganze sieht lediglich nach wilden copy&paste ohne Lerneffekt aus.

Ich hoffe mal ich vergesse jetzt keinen der Fehler,

  • #defines doppelt und nicht eindeutig (DHTPIN, DHTTYPE)
  • Konstruktur ebenfalls doppelt und nicht eindeutig
  • Initialisierung der Seriellen Schnittstelle und des I2C Displays erfolgt doppelt
  • dht22 wird überhaupt nicht ausgelesen

Martin,
nur als ein Beispiel:

"#define DHTPIN 7" bedeutet im Klartext:

wenn später im Quellcode die Folge DHTPIN auftaucht, setze dafür die Zahl 7
ebenso bedeutet
#define DHTTYPE DHT22
setze für den Begriff DHTTYPE den Wert DHT22 ein.

Jetzt solltest Du schon selbst erkennen, dass es Chaos gibt, wenn DHTPIN einmal 7 und einmal 8 bedeuten soll
und DHTTYPE einmal DHT22 und einmal DHT11 ...

Manfred

Hallo

@sschultewolter: Den ersten teil meines Code habe ich selber zusammengestellt, mit hilfe dieser Seite
http://forum.arduino.cc/index.php?topic=186278.15
hast recht mit der copy&paste, den zweiten Teil habe ich mit copy gemacht, da ich auf der Tastatur nicht so flink bin.
Was C betrift habe ich schon viel gelesen, aber es will nicht so richtig in die birne rein, d a mach ich eher Lernen beim tun.

@Manfred:Habe jetzt etwas rumumprobiert und bin dann auf das Ergebnis gekommen,

ES FUNKTIONERT :slight_smile: :slight_smile: :slight_smile:

Besten Dank noch einmal :blush:

PS: Hoffe ihr helft mir auch weiterhin.

@sima6201: Wenn nun bei dir beide DHT 11 und 22 laufen, was bekommt du für Feuchtewerte im Vergleich zu den beiden Sensoren ?

Was C betrift habe ich schon viel gelesen, aber es will nicht so richtig in die birne rein, d a mach ich eher Lernen beim tun.

Wenn du noch nie Programmiert hast ist C nicht einfach zu lernen, so gesehen machst du das nicht schlecht.

Learning by doing finde ich auch effektiver als sich durch die Theorie zu wühlen.
Wichtig bei der Sache ist aber zu verstehen warum es funktioniert, das muss immer vor dem stehen das es funktioniert.
Sonst ist die Steigung der Lernkurve sehr klein.

Hallo

@rudirabbit:Die Temp und die Feuchte sind momentan unterscheidlich, da ich einen Sensor in einer kleinen Dose etwas abgesondert habe, damit ich den unterschied sehe, beide an 20cm Kabel.

Habe sie jetzt zusammen gelegt, berichte morgen darüber wie sich die beiden verhalten.
Das mit C und auch elektronik ist bei mir so, habe schon viel darüber gelesen aber habe erst jetzt so richtig mit Praxis begonnen.
Ist eben ein unterschied Theorie und Praxis, dafür brauche ich den einen oder anderen Denkanstoss.

Mit den sensoren habe ich jetzt ersmal angefangen das ich mein Projeckvorhaben (siehe weiter oben den Link) auch besser realisieren kann und ich dan auch besser verstehe was ich mache oder machen muss.

Ich lese ja schon sehr lange im Forum mit und da habe ich auch gelernt nicht mit der Tür ins Haus fallen sondern einen schritt nach dem anderen.

Gruß Martin

Hallo Martin, du gehst prag­ma­tisch vor - so muß es sein.

Mein DHT 11 misst immer was um die 37 %, ob dies einigermassen passt glaube ich nicht wirklich.

Deshalb wäre ich an deinen Werten interessiert.

Rudirabbit:

Deine Frage nach den Messwerten:
geht es Dir speziell um die parallele Messung von DHT11 und DHT22?

Ich habe aktuell nur zwei Pärchen DHT22 / AOSONG AM2302 im Gebrauch und kann feststellen, dass sie sehr gut beisammen liegen.
Allerdings braucht es immer nach Start etliche 10 Minuten, eher 20-30 Minuten, bis sich die Messergebnisse einpendeln und angleichen, dann ist die Differenz so um 2% Feuchte.

Manfred

Hallo

Da ich schon seit langer Zeit im Forum mitlese habe ich mir zwischenzeitlich ein kleines Lager mit verschiedenen Komponenten zugelegt, darunter auch die zwei DHT Sensoren.

Mir ist es nicht auf die Messgenauigkeit angekommen sondern nur darum das ich die zwei Sensoren nehme und

dass das LCD I2C 20x4 nicht unnötige nur zwei Zeilen anzeigt dachte ich nimmst beide Sensoren (schere Aufgabe).

Da ihr mich nach den Messwerten gefragt habt, habe ich das ganze über Nacht liegenlassen, beide Sensoren nebeneinander gelegt und jetzt auch ganzen Tag beobachtet.

Ergebnis:

Temperatur DHT 11 23,00° C Luftfeuchte 35,00 %

DHT 22 22,70° C Luftfeuchte 35,80 %

DHT 11 reagiert sehr träge}
}wenn man z.B. von ca. 30 - 40 hinhaucht
DHT 22 reagiert sehr flink }

Ich habe es auch noch mit einen Strohhalm probiert, da bin ich ganz nahe an den DHT11 rangegangen,

der reagierte 11er auch sehr träge darauf und geht nicht so weit mit dem Messwert hoch wie der 22er.

Da der DHT 22 daneben liegt reagierte er im Gegensatz zum 11er sehr flink und geht mit den Messwerten bei

Feuchte fast durch die Decke, die Temp steigt auch höher an als beim 11er.

Noch ein kleines Testergebnis, beide mit Strohhalm 10 sec. 2 cm abstand, befeuert:

DHT 11 26° C 60,00 %

DHT 22 28° C 99,90 %

So jetzt werde Ich das nächste Projekt beginnen, das ganze auf eine SD-Karte übertragen. :confused:

Gruß Martin

Hallo Martin
Danke für die Rückmeldung.

Mir geht es um die Feuchtewerte der DHT Sensoren im Kontext zu den Daten vom Wetterdienst.
Ich messe mit meinem DHT11 seit Tagen 38% +/- 2 %
Für meine Region wird vom DWD gerade 70% angezeigt.
Den Sensor habe ich nicht in einem beheiztem Raum angebracht.

Der 11er ist etwas träger als der 22er der auch 2 Nachkommastellen hat, aber insgesamt sind die Messergebnisse in etwa identisch.

Die DHT's scheinen nicht mal als Schätzeisen zu taugen :confused: