/*********************************************************************
Sistema de Control para Filtro de Limpieza AgroIndustrial
Test de Teclads OK
Test Oled SH1106 OK
Teste de Menu : ....
*********************************************************************/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
//#include <Adafruit_SH110X.h>
#include <Adafruit_SSD1306.h>
/* Uncomment the initialize the I2C address , uncomment only one, If you get a totally blank screen try the other*/
#define i2c_Address 0x3d //initialize with the I2C addr 0x3C Typically eBay OLED's
//#define i2c_Address 0x3d //initialize with the I2C addr 0x3D Typically Adafruit OLED's
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // QT-PY / XIAO
// Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define DEBOUNCE_BUTTONS_mS 100 // Tiempo de eliminacion de rebotes mecanicos de contactos electricos de botones
/*
static const unsigned char PROGMEM logo16_glcd_bmp[] =
{ B00000000, B11000000,
B00000001, B11000000,
B00000001, B11000000,
B00000011, B11100000,
B11110011, B11100000,
B11111110, B11111000,
B01111110, B11111111,
B00110011, B10011111,
B00011111, B11111100,
B00001101, B01110000,
B00011011, B10100000,
B00111111, B11100000,
B00111111, B11110000,
B01111100, B11110000,
B01110000, B01110000,
B00000000, B00110000
};
*/
/*
void setup() {
Serial.begin(9600);
// Show image buffer on the display hardware.
// Since the buffer is intialized with an Adafruit splashscreen
// internally, this will display the splashscreen.
delay(250); // wait for the OLED to power up
display.begin(i2c_Address, true); // Address 0x3C default
//display.setContrast (0); // dim display
display.display();
delay(2000);
// Clear the buffer.
display.clearDisplay();
// miniature bitmap display
display.drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1);
display.display();
delay(1);
// invert the display
display.invertDisplay(true);
delay(1000);
display.invertDisplay(false);
delay(1000);
display.clearDisplay();
}
*/
/*
void loop() {
}
*/
// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
// Pines para botones (ejemplo con botones simples)
#define bt_r 4 // boton DERECHA
#define bt_l 5 // boton IZQUIERDA
#define bt_e 6 // boton ENTER enter
#define bt_b 7 // boton BACK
#define menu_max 4 //número máximo de menus existentes
// const int buttonUpPin = 15; // se cambian pines
// const int buttonDownPin = 2;
// const int buttonSelectPin = 0;
// const int buttonBackPin = 4;
// =============================================================================================================
// --- Prototipo de Subrutinas de Servicios de Funciones ---
void keyboard();
void menu1();
void menu2();
void menu3();
void menu4();
// =============================================================================================================
// --- Variables de ambito Global al Sistema ---
int menu_num = 1, sub_menu = 1;
// =============================================================================================================
// --- Configuraciones Iniciales ---
void setup()
{
Serial.begin(115200);
delay(250); // wait for the OLED to power up
display.begin(i2c_Address, true); // Address 0x3C default inicializacion Pantalla OLED
// primera pantalla visualizada
display.display();
delay(2000);
//if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
// Serial.println(F("SSD1306 allocation failed"));
// for(;;); // Don't proceed, loop forever
// }
display.clearDisplay(); // limpieza total de buffer de pantalla
display.setTextSize(1);
// seteo de Fondo de Back Light en Blanco todo prendido
display.setTextColor(SSD1306_WHITE);
display.display();
pinMode(bt_r, INPUT_PULLUP); // configuracion de Modo de Pines Digitales de Entrada con Pull Ups
pinMode(bt_l, INPUT_PULLUP);
pinMode(bt_e, INPUT_PULLUP);
pinMode(bt_b, INPUT_PULLUP);
}
void loop()
{
keyboard();
switch(menu_num)
{
case 1: menu1(); break;
case 2: menu2(); break;
case 3: menu3(); break;
case 4: menu4(); break;
} //end switch
}
// =============================================================================================================
// --- Desarrollo de Subrutinas de Funciones ---
void keyboard()
{
// if(!digitalRead(bt_r) )
if(!digitalRead(bt_r) && sub_menu == 1)
{
delay(300); // tiempo de eliminacion de rebotes de tecla transicion de contactos
if(menu_num <= menu_max) menu_num += 1;
} //end bt_r
if(!digitalRead(bt_l) && sub_menu == 1)
{
delay(300); // tiempo de eliminacion de rebotes de tecla transicion de contactos
if(menu_num > 0) menu_num -= 1;
} //end bt_l
if(!digitalRead(bt_e))
{
delay(300); // tiempo de eliminacion de rebotes de tecla transicion de contactos
if(sub_menu <= 2) sub_menu += 1;
} //end bt_e
if(!digitalRead(bt_b))
{
delay(300); // tiempo de eliminacion de rebotes de tecla transicion de contactos
if(sub_menu > 0) sub_menu -= 1;
} //end bt_b
} //end keyboard
void menu1()
{
switch(sub_menu)
{
case 1:
// ** $ Migrara a OLED ESP32 $ **
// lcd.setCursor(0,0);
// lcd.print(" Voltimetro >");
// lcd.setCursor(0,1);
// lcd.print(" ");
display.clearDisplay();
display.setTextSize(1);
display.setTextColor( SSD1306_WHITE );
display.setCursor(4, 4);
//display.println("123456789A");
display.println("SICLO MARCHA");
display.println(" 1.1 ");
//display.println("123456789A");
display.setCursor(0, 44);
display.println(" 20 SEGUNDOS ");
display.display();
//delay(3000);
break;
case 2:
// lcd.setCursor(0,0);
// lcd.print(" Voltimetro ");
// lcd.setCursor(0,1);
// lcd.print(" 10.0 Volts ");
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(4, 4);
//display.println("123456789A");
display.println("SICLO PARAD");
display.println(" 1.2 ");
//display.println("123456789A");
display.setCursor(0, 44);
display.println(" 10 MIN ");
display.display();
//delay(3000);
break;
}
} //end menu1
void menu2()
{
switch(sub_menu)
{
case 1:
// lcd.setCursor(0,0);
// lcd.print("< Amperimetro >");
// lcd.setCursor(0,1);
// lcd.print(" ");
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(4, 4);
//display. ("X23456789A");
display.println("MODO MANUAL");
display.println(" ACTIVADO ");
//display.println("123456789A");
display.setCursor(0, 44);
display.println(" 2.1 ");
display.display();
//delay(3000);
break;
case 2:
// lcd.setCursor(0,0);
// lcd.print(" Amperimetro ");
// lcd.setCursor(0,1);
// lcd.print(" 1.5 Amps ");
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(4, 4);
//display. ("X23456789A");
display.println("AUTOMATICO");
display.println(" ACTIVADO ");
//display.println("123456789A");
display.setCursor(0, 44);
display.println(" 2.2 ");
display.display();
//delay(3000);
break;
}
} //end menu2
void menu3()
{
switch(sub_menu)
{
case 1:
//lcd.setCursor(0,0);
//lcd.print("< Ohmimetro >");
//lcd.setCursor(0,1);
//lcd.print(" ");
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(4, 4);
//display. ("X23456789A");
display.println("MODO REMOTO");
display.println(" ACTIVADO ");
//display.println("123456789A");
display.setCursor(0, 44);
display.println(" 3.1 ");
display.display();
//delay(3000);
break;
case 2:
// lcd.setCursor(0,0);
// lcd.print(" Ohmimetro ");
// lcd.setCursor(0,1);
// lcd.print(" 100 Ohms ");
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(4, 4);
//display. ("X23456789A");
display.println("MODO REMOTO");
display.println("DESACTIVADO");
//display.println("123456789A");
display.setCursor(0, 44);
display.println(" 3.2 ");
display.display();
//delay(3000);
break;
}
} //end menu3
void menu4()
{
switch(sub_menu)
{
case 1:
// lcd.setCursor(0,0);
// lcd.print("< Wattimetro ");
// lcd.setCursor(0,1);
//lcd.print(" ");
display.clearDisplay();
display.setTextSize(1);
display.setTextColor( SSD1306_WHITE );
display.setCursor(4, 4);
//display. ("X23456789A");
display.println("BOMBA AGUA");
display.println(" ACTIVADO ");
//display.println("123456789A");
display.setCursor(0, 44);
display.println(" 4.1 ");
display.display();
//delay(3000);
break;
case 2:
// lcd.setCursor(0,0);
// lcd.print(" Wattimetro ");
// lcd.setCursor(0,1);
// lcd.print(" 55 Watts ");
display.clearDisplay();
display.setTextSize(1);
display.setTextColor( SSD1306_WHITE );
display.setCursor(4, 4);
//display. ("X23456789A");
display.println("BOMBA AGUA");
display.println("DESACTIVADO");
//display.println("123456789A");
display.setCursor(0, 44);
display.println(" 4.2 ");
display.display();
//delay(3000);
break;
}
} //end menu4