Hola de nuevo compañeros. He estado trasteando y con librerias y esta me ha parecido muy facil de usar a la par que util si en tus programas quieres tener un poco de organizacion, pero me surge un problema a la hora de visualizar la informacion de un sensor, y es que solo coge la de ese momento y a mi me gustaria poder visualizarla en tiempo real, creo que para eso deberia ir la lectura en el loop para que la lectura fuese continua, pero solo es una suposicion mia. En donde actualmente realiza la lectura del DHT solo la presenta una vez y si quieres actualizar debes salir y volver a entrar.
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);
#include <DHT.h>
#define DHTPIN 12
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#include <MenuBackend.h>
void menuChangeEvent(MenuChangeEvent changed);
void menuUseEvent(MenuUseEvent used);
/*
This is the structure of the modelled menu
Fecha
Hora y Fecha
Temperatura DHT
Temperatura
Temperatura Max
Temperatura Min
Temperatura BMP
Temperatura
Temperatura Max
Temperatura Min
Humedad Relativa
H.Relativa
H.Relativa Max
H.Relativa Min
Presion
Presion Absoluta
Presion
Presion Max
Presion Min
Presion Relativa
Presion
Presion Max
Presion Min
Iluminacion
Lux
Lux Max
Lux Min
Anemometro
Velocidad Viento
Veleta
Direccion Viento
Pluviometro
Lluvia mm
*/
const int buttonPinLeft = 6; // pin for the Up button
const int buttonPinRight = 7; // pin for the Down button
const int buttonPinEsc = 5; // pin for the Esc button
const int buttonPinEnter = 5; // pin for the Enter button
//this controls the menu backend and the event generation
MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent);
//beneath is list of menu items needed to build the menu
MenuItem Fecha = MenuItem("1. Fecha");
MenuItem FechaHora = MenuItem("1.1 Hora y Fecha");
MenuItem dhtSensor = MenuItem("2. Temperatura DHT");
MenuItem dhtTemp = MenuItem("2.1 Temperatura");
MenuItem dhtTempMax = MenuItem("2.2 Temperatura Max");
MenuItem dhtTempMin = MenuItem("2.3 Temperatura Min");
MenuItem bmpSensor = MenuItem("3. Temperatura BMP");
MenuItem bmpTemp = MenuItem("3.1 Temperatura");
MenuItem bmpTempMax = MenuItem("3.2 Temperatura Max");
MenuItem bmpTempMin = MenuItem("3.3 Temperatura Min");
MenuItem hRelativa = MenuItem("4. Humedad");
MenuItem hRel = MenuItem("4.1 Humedad Relativa");
MenuItem hRelMax = MenuItem("4.2Humedad Max");
MenuItem hRelMin = MenuItem("4.3Humedad Min");
MenuItem menu1Item5 = MenuItem("5. Presion");
MenuItem menu1Item5SubItem1 = MenuItem("5.1 Presion Absoluta");
MenuItem menu1Item5SubItem1Sub1 = MenuItem("5.1.1 Presion Absoluta");
MenuItem menu1Item5SubItem1Sub2 = MenuItem("5.1.2 Presion Absoluta Max");
MenuItem menu1Item5SubItem1Sub3 = MenuItem("5.1.3 Presion Absoluta Min");
MenuItem menu1Item5SubItem2 = MenuItem("5.2 Presion Relativa");
MenuItem menu1Item5SubItem2Sub1 = MenuItem("5.2.1 Presion Relativa");
MenuItem menu1Item5SubItem2Sub2 = MenuItem("5.2.2 Presion Relativa Max");
MenuItem menu1Item5SubItem2Sub3 = MenuItem("5.2.3 Presion Relativa Min");
MenuItem menu1Item6 = MenuItem("6. Iluminacion");
MenuItem menu1Item6SubItem1 = MenuItem("6.1 Lux");
MenuItem menu1Item6SubItem2 = MenuItem("6.2 Lux Max");
MenuItem menu1Item6SubItem3 = MenuItem("6.3 Lux Min");
MenuItem menu1Item7 = MenuItem("7. Anemometro");
MenuItem menu1Item7SubItem1 = MenuItem("7.1 Velocidad Viento");
MenuItem menu1Item8 = MenuItem("8. Veleta");
MenuItem menu1Item8SubItem1 = MenuItem("8.1 Direccion Viento");
MenuItem menu1Item9 = MenuItem("9. Pluviometro");
MenuItem menu1Item9SubItem1 = MenuItem("9.1 mm Lluvia");
//this function builds the menu and connects the correct items together
void menuSetup()
{
Serial.println("Elige la opcion del menu navegando...");
//add the file menu to the menu root
menu.getRoot().add(Fecha);
Fecha.addBefore(menu1Item9);
Fecha.addRight(FechaHora);
FechaHora.addLeft(Fecha);
Fecha.addAfter(dhtSensor);
dhtSensor.addRight(dhtTemp);
dhtTemp.addBefore(dhtTemp); //loop to d400
dhtTemp.addAfter(dhtTempMax);
dhtTempMax.addAfter(dhtTempMin);
dhtTempMin.addAfter(dhtTemp);
dhtSensor.addAfter(bmpSensor);
bmpSensor.addRight(bmpTemp);
bmpTemp.addBefore(bmpTemp);
bmpTemp.addAfter(bmpTempMax);
bmpTempMax.addAfter(bmpTempMin);
bmpTempMin.addAfter(bmpTemp);
bmpSensor.addAfter(hRelativa);
hRelativa.addRight(hRel);
hRel.addBefore(hRel);
hRel.addAfter(hRelMax);
hRelMax.addAfter(hRelMin);
hRelMin.addAfter(hRel);
hRelativa.addAfter(menu1Item5);
menu1Item5.addRight(menu1Item5SubItem1);
menu1Item5SubItem1.addBefore(menu1Item5SubItem1);
menu1Item5SubItem1.addAfter(menu1Item5SubItem2);
menu1Item5SubItem1.addRight(menu1Item5SubItem1Sub1);
menu1Item5SubItem1Sub1.addBefore(menu1Item5SubItem1Sub1);
menu1Item5SubItem1Sub1.addAfter(menu1Item5SubItem1Sub2);
menu1Item5SubItem1Sub2.addAfter(menu1Item5SubItem1Sub3);
menu1Item5SubItem1Sub3.addAfter(menu1Item5SubItem1Sub1);
menu1Item5SubItem2.addRight(menu1Item5SubItem2Sub1);
menu1Item5SubItem2Sub1.addBefore(menu1Item5SubItem2Sub1);
menu1Item5SubItem2Sub1.addAfter(menu1Item5SubItem2Sub2);
menu1Item5SubItem2Sub2.addAfter(menu1Item5SubItem2Sub3);
menu1Item5SubItem2Sub3.addAfter(menu1Item5SubItem2Sub1);
menu1Item5SubItem2.addAfter(menu1Item5SubItem1);
menu1Item5.addAfter(menu1Item6);
menu1Item6.addRight(menu1Item6SubItem1);
menu1Item6SubItem1.addBefore(menu1Item6SubItem1);
menu1Item6SubItem1.addAfter(menu1Item6SubItem2);
menu1Item6SubItem2.addAfter(menu1Item6SubItem3);
menu1Item6SubItem3.addAfter(menu1Item6SubItem1);
menu1Item6.addAfter(menu1Item7);
menu1Item7.addRight(menu1Item7SubItem1);
menu1Item7SubItem1.addLeft(menu1Item7);
menu1Item7.addAfter(menu1Item8);
menu1Item8.addRight(menu1Item8SubItem1);
menu1Item8SubItem1.addLeft(menu1Item8);
menu1Item8.addAfter(menu1Item9);
menu1Item9.addRight(menu1Item9SubItem1);
menu1Item9SubItem1.addLeft(menu1Item9);
menu1Item9.addAfter(Fecha);
}
/*
This is an important function
Here all use events are handled
This is where you define a behaviour for a menu item
*/
void menuUseEvent(MenuUseEvent used)
{
Serial.print("Menu use ");
Serial.println(used.item.getName());
if (used.item.getName() == "1.1 Hora y Fecha")
{
u8g.firstPage();
do
{
u8g.setFont(u8g_font_courB10);
u8g.setPrintPos( 12, 18);
u8g.print("Temperatura DHT");
u8g.setFont(u8g_font_osr18);
u8g.setPrintPos( 20, 64);
u8g.print(dht.readTemperature());//
u8g.setPrintPos(83, 64);
u8g.print((char) 0xb0); //Para obtener por pantalla el simbolo º
u8g.setPrintPos( 95, 64);
u8g.print("C");
} while( u8g.nextPage() );
}
}
/*
This is an important function
Here we get a notification whenever the user changes the menu
That is, when the menu is navigated
*/
void menuChangeEvent(MenuChangeEvent changed)
{
MenuItem newMenuItem=changed.to;
Serial.print("Menu change ");
Serial.print(changed.from.getName());
Serial.print(" ");
Serial.println(changed.to.getName());
if(newMenuItem == "1. Fecha")
{
u8g.firstPage();
do
{
u8g.setFont(u8g_font_osr18);
u8g.setPrintPos( 10, 40);
u8g.print("Fecha");
} while( u8g.nextPage() );
}
}
void setup()
{
Serial.begin(9600);
dht.begin();
pinMode(buttonPinEnter, INPUT_PULLUP);
pinMode(buttonPinEsc, INPUT_PULLUP);
menuSetup();
}
void loop()
{
if (Serial.available()) {
byte read = Serial.read();
switch (read) {
case 'w': menu.moveUp(); break;
case 's': menu.moveDown(); break;
case 'd': menu.moveRight(); break;
case 'a': menu.moveLeft(); break;
case 'e': menu.use(); break;
}
}
}
Para moverse por el menu se usa el puerto serie introducioendo w para ir arriba, s para ir abajo, a para ir atras o salir y d para ir adelante o enter.
He cogido referencias de este video, y veo que es posible, pero en el enlace de abajo donde te lleva al codigo luego busco esa palte de la temperatura y no aparece!! Arduino - LCD menu with different functions - YouTube
Gracias y Saludos
MenuBackend-master.zip (14 KB)
U8glib_Arduino-master.zip (1.08 MB)
DHT.zip (4.15 KB)