Go Down

Topic: Mehrere DHT an einem Arduino (Read 21817 times) previous topic - next topic

Mardetuino

Bitte ganzen Sketch und ich schau mir dann auch mal die Meldungen an.
Das Display geht komplett?
Nur das Auslesen der DHTs mach Probleme?

Der_Arne

Hallo mal wieder

so ich habe ein paar Fehler gefunden und diese nun Berichtigt hier nun der neue Code

Code: [Select]


// DHT11 und 1.8 Zoll TFT-Farb-Display (HY-1.8 SPI)

#include "Adafruit_GFX.h"    // Adafruit Grafik-Bibliothek
#include "Adafruit_ST7735.h" // Adafruit ST7735-Bibliothek
#include <SPI.h>
#include <Wire.h>
#include <DHT22.h>

#define DHT1PIN 4         // Zur Messung verwendeter Pin 4
#define DHT2PIN 5        // Zur Messung verwendeter Pin 5
#define DHT3PIN 6          // Zur Messung verwendeter Pin 6
#define DHTTYPE DHT22  // DHT 22


// TFT-Display
#define CS   10 // Arduino-Pin an Display CS   
#define DC   9  // Arduino-Pin an Display A0
#define RST  8  // Arduino Reset-Pin

Adafruit_ST7735 tft = Adafruit_ST7735(CS, DC, RST);  // Display-Bibliothek Setup





DHT22 dht1(DHT1PIN, DHTTYPE);  // Initialisieren des DHTs
DHT22 dht2(DHT2PIN, DHTTYPE);
DHT22 dht3(DHT3PIN, DHTTYPE);
boolean night_mode=true;

void setup(void) {
 
  // Display
  tft.initR(INITR_BLACKTAB);     // ST7735-Chip initialisieren
 
// DHT
dht.begin();
}
void loop() {
          // DHTs auslesen
  float t1 = dht1.getTemperatureC();  // Temperatur DHT #1
  float t2 = dht2.getTemperatureC();  // Temperatur DHT #2
  float t3 = dht3.getTemperatureC();  // Temperatur DHT #3
 
  float h1 = dht1.getHumidity();  // Luftfeuchte DHT #1
  float h2 = dht2.getHumidity();  // Luftfeuchte DHT #2
  float h3 = dht3.getHumidity();  // Luftfeuchte DHT #3
 



nun bekomme ich aber die Fehlermeldungen

DHT_test_222:27: error: expected primary-expression before ')' token
DHT_test_222:28: error: expected primary-expression before ')' token
DHT_test_222:29: error: expected primary-expression before ')' token
DHT_test_222.cpp: In function 'void setup()':
DHT_test_222:38: error: 'dht' was not declared in this scope
DHT_test_222.cpp: In function 'void loop()':
DHT_test_222.cpp:46: warning: unused variable 't1'
DHT_test_222.cpp:47: warning: unused variable 't2'
DHT_test_222.cpp:48: warning: unused variable 't3'
DHT_test_222.cpp:50: warning: unused variable 'h1'
DHT_test_222.cpp:51: warning: unused variable 'h2'
DHT_test_222.cpp:52: warning: unused variable 'h3'



Das mit den unused variable ist klar aber der Rest verwirt mich


Grüße der Arne

Mardetuino

dht.begin();
in
dht1.begin();
dht2.begin();
dht3.begin();

Am Ende der LOOP fehlt die }

Welche Lib verwendest du? Bitte Link!
In die LOOP sollte noch ein delay von ca. 1 Sekunde.
Mach ne Serielle Ausgabe der Werte. Und Poste das Ergebnis+Code.

pylon

Du verwendest ganz offensichtlich nicht die Bibliothek, die Du verlinkt hast. Bitte poste einen Link auf die Bibliothek, die Du wirklich verwendest.

Der_Arne

#19
Sep 09, 2013, 09:57 pm Last Edit: Sep 09, 2013, 10:02 pm by Der_Arne Reason: 1
Hallo

nochmal danke für die Hilfe und Geduld.

Ich habe alle Libs mit DHT nochmal entfernt und die von meinem Link installiert. Anschließend habe ich noch ein paar Änderungen vorgenommen
das Sketch sieht grade noch etwas wild aus.
Ich habe versucht die Seriale Ausgabe umzusetzen bekomme aber noch eine Fehlermeldung


Hier der WILDE Sketch mit ein paar, Ich habe die alten Daten für das Display noch drin, diese habe ich aber noch nicht getestet da das Display grade fehlt und ich erst an einer Stelle anfangen wollte und nicht gleich fünf Baustellen aufreißen. Ich habe die Variablen für das Display auch noch nicht geändert

Code: [Select]
// DHT11 und 1.8 Zoll TFT-Farb-Display (HY-1.8 SPI)

#include "Adafruit_GFX.h"    // Adafruit Grafik-Bibliothek
#include "Adafruit_ST7735.h" // Adafruit ST7735-Bibliothek
#include <SPI.h>
#include <Wire.h>
#include <DHT22.h>

#define DHT1_PIN 4         // Zur Messung verwendeter Pin 4
#define DHT2_PIN 5        // Zur Messung verwendeter Pin 5
#define DHT3_PIN 6          // Zur Messung verwendeter Pin 6



// TFT-Display
#define CS   10 // Arduino-Pin an Display CS  
#define DC   9  // Arduino-Pin an Display A0
#define RST  8  // Arduino Reset-Pin

Adafruit_ST7735 tft = Adafruit_ST7735(CS, DC, RST);  // Display-Bibliothek Setup





DHT22 dht1(DHT1_PIN);  // Initialisieren des DHTs
DHT22 dht2(DHT2_PIN);
DHT22 dht3(DHT3_PIN);
boolean night_mode=true;

void setup(void) {


 Serial.begin(9600);

 // Display
 tft.initR(INITR_BLACKTAB);     // ST7735-Chip initialisieren
 
// DHT

}
void loop() {
 
 delay(1000);

}
{
 Serial.print(dht1.getTemperatureC());
 Serial.println(C);
 Serial.print(dht2.getTemperatureC())
 Serial.println(C);
 Serial.print(dht3.getTemperatureC())
 Serial.println(C);
 Serial.print(dht1.getHumidity());
 Serial.println(%);
 Serial.print(dht2.getHumidity());
 Serial.println(%);
 Serial.print(dht3.getHumidity());
 Serial.println(%);
}
/*  
}

void show_t1(float t1,boolean clear){
  // Werte anzeigen lassen

 
 int clearcolor=night_mode?ST7735_BLACK:ST7735_WHITE;
 int textcolor=night_mode?ST7735_WHITE:ST7735_BLACK;
 
 byte xs=12;
 byte ys=66;
 String htemp=String((int)temp);
 
 
 set_text(xs,ys,t1,clear?clearcolor:textcolor,3);
 set_text(xs+(3*htemp.length()*8),ys,"",(clear?clearcolor:textcolor),2);
 tft.write(247);                                                             // das °-Zeichen  
 tft.print("C");                                                             // "C" Zeichen

void show_t2(float temp,boolean clear){
 
 int clearcolor=night_mode?ST7735_BLACK:ST7735_WHITE;
 int textcolor=night_mode?ST7735_WHITE:ST7735_BLACK;
 
 byte xs=12;
 byte ys=66;
 String htemp=String((int)temp2);
 //byte xss=(temp<10?:temp
 
 set_text(xs+20,ys,t2,clear?clearcolor:textcolor,3);
 set_text(xs+(3*htemp.length()*8),ys,"",(clear?clearcolor:textcolor),2);
 tft.write(247);                                                             // das °-Zeichen  
 tft.print("C");                                                             // "C" Zeichen

}*/



Danke nochmal für die Geduld


Achso ganz vergessen hier die Fehlermeldung


DHT_test_222:46: error: expected unqualified-id before '{' token

Serenifly

#20
Sep 09, 2013, 10:11 pm Last Edit: Sep 09, 2013, 10:13 pm by Serenifly Reason: 1
Da sind zwei Klammern zu viel in der Loop. Die zwei direkt nach dem Delay gehören raus.

Und die Klammer nach dem Anfang des Kommentar Blocks ist ebenfalls fehl am Platz. Die schließende Klammer von show_t1() fehlt auch. Das geht jetzt weil der Teil nicht kompiliert wird.

Mardetuino

Wo ist der Link?
Geschweifte Klammern bitte richtig setzten!

Der_Arne

Guten Morgen


nochmal schnell geändert und nun kommt dieses


Code: [Select]
// DHT11 und 1.8 Zoll TFT-Farb-Display (HY-1.8 SPI)

#include "Adafruit_GFX.h"    // Adafruit Grafik-Bibliothek
#include "Adafruit_ST7735.h" // Adafruit ST7735-Bibliothek
#include <SPI.h>
#include <Wire.h>
#include <DHT22.h>

#define DHT1_PIN 4         // Zur Messung verwendeter Pin 4
#define DHT2_PIN 5        // Zur Messung verwendeter Pin 5
#define DHT3_PIN 6          // Zur Messung verwendeter Pin 6



// TFT-Display
#define CS   10 // Arduino-Pin an Display CS   
#define DC   9  // Arduino-Pin an Display A0
#define RST  8  // Arduino Reset-Pin

Adafruit_ST7735 tft = Adafruit_ST7735(CS, DC, RST);  // Display-Bibliothek Setup





DHT22 dht1(DHT1_PIN);  // Initialisieren des DHTs
DHT22 dht2(DHT2_PIN);
DHT22 dht3(DHT3_PIN);
boolean night_mode=true;

void setup(void) {


  Serial.begin(9600);

  // Display
  tft.initR(INITR_BLACKTAB);     // ST7735-Chip initialisieren
 
// DHT

}
void loop() {
   
  delay(1000);



  Serial.print(dht1.getTemperatureC());
  Serial.print("C ");
  Serial.print(dht2.getTemperatureC());
  Serial.print("C ");
  Serial.print(dht3.getTemperatureC());
  Serial.print("C ");
  Serial.print(dht1.getHumidity());
  Serial.println("% ");
  Serial.print(dht2.getHumidity());
  Serial.println("% ");
  Serial.print(dht3.getHumidity());
  Serial.println("% ");
}
/* 
}

void show_t1()(float t1,boolean clear){
   // Werte anzeigen lassen

   
  int clearcolor=night_mode?ST7735_BLACK:ST7735_WHITE;
  int textcolor=night_mode?ST7735_WHITE:ST7735_BLACK;
 
  byte xs=12;
  byte ys=66;
  String htemp=String((int)temp);
 
 
  set_text(xs,ys,t1,clear?clearcolor:textcolor,3);
  set_text(xs+(3*htemp.length()*8),ys,"",(clear?clearcolor:textcolor),2);
  tft.write(247);                                                             // das °-Zeichen 
  tft.print("C");                                                             // "C" Zeichen

void show_t2()(float temp,boolean clear){
 
  int clearcolor=night_mode?ST7735_BLACK:ST7735_WHITE;
  int textcolor=night_mode?ST7735_WHITE:ST7735_BLACK;
 
  byte xs=12;
  byte ys=66;
  String htemp=String((int)temp2);
  //byte xss=(temp<10?:temp
 
  set_text(xs+20,ys,t2,clear?clearcolor:textcolor,3);
  set_text(xs+(3*htemp.length()*8),ys,"",(clear?clearcolor:textcolor),2);
  tft.write(247);                                                             // das °-Zeichen 
  tft.print("C");                                                             // "C" Zeichen

}*/



Ein paar Fehler habe ich noch gefunden und berichtigt (fehlende ";" und   " "  )


Fehler:

C:\Users\Bernd\Downloads\Neuer Ordner (2)\Jarduino_v.1.2_beta\arduino-1.0-Jarduino\libraries\DHT22\DHT22.cpp:47:24: error: WConstants.h: No such file or directory
C:\Users\Bernd\Downloads\Neuer Ordner (2)\Jarduino_v.1.2_beta\arduino-1.0-Jarduino\libraries\DHT22\DHT22.cpp: In constructor 'DHT22::DHT22(uint8_t)':
C:\Users\Bernd\Downloads\Neuer Ordner (2)\Jarduino_v.1.2_beta\arduino-1.0-Jarduino\libraries\DHT22\DHT22.cpp:64: error: 'digitalPinToBitMask' was not declared in this scope
C:\Users\Bernd\Downloads\Neuer Ordner (2)\Jarduino_v.1.2_beta\arduino-1.0-Jarduino\libraries\DHT22\DHT22.cpp:65: error: 'digitalPinToPort' was not declared in this scope
C:\Users\Bernd\Downloads\Neuer Ordner (2)\Jarduino_v.1.2_beta\arduino-1.0-Jarduino\libraries\DHT22\DHT22.cpp:65: error: 'portInputRegister' was not declared in this scope
C:\Users\Bernd\Downloads\Neuer Ordner (2)\Jarduino_v.1.2_beta\arduino-1.0-Jarduino\libraries\DHT22\DHT22.cpp:66: error: 'millis' was not declared in this scope
C:\Users\Bernd\Downloads\Neuer Ordner (2)\Jarduino_v.1.2_beta\arduino-1.0-Jarduino\libraries\DHT22\DHT22.cpp: In member function 'DHT22_ERROR_t DHT22::readData()':
C:\Users\Bernd\Downloads\Neuer Ordner (2)\Jarduino_v.1.2_beta\arduino-1.0-Jarduino\libraries\DHT22\DHT22.cpp:90: error: 'millis' was not declared in this scope
C:\Users\Bernd\Downloads\Neuer Ordner (2)\Jarduino_v.1.2_beta\arduino-1.0-Jarduino\libraries\DHT22\DHT22.cpp:115: error: 'delayMicroseconds' was not declared in this scope
C:\Users\Bernd\Downloads\Neuer Ordner (2)\Jarduino_v.1.2_beta\arduino-1.0-Jarduino\libraries\DHT22\DHT22.cpp:122: error: 'delayMicroseconds' was not declared in this scope
C:\Users\Bernd\Downloads\Neuer Ordner (2)\Jarduino_v.1.2_beta\arduino-1.0-Jarduino\libraries\DHT22\DHT22.cpp: In member function 'void DHT22::clockReset()':
C:\Users\Bernd\Downloads\Neuer Ordner (2)\Jarduino_v.1.2_beta\arduino-1.0-Jarduino\libraries\DHT22\DHT22.cpp:242: error: 'millis' was not declared in this scope



der Link :

http://nethoncho.com/arduino/DHT22/DHT22-04.zip


Ich wünsche euch einen guten Tag auch wenn es hier im Norden leider regnet

Mardetuino

#23
Sep 10, 2013, 08:03 am Last Edit: Sep 10, 2013, 12:26 pm by mde110 Reason: 1
Das wird immer schlimmer, nicht besser!
Nimm dir Zeit und ändere mal nicht "eben schnell" mal was. Willst du es lernen oder einfach nur funktionierenden Code bekommen?

Warum nimmst du Jarduino?
Die Fehler sehen nach Versionsproblemen bzw. Lib-Versionsproblemen aus. Die LIB ist von Jan-2012!  :smiley-eek-blue: :smiley-eek-blue:

Lade dir Arduino 1.0.5 runter.
Installiere die Lib: http://playground.arduino.cc/Main/DHTLib

Öffne ein Example und probiere mit dem rum. Wenn es beim probieren zu Fehlern kommt, nach deine Änderungen rückgängig und versuche deine Fehler nachzuvollziehen.
Alles andere macht für mich nicht viel Sinn.

Grüße aus dem Süden an den Norden!
Bei uns regnets auch ;)

Der_Arne

Hallo mal wieder


So ich habe es nun geschafft die Werte auf dem Serial Monitor auszugeben.

hier der Code
Code: [Select]
// DHT11 und 1.8 Zoll TFT-Farb-Display (HY-1.8 SPI)

#include <SPI.h>
#include <Wire.h>
#include <dht.h>

#define DHT1_PIN 4         // Zur Messung verwendeter Pin 4
#define DHT2_PIN 5        // Zur Messung verwendeter Pin 5
#define DHT3_PIN 6          // Zur Messung verwendeter Pin 6

dht DHT1;   // Initialisieren des DHTs
dht DHT2;
dht DHT3;


void setup() {


  Serial.begin(9600);

  // Display


  // DHT

}
void loop() {


  DHT1.read22(DHT1_PIN);
  Serial.print(DHT1.humidity, 1);
  Serial.print("% \t DHT1 ");
  Serial.println(DHT1.temperature, 1);

  delay(2000);

  DHT2.read22(DHT2_PIN);

  Serial.print(DHT2.humidity, 1);
  Serial.print("% \t DHT2 ");
  Serial.println(DHT2.temperature, 1);
 
  delay(2000);

  DHT3.read22(DHT3_PIN);

  Serial.print(DHT3.humidity, 1);
  Serial.print("% \t DHT3 ");
  Serial.println(DHT3.temperature, 1);

  delay(2000);

}



Wieso ich Jarduino genutzt habe... Ich bin dabei mein Arduino für mein Meerwasseraquarium fit zu machen, mit LED Steuerung / Heizung / Kühlung / Strömungspumpen und und und und da bin ich auf das Jarduino gekommen. Aber das ist auch nur nebenbei.



Jetzt kommt der nächste Schritt für mich, die Anbindung des Display´s ein 1.8 Zoll TFT-Farb-Display (HY-1.8 SPI).


Grüße der Arne

und nochmals Danke für die zahlreichen Tipps und Denkanstöße

Der_Arne

Hallo mal wieder :smiley-roll:


Ich habe mein Display leider noch nicht bekommen möchte aber schon am schreiben des Codes weiter machen.

Sprich das Display ansprechen und Werte ausgeben lassen.

1. Ist es eigentlich möglich ein Bild ohne SD Karte anzeigen zu lassen und dieses auch als Hintergrund zu nutzen?
2. Muss ich für jeden Text der angezeigt werden soll jedesmal die Cursorposition neu festlegen? sprich auch jede neue Zeile?


So sieht mein Code derzeitig aus.
Die Seriale Ausgabe habe ich noch im Code gelassen damit ich Beispiele habe und notfalls nochmal mit einem PC das ganze Abfragen kann.

Code: [Select]




// DHT22 und 1.8 Zoll TFT-Farb-Display (HY-1.8 SPI)

#include <SPI.h>
#include <Wire.h>
#include <dht.h>
#include <Adafruit_ST7735.h>
#include <Adafruit_GFX.h>

#define DHT1_PIN 4         // Zur Messung verwendeter Pin 4
#define DHT2_PIN 5        // Zur Messung verwendeter Pin 5
#define DHT3_PIN 6          // Zur Messung verwendeter Pin 6

dht DHT1;   // Initialisieren des DHTs
dht DHT2;
dht DHT3;

// TFT-Display
#define cs   10 // Arduino-Pin an Display CS   
#define dc   9  // Arduino-Pin an Display A0
#define rst  8  // Arduino Reset-Pin

Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);  // Display-Bibliothek Setup


void setup() {

  // Display
  tft.initR(INITR_BLACKTAB);     // ST7735-Chip initialisieren

  Serial.begin(9600);

 


 

}
void loop() {


  DHT1.read22(DHT1_PIN);
  Serial.print(DHT1.humidity, 1);
  Serial.print("% \t DHT1 ");
  Serial.println(DHT1.temperature, 1);

  delay(2000);

  DHT2.read22(DHT2_PIN);

  Serial.print(DHT2.humidity, 1);
  Serial.print("% \t DHT2 ");
  Serial.println(DHT2.temperature, 1);
 
  delay(2000);

  DHT3.read22(DHT3_PIN);

  Serial.print(DHT3.humidity, 1);
  Serial.print("% \t DHT3 ");
  Serial.println(DHT3.temperature, 1);

  delay(2000);


  tft.fillScreen(ST7735_BLACK);  // TFT Hintergrund Schwarz
 
  tft.setTextSize(2);    // Schriftgroesse
 
  tft.setCursor(24,4);    // Coursorposition  (X,Y)

  tft.setTextColor(ST7735_WHITE);      //Schriftfarbe weis
  tft.print("DHT1");
  tft.println(DHT1.temperature, 1);     // DHT 1 Temperatur auf Pos 24,4 in Weiß schreiben Schriftgroesse 2
  tft.print("C");


  tft.setCursor(20,4);

  tft.setTextColor(ST7735_WHITE);
  tft.print("DHT2");
  tft.println(DHT2.temperature, 1);     // DHT 2 Temperatur auf Pos 20,4 in Weiß schreiben Schriftgroesse 2
  tft.print("C");
 
}



und mal wieder die Fehlermeldung dazu.....


C:\Program Files (x86)\Arduino\libraries\Adafruit_ST7735\Adafruit_ST7735.cpp: In constructor 'Adafruit_ST7735::Adafruit_ST7735(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t)':
C:\Program Files (x86)\Arduino\libraries\Adafruit_ST7735\Adafruit_ST7735.cpp:33: error: no matching function for call to 'Adafruit_GFX::Adafruit_GFX(int, int)'
C:\Program Files (x86)\Arduino\libraries\Robot_Control/Adafruit_GFX.h:41: note: candidates are: Adafruit_GFX::Adafruit_GFX(const Adafruit_GFX&)
C:\Program Files (x86)\Arduino\libraries\Robot_Control/Adafruit_GFX.h:41: note:                 Adafruit_GFX::Adafruit_GFX()
C:\Program Files (x86)\Arduino\libraries\Adafruit_ST7735\Adafruit_ST7735.cpp: In constructor 'Adafruit_ST7735::Adafruit_ST7735(uint8_t, uint8_t, uint8_t)':
C:\Program Files (x86)\Arduino\libraries\Adafruit_ST7735\Adafruit_ST7735.cpp:47: error: no matching function for call to 'Adafruit_GFX::Adafruit_GFX(int, int)'
C:\Program Files (x86)\Arduino\libraries\Robot_Control/Adafruit_GFX.h:41: note: candidates are: Adafruit_GFX::Adafruit_GFX(const Adafruit_GFX&)
C:\Program Files (x86)\Arduino\libraries\Robot_Control/Adafruit_GFX.h:41: note:                 Adafruit_GFX::Adafruit_GFX()
C:\Program Files (x86)\Arduino\libraries\Adafruit_ST7735\Adafruit_ST7735.cpp: At global scope:
C:\Program Files (x86)\Arduino\libraries\Adafruit_ST7735\Adafruit_ST7735.cpp:104: warning: only initialized variables can be placed into program memory area
C:\Program Files (x86)\Arduino\libraries\Adafruit_ST7735\Adafruit_ST7735.cpp:163: warning: only initialized variables can be placed into program memory area
C:\Program Files (x86)\Arduino\libraries\Adafruit_ST7735\Adafruit_ST7735.cpp:200: warning: only initialized variables can be placed into program memory area
C:\Program Files (x86)\Arduino\libraries\Adafruit_ST7735\Adafruit_ST7735.cpp:208: warning: only initialized variables can be placed into program memory area
C:\Program Files (x86)\Arduino\libraries\Adafruit_ST7735\Adafruit_ST7735.cpp:217: warning: only initialized variables can be placed into program memory area


Mardetuino

#27
Sep 13, 2013, 11:47 am Last Edit: Sep 13, 2013, 11:49 am by mde110 Reason: 1
Funktionieren denn die Examples?
Wenn nicht, dann versuche die LIBs mal mit einer älteren Arduino Version. Zb. 1.0.3

Der_Arne

Hallo

netter Tipp mit der alten Version war es kein Problem es muss ich nur hoffen das es Funktioniert wie ich es mir denke und ich nur noch an den Positionen der Werte etwas "spielen" muss.

Woran kann es liegen das es mit der alten Version funktioniert?


Jemand eine Idee wie ich ein Hintergrundbild einfügen könnte?

Danke nochmal


Grüße der Arne

Mardetuino

Weil die LIB noch nicht auf die neue Version angepasst wurde. Es gab da einige Änderungen...

Go Up