Zu doof ein Display anzuschliesen?

Hallo zusammen,

bin ein Neuling was die Arduino Geschichte betrifft, deshalb tue ich mich wohl etwas schwer damit.
Das Endprojekt soll eine Lüftersteuerung die Taupunktabhängig ist, es soll eine Küchenzeile hinterlüftet werden damit die Ecke der Wand nicht schimmelt.
Beispiele gibts ja einige Sonstiges - Taupunktlüftung - Trockenlüftung mit Arduino | FEUERWERK.net Forum
Einen Aufbau mit dem DHT22 hab ich hinbekommen nun wollte ich das auf nem Display anzeigen lassen und hab dafür das Hallo Welt Programm mal genommen. Das zeigt leider in der 1. Zeile nur ein h und in der 2. nur 1ne Zahl an. Display ist dieses hier Character 20x4 LCD Display Module 2004 White on Blue 5V I2C Interface
Ich hab auch schon versucht die Sensorwerte auszugeben, im Monitor ist es ordentlich, auf dem Display nur ein Buchstabe der Beschriftung und Temperatur und Feuchtigkeit 2stellig mit punkt als Trennung. Ich versteh es nicht an was das liegt. Wer kann helfen?

Wie soll jemand ohne Deinen Sketch helfen können und ohne Info, wie Du es angeschlossen hast? Auch ein Link zur Lib wäre hilfreich.
Setze Deinen Sketch bitte in Codetags. Wie das geht, steht hier.

Gruß Tommy

Wenn nur ein Zeichen ausgegeben wird, hast Du auch nur ein Zeichen im Puffer.
Es macht einen Unterschied, ob man ein char oder ein char-Array definiert.
Alles raten....

welche LCD Library hast du ganz genau installiert und wie?

Einige alte Versionen "aus dem Internet" haben einen Fehler in der Ausgabe - dann sieht man nur jeweils das erste Zeichen je Print.

Sorry, wie gesagt ist etwas Neuland für mich. Ich versuch das nachzureichen.

Ich will hier keine Werbung machen. Versuch mal mit der, wen nicht vernünftig tut ist was mit dem Display.
In der Lib sind mehre Beispiele, auf den kanste dein Vorhaben aufbauen

1 Like

Hier erstmal der Sketch

// Einbinden des DHT22
#include "DHT.h"                            // Library für DHT Sensor aufgerufen
#define DHTPIN 9                            // DHT Sensor wird aus PIN 9 ausgelesen
#define DHTTYPE DHT22                       // DHT Type wird auf DHT22 festgelegt
DHT dht22(DHTPIN, DHTTYPE);                 // DHTPIN und DHTTYE in dht22 definiert

// Einbinden des LCD
#include "Wire.h"                           // Library für I2C aufgerufen
#include "LiquidCrystal_I2C.h"              // Library für LCD aufgerufen
LiquidCrystal_I2C lcd(0x27,20,4);           // LCD Adresse auf 0x27 gesetzt, 20 Zeichen / 4 Zeilen LCD

// I2C wie nachfolgend angeschlossen
// LCD GND -> GND ARDUINO
// LCD VCC -> 5V  ARDUINO
// LCD SDA -> A4  ARDUINO
// LCD SCL -> A5  ARDUINO

void setup()
{
  Serial.begin(9600);                       // Serielle Ausgabe beginnen mit 9600baud
  Serial.println("DHT22 Serielle Ausgabe"); // Begrüßung beim Aufruf vom seriellen Monitor
dht22.begin();                              // Auslesen des DHT22 beginnt
lcd.init();                                 // Initialisierung des LCD                                            
lcd.backlight();                            // LCD Hintergrundbeleuchtung aktivieren
}

void loop()
{
  float t = dht22.readTemperature();        // Die Temperatur wird vom DHT22 ausgelesen, Wert in "t" schreiben
  float h = dht22.readHumidity();           // Die Luftfeuchte wird vom DHT22 ausgelesen, Wert in "h" schreiben
  
  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
  
                     // Temp. : auf LCD ausgeben
                     
lcd.setCursor(3, 0);                       // Anfang auf Stelle 3, Zeile 0 setzen
lcd.print(t);                              // Wert aus "t" ausgeben (Temperatur)
lcd.print("Hallo"); // Testausgabe Hallo          
                           // C auf LCD ausgeben
                           
lcd.setCursor(3, 2);                       // Anfang auf Stelle 3, Zeile 3 setzen
lcd.print(h);                              // Wert aus "h" ausgeben (Luftfeuchtigkeit)

}

Hier die Ausgabe dazu

Ich danke dir, aber ich bräuchte eins mit 4 Zeilen

Man muss nur auf 20, 04 ändern statt 16 02. das ist bei allen Lib so.
Hier ist das auf Deutsch :wink:

@pyrodreams

welche LCD Library hast du ganz genau installiert und wie hast du diese Installiert?
Wie gesagt, es gibt alte - die machen diesen Fehler.

Und ja - die Library die Fony verlinkt hat - die wird funktionieren - die ist von mir.

1 Like

Es sieht besser aus, vielleicht gehts jetzt wirklich? Bekomme aber ne Fehlermeldung

In file included from C:\Users\rocco\Documents\Arduino\sketch_SensorLuftWasser\sketch_SensorLuftWasser.ino:11:0:
C:\Users\rocco\Documents\Arduino\libraries\NoiascaLiquidCrystal/NoiascaHW/lcd_i2c.h:15:81: note: #pragma message: Warning: Don't include lcd_i2c.h. Use lcd_PCF8574.h instead!
 #pragma message ("Warning: Don't include lcd_i2c.h. Use lcd_PCF8574.h instead!" )

Hier nochmal der geänderte Teil des Sketches, ist das so richtig? Und vielen Dank schonmal... :star_struck: :heart_eyes:

// Einbinden des LCD
#include "Wire.h"                           // Library für I2C aufgerufen
#include "NoiascaLiquidCrystal.h" 
#include "NoiascaHW/lcd_i2c.h"
                                             // Library für LCD aufgerufen
LiquidCrystal_I2C lcd(0x27,20,4);           // LCD Adresse auf 0x27 gesetzt, 20 Zeichen / 4 Zeilen LCD

// I2C wie nachfolgend angeschlossen
// LCD GND -> GND ARDUINO
// LCD VCC -> 5V  ARDUINO
// LCD SDA -> A4  ARDUINO
// LCD SCL -> A5  ARDUINO

void setup()
{
  Serial.begin(9600);                       // Serielle Ausgabe beginnen mit 9600baud
  Serial.println("DHT22 Serielle Ausgabe"); // Begrüßung beim Aufruf vom seriellen Monitor
dht22.begin();                              // Auslesen des DHT22 beginnt
Wire.begin();
lcd.begin();
lcd.init();                                 // Initialisierung des LCD                                            
lcd.backlight();                            // LCD Hintergrundbeleuchtung aktivieren

nimm bitte

#include <Wire.h>                      // needed for the I2C interface
#include <NoiascaLiquidCrystal.h>      // download library from https://werner.rothschopf.net/202009_arduino_liquid_crystal_intro.htm 
#include <NoiascaHW/lcd_PCF8574.h>     // include the proper IO interface

Das lcd.init weg damit

so tue ich.....das display funtzt..... :star_struck:

Fehlermeldung kommt noch immer --> "Warning: Don't include lcd_i2c.h. Use lcd_PCF8574.h instead!"

hast du sicher das dritte include richtig gestellt?

Zeige mal dein aktuellen Sketch.

// Einbinden des DHT22
#include "DHT.h"                            // Library für DHT Sensor aufgerufen
#define DHTPIN 9                            // DHT Sensor wird aus PIN 9 ausgelesen
#define DHTTYPE DHT22                       // DHT Type wird auf DHT22 festgelegt
DHT dht22(DHTPIN, DHTTYPE);                 // DHTPIN und DHTTYE in dht22 definiert

// Einbinden des LCD
#include "Wire.h"                           // Library für I2C aufgerufen
#include "NoiascaLiquidCrystal.h" 
#include "NoiascaHW/lcd_i2c.h"
                                             // Library für LCD aufgerufen
LiquidCrystal_I2C lcd(0x27,20,4);           // LCD Adresse auf 0x27 gesetzt, 20 Zeichen / 4 Zeilen LCD

// I2C wie nachfolgend angeschlossen
// LCD GND -> GND ARDUINO
// LCD VCC -> 5V  ARDUINO
// LCD SDA -> A4  ARDUINO
// LCD SCL -> A5  ARDUINO

void setup()
{
  Serial.begin(9600);                       // Serielle Ausgabe beginnen mit 9600baud
  Serial.println("DHT22 Serielle Ausgabe"); // Begrüßung beim Aufruf vom seriellen Monitor
dht22.begin();                              // Auslesen des DHT22 beginnt
Wire.begin();
lcd.begin();                                        
lcd.backlight();                            // LCD Hintergrundbeleuchtung aktivieren
}

void loop()
{
  float t = dht22.readTemperature();        // Die Temperatur wird vom DHT22 ausgelesen, Wert in "t" schreiben
  float h = dht22.readHumidity();           // Die Luftfeuchte wird vom DHT22 ausgelesen, Wert in "h" schreiben
  
  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
  
                     // Temp. : auf LCD ausgeben
                     
lcd.setCursor(0, 0);                       // Anfang auf Stelle 0, Zeile 0 setzen
lcd.print("Temperatur : ");                // Temperatur
lcd.print(t);                              // Wert aus "t" ausgeben (Temperatur)
lcd.print("°C");                           // Grad Celsius          
                           // C auf LCD ausgeben
                           
lcd.setCursor(0, 2);                       // Anfang auf Stelle 0, Zeile 3 setzen
lcd.print("Luftfeuchte: ");               // Luftfeuchte
lcd.print(h);                              // Wert aus "h" ausgeben (Luftfeuchtigkeit)
lcd.print("%");                            // in Prozent 

}

das ist veraltert. Daher das Warning.
Guck noch mal was ich dir in #13 geschrieben habe.

Warning: Don't include lcd_i2c.h. Use lcd_PCF8574.h instead!

mach dir
lcd.print(t,1);
und
lcd.print(h,1);

die zweite Nachkommastelle ist so wie so nur um schöner machen, Wahrheit wird nicht angezeigt