//https://github.com/ThingPulse/esp8266-oled-ssd1306
//#include "FireBase32.h"
#include "Wire.h"
#include "SSD1306.h"
#define led 16 // led en placa
#define bot1 13 // led en placa
#define bot2 12 // led en placa
#define bot3 14 // led en placa
#define botselect digitalRead(bot1)
#define botabajo digitalRead(bot3)
#define botarriba digitalRead(bot2)
SSD1306 display(0x3c, 5, 4);
bool pulsado = 0;
unsigned long previousMillis = 0;
const long interval = 600;
int val = 3710;
//int counter = 1;
int creditos = 1251;
byte columna = 0; // variables para pantalla Menu
byte linea = 18;
byte renglon = 0;
byte pos = 1;
byte pag = 0; // pagina comienzo
byte maxPos = 0; // maximas posiciones en cada pagina
byte posMenu = 0;
byte posSerie = 0;
byte lineaMenu = 0;
byte columnaMenu = 0;
byte pagAntes = 0;
bool cambioAlgo = true;
bool accion= false; // bandera para ejecutar una accion seleccionada
bool accionCumplida=false;
byte chipModel = 1; // chip seleccionado
bool leo = true;
bool buscar = true;
bool setColor=false;
byte posColor=0;
byte color=0;
byte posAnt=0;
String CHIP[] = {"0","3710","310","377","3500","3400","c250","c251"};
String COLOR[] = {"BLACK","YELLOW","MAGENTA","CYAN"};
void setup() {
pinMode(led, OUTPUT);
pinMode(bot1, INPUT);
pinMode(bot2, INPUT);
pinMode(bot3, INPUT);
display.init();
display.flipScreenVertically (); // descomentar para la placa 18650
display.clear();
}
void loop() {
botones();
botonSelect();
//if (pag != 0) botonExit(); // BOTON DE EXIT SI NO ES PAG MENU
// direcciono a la pagina seleccionada
if (pag == 1 && cambioAlgo == true ) { // entro siempre a scan para escanear el chip
maxPos = 2;buscar=1;
read();
} else if (pag == 2 && cambioAlgo == true) {
maxPos = 2;
write();
} else if (pag == 3 && cambioAlgo == true) {
maxPos = 8;
mode();
} else if (pag == 4) {
maxPos = 2;
setup_1();
} else if (pag == 5 && cambioAlgo == true) {
maxPos = 1;
info();
} else if (pag == 6 && cambioAlgo == true) {
maxPos = 1;
wifi();
} else if (pag == 0 && cambioAlgo == true) { // PAGINA MENU
maxPos = 6;
menu();
}
//display.clear();
if(pag==0){
int porcentajeBateria=74;
display.setColor(WHITE);
/*if(porcentajeBateria>=45) display.fillRect(2,5,4,8); // 33 %
if(porcentajeBateria>=65) display.fillRect(7,5,4,8); // 66 %
if(porcentajeBateria>=85) display.fillRect(12,5,4,8); // 99 %
*/
display.setColor(BLACK); // PARA BORRAR SOLO LA BATA
display.fillRect(0,3,20,12);
display.setColor(WHITE);
display.fillRect(18,6,2,6); // bata pico
display.drawRect(0,3, 18, 12); // bata
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// display.setColor(BLACK);
display.drawLine(1,13, 7, 7); // rayo
display.drawLine(2,13, 7, 8);
display.drawLine(8,7, 10, 9);
display.drawLine(8,8, 10, 10);
display.drawLine(11,8, 15, 4);
display.drawLine(11,9,16, 4);
cambioAlgo = true;
}
}
if (cambioAlgo == true) {
// display.clear();
display.display(); /////
// display.clear();
cambioAlgo = false;
}
}
void botonExit(){
if (accionCumplida==true) { // solo borro cambios de botones
display.setColor(BLACK);
display.fillRect(0,40, 128, 24);
}
else display.clear();
display.setColor(WHITE);
if (pos == maxPos) display.fillRect(64, 48, 64, 18);
else display.fillRect(0, 48, 64, 18);
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.setFont(ArialMT_Plain_16);
if (pos == maxPos) display.setColor(BLACK);
display.drawString(100, 48, "EXIT");
display.setColor(WHITE);
}
void read() {
botonExit();
display.setColor(WHITE);
display.drawLine(0, 1, 127, 1);
display.drawLine(0, 16, 127, 16);
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.setFont(ArialMT_Plain_16);
display.drawString(64, 0, "READ CHIP");
if (pos == 1) display.setColor(BLACK);
display.drawString(30, 48, "READ");
display.setColor(WHITE);
if (accion==true){
display.drawString(30, 18, "READ" + String(val)); val++;
accion=false; accionCumplida=true;
}
}
void botonSelect(){
if (botselect == LOW && pulsado == 0) { // accion boton Select
delay(50);
if (botselect == LOW){
cambioAlgo=true;
// represento boton accionado ------------------------------
if(pag==0 || pag==3){
if(pag==3 && pos!=maxPos)display.fillRect(73, 21, 53, 28);
else display.fillRect(columna, linea, 62, 16); /////////// POS
display.display();
delay(80);
}//---------------------------------------------------------
if(pag!=0 && pag!=3 ){
if (pos==1)columna=0;
else columna=64;
if(maxPos==1)columna=64;
display.fillRect(columna, 52, 62, 16); /////////// POS
display.display();
delay(80);
}
if (pag == 0 ) { // voy a pagina elegida y guardo pos del menu
columnaMenu = columna;
posMenu = pos;
lineaMenu = linea;
pag = pos;
pos = 1;
pulsado = 1;
accion=false;
}
if (pos != maxPos && pulsado == 0){
accion=true; accionCumplida=false;pulsado = 1;
}
if (pag != 0 && pos == maxPos && pulsado == 0) { // exit al menu
pag = 0; pagAntes = pag;
renglon = 0;
posAnt=0;
accion = false;
accionCumplida = false;
linea = lineaMenu;
pos = posMenu;
columna = columnaMenu; // posicion anterior del menu
pulsado = 1;
leo=true; // para resetear bandera de LEER
}
}//////////////////// fin boton pulsado select
}
if (botselect == HIGH && pulsado == 1) { // HABILITA BOTON SELECT DESPUES DE SOLTAR
delay(500);
if (botselect == HIGH) pulsado = 0;
}
if (pagAntes != pag && pag != 0) { // pos a 1 cuando entra en otra pagina que so sea menu
//if(pag==3){linea=18; columna=0;} // para Pag Model
if(pag==3){
// linea=2+ (chipModel*16);
columna=0;
//accion=true;
pos=chipModel;
/*
if (pos == 4) {
columna = 70;
linea = 18;
}
*/
} // para Pag Model
if(pag!=3) pos = 2;
if (pag == 5 || pag == 6) pos = 1; // pagina info, solo boton de exit
pagAntes = pag;
}
}
void botones() {
if (botarriba == LOW) {
delay(180);
if (botarriba == LOW) {
if (pos < maxPos ) {
if(pag!=3)linea = linea + 16;
/*color*/ if(setColor==false)pos++;
cambioAlgo = true;
}
if (pag==3 && setColor==true && posColor <3)posColor++;
if (pag != 3 && pos == 4 && maxPos != pos) {
columna = 70;
linea = 18;
}
}
}
if (botabajo == LOW) {
delay(180);
if (botabajo == LOW) {
if (pos > 1) {
if(pag!=3)linea = linea - 16;
if(setColor==false) pos--;
cambioAlgo = true;
}
if (pag==3 && setColor==true && posColor >0)posColor--;
if (pag==3 && setColor==false && accionCumplida== true){// si vuelvo desp de seleccionar
pos=chipModel;
accionCumplida=false;
}
if (pag!= 3 && pos == 3) {
columna = 0;
linea = 50; ///////////////////////
}
}
}
}
void wifi(){
display.clear();
botonExit();
display.setFont(ArialMT_Plain_10);
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.drawString(0, 0, "WIFI: " + String(pos));
display.drawString(0, 11, "SSDI: " + String(linea));
display.drawString(0, 23, "SERVER: " + String(val));
display.drawString(0, 35, "CREDITOS: " + String(creditos));
//display.display();
}
void write() {
if (accionCumplida==true) { // solo borro cambios de botones
display.setColor(BLACK);
display.fillRect(0,40, 124, 24);
}
else display.clear();
botonExit();
display.setFont(ArialMT_Plain_16);
display.setTextAlignment(TEXT_ALIGN_LEFT);
// display.drawString(5, 35, "CHIP: " + String(chipModel));
display.drawString(5, 20, "color: " + String(COLOR[color]));
display.drawString(5, 5, "CHIP: " + String(CHIP[chipModel]));
if (pos == 1) display.setColor(BLACK);
display.drawString(5, 48, "WRITE");
display.setColor(WHITE);
if (accion==true){
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_10);
display.drawString(5, 30, "WRITE CHIP: " + String(val));
accion=false; accionCumplida=true;
}
}
void mode() {
if(accion==true){
if(setColor==false && pos<=maxPos){
if(pos<=5){posColor=0;color=0;posAnt=pos;chipModel=pos;
pos=maxPos;accionCumplida=true;}
else chipModel=pos;
accion=false;
}
if(pos>=6 && setColor==false && pos!=maxPos) {setColor=true;accion=false;}
if(setColor==true && accion==true) {posAnt=pos;accionCumplida=true;
pos=maxPos;accion=false;color=posColor;setColor=false;}
// accion=false;
}
if(setColor==false){
display.clear();
display.setColor(WHITE);
columna=0;
if(pos==1){linea=1; renglon = 0;}
if(pos==2){linea=17; renglon = 0;}
if(pos==3){linea=33; renglon = 0;}
if(pos==4){linea=49; renglon=0;}
if(pos==5)renglon=16; // 30
if(pos==6)renglon=32; // 45
if(pos==7){linea=49;renglon=48;}
if(pos==maxPos){columna=70;linea=50;}
display.fillRect(61, 1, 8, 11); // ARRIBA
display.fillRect(61, 52, 8, 11); //ABAJO
display.setColor(BLACK);
if(pos<5 ) display.fillRect(61, 1, 8, 11); // ARRIBA
if(pos==maxPos && posAnt<5 && posAnt!=0) display.fillRect(61, 1, 8, 11); // ARRIBA
// se agrego en BOTONSELET posAnt=0
//if(pos>4 && pos!=maxPos ) display.fillRect(61, 1, 8, 11); // ARRIBA
if(pos>6 && pos!=maxPos) display.fillRect(61, 52, 8, 11); //ABAJO
if(pos==maxPos && posAnt >6 || renglon==48) display.fillRect(61, 52, 8, 11); //ABAJO
display.setColor(WHITE);
display.drawRect(61, 0, 8, 64); // barra posicion
// display.setTextAlignment(TEXT_ALIGN_LEFT);
// if(setColor==false){
//display.fillRect(columna, linea, 62, 15); /////////// POS
// display.setColor(WHITE);
display.fillRect(columna, linea, 59, 16); /////////// POS
display.setFont(ArialMT_Plain_16);
display.setTextAlignment(TEXT_ALIGN_LEFT);
if (pos == 1) display.setColor(BLACK);
display.drawString(0,(0-renglon), "SP3710");
display.setColor(WHITE);
if (pos == 2) display.setColor(BLACK);
display.drawString(0, (16-renglon), "SP310");
display.setColor(WHITE);
if (pos == 3) display.setColor(BLACK);
display.drawString(0, (32-renglon), "SP377");
display.setColor(WHITE);
if (pos == 4) display.setColor(BLACK);
display.drawString(0,(48-renglon), "SP3510");
display.setColor(WHITE);
if (pos == 5) display.setColor(BLACK);
display.drawString(0,(64-renglon), "SP3400");
display.setColor(WHITE);
if (pos == 6) display.setColor(BLACK);
display.drawString(0,(80-renglon), "SPc250");
display.setColor(WHITE);
if (pos == 7) display.setColor(BLACK);
display.drawString(0,(96-renglon), "M c251");
display.setColor(WHITE);
///////////////////////////////////////////////////
display.setTextAlignment(TEXT_ALIGN_RIGHT);
if (pos == maxPos) display.setColor(BLACK);
display.drawString(126, 48, "E X I T");
//display.drawString(110, 48, String(pos));
//display.drawString(126, 48, String(posAnt));
//display.setColor(BLACK);
/////////////////////
//display.fillRect(0, 0,128, 20); /////////// BORRO ENCABEZADO
//if(setColor==false){
display.setFont(ArialMT_Plain_10);
display.setColor(WHITE);
//display.drawLine(70, 0, 127, 0);
// display.drawLine(70, 17, 127, 17);
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.drawString(88, 0, "CHIP");
display.drawString(78, 8, "SELECT");
display.drawRect(72, 19, 54, 30); // CUADRO SELECT
display.setFont(ArialMT_Plain_16);
if(chipModel >= 7) display.drawString(80,18, "M");
else display.drawString(78,18, "SP" );
//display.setTextAlignment(TEXT_ALIGN_LEFT);
//display.fillRect(68,0, 64, 16);
// display.setColor(BLACK);
display.setFont(ArialMT_Plain_16);
byte x = 79; byte y = 32;
display.drawString(x, y, String(CHIP[chipModel]));
//if (chipModel==1)display.drawString(x, y, "3710");
//if (chipModel==2)display.drawString(x+3, 33, "310");
//if (chipModel==3)display.drawString(x+3, 33, "377");
//if (chipModel==4)display.drawString(x, y, "3500");
//if (chipModel==5)display.drawString(x, y, "3400");
//if (chipModel==6)display.drawString(x, y, "c250");
//if (chipModel==7)display.drawString(x, y, "c251");
}
if (setColor == true){ ////////////////// set color ///////
display.setFont(ArialMT_Plain_10);
display.setColor(BLACK);
display.fillRect(71,0, 64, 64); // BORRO
display.setColor(WHITE);
display.drawRect(71, 0, 57, 49); // CUADRO SELECT
if(posColor!=0)display.fillRect(72, 1+(posColor*12), 55, 11); /////////// POS
else display.fillRect(72,1, 55, 11);
if(posColor==0)display.setColor(BLACK);
display.drawString(73, 0, "BLACK");
display.setColor(WHITE);
if(posColor==1)display.setColor(BLACK);
display.drawString(73, 12, "YELLOW");
display.setColor(WHITE);
if(posColor==2)display.setColor(BLACK);
display.drawString(73, 24, "MAGENTA");
display.setColor(WHITE);
if(posColor==3)display.setColor(BLACK);
display.drawString(73, 36, "CYAN");
display.setColor(WHITE);
//display.drawString(72, 51, "CHIP: " + String(CHIP[chipModel]));
//display.drawString(72, 51, String(posColor));
//display.drawString(82, 51, String(pos));
//display.drawString(88, 51, String(setColor));
//display.drawString(95, 51, String(color));
}
}
void setup_1() {
display.clear();
botonExit();
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_16);
}
void info() {
display.clear();
botonExit();
display.setFont(ArialMT_Plain_10);
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.drawString(0, 0, "POSICION: " + String(pos));
display.drawString(0, 11, "LINEA: " + String(linea));
display.drawString(0, 23, "ID CHIP: " + String(val));
display.drawString(0, 35, "CREDITOS: " + String(creditos));
// pos=2;
}
void menu() {
display.clear();
display.setFont(ArialMT_Plain_16);
display.setColor(WHITE);
display.drawLine(0, 1, 127, 1);
display.drawLine(0, 16, 127, 16);
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.drawString(64, 0, "DANNA");
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.fillRect(columna, linea, 62, 16); /////////// POS
if (pos == 1) display.setColor(BLACK);
display.drawString(0, 17, "READ");
display.setColor(WHITE);
if (pos == 2) display.setColor(BLACK);
display.drawString(0, 33, "WRITE");
display.setColor(WHITE);
if (pos == 3) display.setColor(BLACK);
display.drawString(0, 48, "C H I P");
display.setColor(WHITE);
if (pos == 4) display.setColor(BLACK);
display.setTextAlignment(TEXT_ALIGN_RIGHT);
display.drawString(128, 17, "SETUP");
display.setColor(WHITE);
if (pos == 5) display.setColor(BLACK);
display.drawString(128, 33, "INFO");
display.setColor(WHITE);
if (pos == 6) display.setColor(BLACK);
display.drawString(128, 48, "- WIFI -");
display.setColor(WHITE);
// display.display();
}