/****************************************************************
* Programa ejemplo para el control de una pantalla JLX12864G.
* Mide temperatura y humedad con sensor DHT22.
*
* Placa Arduino: ARDUINO NANO
* Arduino IDE con Linux Ubuntu
*
* Por: Daniel Schmidt.
* ***************************************************************/
#include "U8glib.h"
#include <DHT.h>
#include <DHT_U.h>
#include <avr/wdt.h>
U8GLIB_NHD_C12864 u8g(19, 18, 8, 10, 9);// Arduino NANO PB0, PB1, PB2, A5 (SCL) A4 (SDA)
/*---------------------------------------------------------------------------
| JLX12864G-086 (Graphic LCD 128x64) |
|---------------------------------------------------------------------------|
| Pin Connect : |
| CS : 8 VDD : 3v3 |
| RST : 9 VSS : GND |
| RS : 10 LEDA : 5v |
| SPI: SDA : 11 |
| SPI: SCK : 13 |
---------------------------------------------------------------------------*/
#define DHTTYPE DHT22 // Tipo de sensor
const int DHTPin = 2; // Pin del sensor (PD2_INT0)
DHT dht(DHTPin, DHTTYPE); // Instancia del sensor
// Variables del programa
static char Temperatura[5]="";
static char Humedad[5]="";
void Mostrar(void) {
wdt_reset(); // Borra el contador del perro guardián
u8g.setFont(u8g_font_10x20r);
u8g.drawStr( 7, 15, "Temperatura");
u8g.setFont(u8g_font_8x13r);
u8g.drawStr( 16, 58, "Humedad ");
u8g.drawHLine(0,0, 128); // Linea horizontal superior
u8g.drawHLine(0,63, 128); // Linea horizontal inferior
u8g.drawVLine(0, 1, 64); // Linea vertical izquierda
u8g.drawVLine(127, 1, 64); // Linea vertical derecha
u8g.setFont(u8g_font_osb21);
u8g.drawStr( 40, 43, Temperatura);
u8g.setFont(u8g_font_8x13r);
u8g.drawStr( 75, 58, Humedad);
u8g.setFont(u8g_font_8x13r);
u8g.drawStr( 110, 58, "%");
}
void setup(void) {
u8g.setContrast(0); // Configura el contraste
u8g.setRot180(); // Rota la pantalla (si fuera necesario)
dht.begin(); // Inicia la Electrónica del sensor
wdt_disable();
wdt_enable(WDTO_8S);// Ajusta el perro guardián a 8 segundos
}
void loop(void) {
u8g.firstPage(); // Muestra la pagina principal
do {
Mostrar();
}
while( u8g.nextPage() );
Medir(); // Obtiene datos del sensor
delay(3000);
wdt_reset(); // Borra el contador del WD
}
void Medir(){
wdt_reset(); // Borra el contador del WD
float t = dht.readTemperature(); // Lee sensor temperatura
float h = dht.readHumidity(); // Lee sensor humedad
if (isnan(h) || isnan(t)) { // Verifica si error de lectura
Serial.println("ERROR!");
}
else{ // No hay error, procesa los datos
dtostrf(t, 4, 1, Temperatura); // Procesa la temperatura
dtostrf(h, 4, 1, Humedad); // Procesa la humedad
}
}