#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);
int tempActual = 40;
int arriba = 31;
int abajo = 35;
int set = 33;
int p; //contador de pagina
int pAnt = 0;
int p1; //contador pagina1
int p2; //contador pagina2
int p3; //contador pagina3
int p4; //contador pagina4
int p6;
void menuIni(); //pagina1
void menuTemp(); //pagina2
void menuDes(); //pagina3
void menuAjustes(); //pagina4
void temp(); //pagina5
void des(); //pagina6
//void ajustes(); //pagina7
void (*pages[])() = { menuIni, menuTemp, menuDes, menuAjustes, temp, des } ; //, ajustes
int stateUp;
int stateDw;
int stateSet;
int stateUpAnt = 0,
stateDwAnt = 0,
stateSetAnt = 0;
void setup() {
u8g.setFont(u8g_font_unifont);
u8g.setColorIndex(1);
p = 0;
p1 = 0;
p2 = 0;
p3 = 0;
p4 = 0;
p6 = 0;
Serial.begin(9600);
}
void loop() {
char buffer[20];
u8g.firstPage();
do {
(*pages[p])();
} while( u8g.nextPage());
if (p != pAnt)
Serial.println(p);
pAnt = p;
}
void moverseMenu(int &cont, int cant){
stateUp = digitalRead(arriba);
stateDw = digitalRead(abajo);
if(stateUp && !stateUpAnt ){
if(cont>0)
cont--;
}
if(stateDw && !stateDwAnt){
if(cont<cant)
cont++;
}
stateUpAnt = stateUp;
stateDwAnt = stateDw;
return cont;
}
void temp(){
stateUp = digitalRead(arriba);
stateDw = digitalRead(abajo);
int textWidth1 = u8g.getStrWidth("Temperatura"); // Obtener la longitud del texto
int textWidth2 = u8g.getStrWidth(String(tempActual).c_str()); // Obtener la longitud del texto
int xPos = (u8g.getWidth() - textWidth1) / 2; // Calcular la posición horizontal centrada
u8g.drawStr(xPos, 30, "Temperatura"); // Imprimir el texto centrado
u8g.drawStr(xPos, 55, String(tempActual).c_str()); // Imprimir el texto centrado
if(digitalRead(set)==HIGH){
p = 1;
delay(20);
}
if (stateUp && !stateUpAnt)
tempActual++;
if (stateDw && !stateDwAnt)
tempActual--;
stateUpAnt = stateUp;
stateDwAnt = stateDw;
return 0;
}
void des(){
stateSet = digitalRead(set);
moverseMenu(p6, 1);
int textWidth1 = u8g.getStrWidth("Activar?"); // Obtener la longitud del texto
int xPos = (u8g.getWidth() - textWidth1) / 2; // Calcular la posición horizontal centrada
u8g.drawStr(xPos, 30, "Activar?"); // Imprimir el texto centrado
if(p6==0){
int textWidth = u8g.getStrWidth("No"); // Obtener la longitud del texto
int xPos = (u8g.getWidth() - textWidth) / 2; // Calcular la posición horizontal centrada
u8g.drawStr(xPos, 55, " ");
u8g.drawStr(xPos, 55, "No"); // Imprimir el texto centrado
if (stateSet && !stateSetAnt)
p = 2;
}else if(p6==1){
int textWidth1 = u8g.getStrWidth("Si"); // Obtener la longitud del texto
int xPos1 = (u8g.getWidth() - textWidth1) / 2; // Calcular la posición horizontal centrada
u8g.drawStr(xPos1, 55, " ");
u8g.drawStr(xPos1, 55, "Si"); // Imprimir el texto centrado
}
stateSetAnt = stateSet;
return 0;
}
void menuAjustes(){
stateSet = digitalRead(set);
moverseMenu(p4, 3);
if(p4==0){
int textWidth = u8g.getStrWidth("Config. Term."); // Obtener la longitud del texto
int xPos = (u8g.getWidth() - textWidth) / 2; // Calcular la posición horizontal centrada
u8g.drawStr(xPos, 50, "Config. Term."); // Imprimir el texto centrado
if (stateSet && !stateSetAnt)
p = 1;
}else if(p4==1){
int textWidth1 = u8g.getStrWidth("Fecha y Hora"); // Obtener la longitud del texto
int xPos1 = (u8g.getWidth() - textWidth1) / 2; // Calcular la posición horizontal centrada
u8g.drawStr(xPos1, 50, "Fecha y Hora"); // Imprimir el texto centrado
if (stateSet && !stateSetAnt)
p = 2;
} else if(p4==2){
int textWidth2 = u8g.getStrWidth("Config. Wi-Fi"); // Obtener la longitud del texto
int xPos2 = (u8g.getWidth() - textWidth2) / 2; // Calcular la posición horizontal centrada
u8g.drawStr(xPos2, 50, "Config. Wi-Fi"); // Imprimir el texto centrado
if (stateSet && !stateSetAnt)
p = 3;
} else if(p4==3){
int textWidth1 = u8g.getStrWidth("Volver"); // Obtener la longitud del texto
int xPos1 = (u8g.getWidth() - textWidth1) / 2; // Calcular la posición horizontal centrada
u8g.drawStr(xPos1, 50, "Volver"); // Imprimir el texto centrado
if (stateSet && !stateSetAnt)
p = 0;
}
stateSetAnt = stateSet;
return 0;
}
void menuDes(){
stateSet = digitalRead(set);
moverseMenu(p3, 1);
if(p3==0){
int textWidth = u8g.getStrWidth("Activar?"); // Obtener la longitud del texto
int xPos = (u8g.getWidth() - textWidth) / 2; // Calcular la posición horizontal centrada
u8g.drawStr(xPos, 50, "Activar?"); // Imprimir el texto centrado
if (stateSet && !stateSetAnt)
p = 5;
} else if(p3==1){
int textWidth1 = u8g.getStrWidth("Volver"); // Obtener la longitud del texto
int xPos1 = (u8g.getWidth() - textWidth1) / 2; // Calcular la posición horizontal centrada
u8g.drawStr(xPos1, 50, "Volver"); // Imprimir el texto centrado
if (stateSet && !stateSetAnt)
p = 0;
}
stateSetAnt = stateSet;
return 0;
}
void menuTemp(){
stateSet = digitalRead(set);
moverseMenu(p2, 1);
if (p2==0){
String txtTemp = "T. Actual: ";
txtTemp.concat(tempActual);
int textWidth = u8g.getStrWidth(String(txtTemp).c_str()); // Obtener la longitud del texto
int xPos = (u8g.getWidth() - textWidth) / 2; // Calcular la posición horizontal centrada
u8g.drawStr(xPos, 50, String(txtTemp).c_str()); // Imprimir el texto centrado
if (stateSet && !stateSetAnt)
p = 4;
} else if(p2==1){
int textWidth1 = u8g.getStrWidth("Volver"); // Obtener la longitud del texto
int xPos1 = (u8g.getWidth() - textWidth1) / 2; // Calcular la posición horizontal centrada
u8g.drawStr(xPos1, 50, "Volver"); // Imprimir el texto centrado
if (stateSet && !stateSetAnt)
p = 0;
}
stateSetAnt = stateSet;
return 0;
}
void menuIni(){
stateSet = digitalRead(set);
moverseMenu(p1, 2);
if(p1==0){
int textWidth = u8g.getStrWidth("MENU1"); // Obtener la longitud del texto
int xPos = (u8g.getWidth() - textWidth) / 2; // Calcular la posición horizontal centrada
u8g.drawStr(xPos, 50, "MENU1"); // Imprimir el texto centrado
if (stateSet && !stateSetAnt)
p = 1;
} else if(p1==1){
int textWidth1 = u8g.getStrWidth("MENU2"); // Obtener la longitud del texto
int xPos1 = (u8g.getWidth() - textWidth1) / 2; // Calcular la posición horizontal centrada
u8g.drawStr(xPos1, 50, "MENU2"); // Imprimir el texto centrado
if (stateSet && !stateSetAnt)
p = 2;
}else if(p1==2){
int textWidth2 = u8g.getStrWidth("MENU3"); // Obtener la longitud del texto
int xPos2 = (u8g.getWidth() - textWidth2) / 2; // Calcular la posición horizontal centrada
u8g.drawStr(xPos2, 50, "MENU3"); // Imprimir el texto centrado
if (stateSet && !stateSetAnt)
p = 3;
}
stateSetAnt = stateSet;
return 0;
}
//https://github.com/olikraus/u8glib/wiki/userreference#begin