#include #include #include "DHT.h" #include #include #include #include #include #include #include #include #include "cmd.h" //#define RGB( r, g, b ) ( ( ( ( r ) & 248 ) | ( ( g ) >> 5 ) ) << 8 ) | ( ( ( ( g ) & 28 ) << 3 ) | ( ( b ) >> 3 ) ) #define RGB(r,g,b) (((r&0xF8)<<8)|((g&0xFC)<<3)|((b&0xF8)>>3)) //16bit: 5 red | 6 green | 5 blue #define COLOR_BLACK RGB( 0x00, 0x00, 0x00 ) /** \def COLOR_WHITE * \brief Shorthand for RGB( 255, 255, 255 ). */ #define COLOR_WHITE RGB( 0xFF, 0xFF, 0xFF ) /** \def COLOR_RED * \brief Shorthand for RGB( 255, 0, 0 ). */ #define COLOR_RED RGB( 0xFF, 0x00, 0x00 ) /** \def COLOR_GREEN * \brief Shorthand for RGB( 0, 255, 0 ). */ #define COLOR_GREEN RGB( 0x00, 0xFF, 0x00 ) /** \def COLOR_BLUE * \brief Shorthand for RGB( 0, 0, 255 ). */ #define COLOR_BLUE RGB( 0x00, 0x00, 0xFF ) #define COLOR_YELLOW RGB( 0xFF, 0xFF, 0x00 ) #define COLOR_ORANGE RGB( 0xFF, 0x88, 0x00 ) #define COLOR_MAGENTA RGB( 0xFF, 0x00, 0xFF ) #define I2C_ADDR 0x20 #define DHTPIN 9 #define DHTTYPE DHT22 //DHT11, DHT21, DHT22 DHT dht(DHTPIN, DHTTYPE); #define SER void wait_for_input(void) { //#ifdef SER // Serial.println("Wait for input!"); // while(Serial.available() == 0); // while(Serial.available() != 0){ Serial.read(); }; //#endif } void write_word(uint16_t i) { Wire.write(i>>8); //Wire.write(i>>8); //for screens > 255 pixel, otherwise remove Wire.write(i); } void write_pos(uint16_t i) { //Wire.write(i>>8); //for screens > 255 pixel, otherwise remove Wire.write(i); } void setup() { uint16_t x=0, y=0, w=0, h=0; #ifdef SER //init Serial lib Serial.begin(9600); while(!Serial); //wait for serial port to connect - needed for Leonardo only wait_for_input(); Serial.println("go..."); #endif dht.begin(); //init Wire lib Wire.begin(); //get firmware version Serial.print("version: "); Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_VERSION); Wire.endTransmission(); Wire.requestFrom(I2C_ADDR, 4); //request 4 bytes while(Wire.available()) { char c = Wire.read(); #ifdef SER Serial.print(c); } Serial.println(""); //get features Serial.print("features: "); Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_FEATURES); Wire.endTransmission(); Wire.requestFrom(I2C_ADDR, 1); //request 1 bytes while(Wire.available()) { char c = Wire.read(); if(c & FEATURE_LCD){ Serial.print("LCD "); } if(c & FEATURE_TP) { Serial.print("TP "); } if(c & FEATURE_ENC){ Serial.print("ENC "); } if(c & FEATURE_NAV){ Serial.print("NAV "); } if(c & FEATURE_LDR){ Serial.print("LDR "); } } #endif Serial.println(""); //save interface as defaul Serial.println("save interface..."); Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_CTRL); Wire.write(CMD_CTRL_SAVE); Wire.endTransmission(); //get width and height #ifdef SER Serial.print("width/height: "); Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_LCD_WIDTH); Wire.endTransmission(); Wire.requestFrom(I2C_ADDR, 2); //request 2 bytes if(Wire.available()) { x = Wire.read()<<8; x |= Wire.read()<<0; } Serial.print(x, DEC); Serial.print("/"); Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_LCD_HEIGHT); Wire.endTransmission(); Wire.requestFrom(I2C_ADDR, 2); //request 2 bytes if(Wire.available()) #endif #ifdef SER { y = Wire.read()<<8; y |= Wire.read()<<0; } Serial.print(y, DEC); Serial.println(""); //Hintergrundbeleuchtung Serial.println("backlight..."); Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_LCD_LED); Wire.write(100); //0...100 Wire.endTransmission(); //clear screen Serial.println("clear..."); Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_LCD_CLEARBG); Wire.endTransmission(); Wire.requestFrom(I2C_ADDR, 2); Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_LCD_BGCOLOR); //Hintergrundfarbe für die Schrift // Wire.write(COLOR_RED>>8); // Wire.write(COLOR_RED); write_word(COLOR_WHITE); Wire.endTransmission(); Wire.requestFrom(I2C_ADDR, 2); Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_LCD_FGCOLOR); Wire.write(COLOR_GREEN>>8); //Schriftfarbe Wire.write(COLOR_GREEN); Wire.endTransmission(); Wire.requestFrom(I2C_ADDR, 2); // x=90; y=90; h=95; w=95; // Wire.beginTransmission(I2C_ADDR); // Wire.write(CMD_LCD_DRAWLINE); // write_pos(x); // write_pos(y); // write_pos(h); // write_pos(w); // Wire.write(COLOR_BLUE>>8); //Zeichne Linie // Wire.write(COLOR_BLUE); // Wire.endTransmission(); // Wire.requestFrom(I2C_ADDR, 2); #endif SER x=0; y=0; w=128; h=128; Wire.beginTransmission(I2C_ADDR); //Zeichne eine Rechteck Wire.write(CMD_LCD_DRAWRECTFG); //x0, y0, w, h write_pos(x); write_pos(y); write_pos(w); write_pos(h); Wire.write(COLOR_WHITE>>8); Wire.write(COLOR_WHITE); Wire.endTransmission(); x=0; y=0; w=128; h=128; Wire.beginTransmission(I2C_ADDR); //Fülle das Rechteck Wire.write(CMD_LCD_FILLRECT); //x0, y0, w, h write_pos(x); write_pos(y); write_pos(w); write_pos(h); Wire.write(COLOR_WHITE>>8); Wire.write(COLOR_WHITE); Wire.endTransmission(); //draw text //Serial.println("text..."); //x=10; y=10; // Wire.beginTransmission(I2C_ADDR); // Wire.write(CMD_LCD_DRAWTEXTFG); //x0, y0, size, clear, length, text //write_pos(x); //write_pos(y); // Wire.write(1); //size + clear // Wire.write(8); //length ////Wire.write('1'); ////Wire.write('3'); ////Wire.write('5'); // Wire.write("Abwesend"); // Wire.endTransmission(); ////Serial.println("...end"); // //x=10; y=30; // Wire.beginTransmission(I2C_ADDR); // Wire.write(CMD_LCD_DRAWTEXTFG); //x0, y0, size, clear, length, text // write_pos(x); // write_pos(y); // Wire.write(1); //size + clear // Wire.write(13); //length //// Wire.write('1'); //// Wire.write('3'); //// Wire.write('5'); // Wire.write("Gleich wieder"); // Wire.endTransmission(); ////Serial.println("...end"); // //x=10; y=50; // Wire.beginTransmission(I2C_ADDR); // Wire.write(CMD_LCD_DRAWTEXTFG); //x0, y0, size, clear, length, text // write_pos(x); // write_pos(y); // Wire.write(1); //size + clear // Wire.write(2); //length //// Wire.write('1'); //// Wire.write('3'); //// Wire.write('5'); // Wire.write("da"); // Wire.endTransmission(); Serial.println("...end"); } //void myFto2I(float fInVal, uint8_t *iOutVorkomma, uint8_t *iOutNachkomma) //{ // *iOutVorkomma = (uint8_t)fInVal; // // *iOutNachkomma = (fInVal*100 - (int16_t)(*iOutVorkomma*100)); void loop() { float feuchte = dht.readHumidity(); // Luftfeuchte auslesen float temp = dht.readTemperature(); // Temperatur auslesen char strFeuchte[8]; uint8_t vorkomma2, nachkomma2; uint8_t vorkomma, nachkomma; float var_float; float var_float2; var_float=feuchte * 100; var_float2=temp * 100; vorkomma2=(int)temp; nachkomma2=(int)var_float2; nachkomma2=(var_float2 - (vorkomma2*100)); vorkomma=(int)feuchte; nachkomma=(int)var_float; nachkomma=(var_float - (vorkomma*100)); // myFto2I(feuchte, &vorkomma, &nachkomma); uint16_t x=0, y=0, w=0, h=0; //Prüfen ob eine gültige Zahl zurückgegeben wird. Wenn NaN (not a number) zurückgegeben wird, dann Fehler ausgeben. if (isnan(temp) || isnan(feuchte)) { Serial.println("DHT22 konnte nicht ausgelesen werden"); } else { // Hier soll der Schrifzug Luftfeuchte aufs Display geschrieben werden x=10; y=10; Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_LCD_DRAWTEXTFG); //x0, y0, size, clear, length, text write_pos(x); write_pos(y); Wire.write(1); //size _ clear Wire.write(12); //length Wire.write("Luftfeuchte:"); Wire.endTransmission(); x=10; y=30; Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_LCD_DRAWTEXTFG); //x0, y0, size, clear, length, text write_pos(x); write_pos(y); Wire.write(2); //size + clear Wire.write(7); //length sprintf(strFeuchte,"%2d.%02d %%",vorkomma,nachkomma); Wire.write(strFeuchte); Wire.endTransmission(); x=10; y=50; Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_LCD_DRAWTEXTFG); //x0, y0, size, clear, length, text write_pos(x); write_pos(y); Wire.write(1); //size + clear Wire.write(11); //length Wire.write("Temperatur:"); Wire.endTransmission(); x=10; y=70; Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_LCD_DRAWTEXTFG); //x0, y0, size, clear, length, text write_pos(x); write_pos(y); Wire.write(2); //size + clear Wire.write(7); //length sprintf(strFeuchte,"%2d.%02d C",vorkomma2,nachkomma2); Wire.write(strFeuchte); Wire.endTransmission(); Serial.print("Luftfeuchte: "); Serial.print(feuchte); //Serial.print("----"); //Serial.print(strFeuchte); Serial.print(" %\t"); Serial.print("Temperatur: "); Serial.print(temp); Serial.println(" C"); delay(500); } }