/**********************************
* LaBuhardillaDelLoco.xyz
* http://bit.ly/2MTrGne
*
**********************************/
#include <LiquidCrystal_I2C.h>
#include <LiquidMenu.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
//ENCODER
#define outputA 9
#define outputB 11
#define sw 10
int aState;
int aLastState;
int SELECT;
int OK;
//LEDS
#define led1 5
#define led2 6
#define led3 7
#define led4 8
int Potenciometro = A0; //Para variar la velocidad del probador
int seleccion = 0;
LiquidLine linea1(1, 0, "AUTOMATICO");
LiquidLine linea2(1, 1, "MANUAL");
//LiquidLine linea3(1, 0, "Led 3");
//LiquidLine linea4(1, 1, "Todos");
LiquidScreen pantalla1(linea1,linea2);
LiquidLine linea1_2(1, 0, "COMENZAR");
LiquidLine linea2_2(1, 1, "ATRAS");
//LiquidLine linea3_2(1, 0, "Atras");
LiquidScreen pantalla2(linea1_2,linea2_2);
LiquidLine linea1_3(1, 0, " ");
LiquidLine linea2_3(1, 1, "PROBANDO...");
//LiquidLine linea3_2(1, 0, "Atras");
LiquidScreen pantalla3(linea1_3,linea2_3);
LiquidLine linea1_4(1, 0, " ");
LiquidLine linea2_4(1, 1, "ATRAS");
//LiquidLine linea3_2(1, 0, "Atras");
LiquidScreen pantalla4(linea1_4,linea2_4);
LiquidMenu menu(lcd,pantalla1,pantalla2,pantalla3,pantalla4);
void setup() {
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(outputA, INPUT_PULLUP);
pinMode(outputB, INPUT_PULLUP);
pinMode(sw,INPUT_PULLUP);
lcd.init();
lcd.begin(16,2);
lcd.backlight();
lcd.print("SELECCIONE MODO:");
delay (1000);
lcd.clear();
menu.init();
linea1.set_focusPosition(Position::LEFT);
linea2.set_focusPosition(Position::LEFT);
// linea3.set_focusPosition(Position::LEFT);
// linea4.set_focusPosition(Position::LEFT);
linea1.attach_function(1, fn_automatico);
linea2.attach_function(1, fn_manual);
//linea3.attach_function(1, fn_led3);
//linea4.attach_function(1, fn_led4);
menu.add_screen(pantalla1);
linea1_2.set_focusPosition(Position::LEFT);
linea2_2.set_focusPosition(Position::LEFT);
//linea3_2.set_focusPosition(Position::LEFT);
linea1_2.attach_function(1, fn_comenzar_1);
linea2_2.attach_function(1, fn_atras);
//linea3_2.attach_function(1, fn_atras);
menu.add_screen(pantalla2);
//linea2_3.set_focusPosition(Position::LEFT);
//linea1_3.attach_function(1, fn_comenzar);
//linea2_3.attach_function(1, fn_atras);
menu.add_screen(pantalla3);
linea2_4.set_focusPosition(Position::LEFT);
//linea1_4.attach_function(1, fn_comenzar);
linea2_4.attach_function(1, fn_atras);
//linea3_2.attach_function(1, fn_atras);
menu.add_screen(pantalla4);
pantalla1.set_displayLineCount(2);
pantalla2.set_displayLineCount(2);
pantalla3.set_displayLineCount(2);
pantalla4.set_displayLineCount(2);
menu.set_focusedLine(0);
menu.update();
}
void loop() {
selectOption();
//En aqui se trata al boton:
SELECT = digitalRead(outputA);
if(SELECT == 0){
delay(200);
if(SELECT == 0){
lcd.clear();
menu.switch_focus(true);
}
}
if(seleccion == 3){
int RPM = 0;
int Tact = 5.182 - (RPM/2750);
int Tdes = 21.364 - (RPM/366.67);
for(int f = 0; f < 100; f++){
RPM = 500;
Tact = 5.182 - (RPM/2750);
Tdes = 21.364 - (RPM/366.67);
digitalWrite(led1,HIGH);
delay(Tact);
digitalWrite(led1, LOW);
delay(Tdes);
lcd.setCursor(0, 0);
lcd.print (" ");
lcd.setCursor(1, 0);
lcd.print(RPM);
lcd.print (" ");
lcd.setCursor(6,0);
lcd.print ("RPM");
}
for(int f = 0; f < 100; f++){
RPM = 1000;
Tact = 5.182 - (RPM/2750);
Tdes = 21.364 - (RPM/366.67);
digitalWrite(led1,HIGH);
delay(Tact);
digitalWrite(led1, LOW);
delay(Tdes);
lcd.setCursor(0, 0);
lcd.print (" ");
lcd.setCursor(1, 0);
lcd.print(RPM);
lcd.print (" ");
lcd.setCursor(6,0);
lcd.print ("RPM");
}
for(int f = 0; f < 100; f++){
RPM = 2000;
Tact = 5.182 - (RPM/2750);
Tdes = 21.364 - (RPM/366.67);
digitalWrite(led1,HIGH);
delay(Tact);
digitalWrite(led1, LOW);
delay(Tdes);
lcd.setCursor(0, 0);
lcd.print (" ");
lcd.setCursor(1, 0);
lcd.print(RPM);
lcd.print (" ");
lcd.setCursor(6,0);
lcd.print ("RPM");
}
for(int f = 0; f < 100; f++){
RPM = 3000;
Tact = 5.182 - (RPM/2750);
Tdes = 21.364 - (RPM/366.67);
digitalWrite(led1,HIGH);
delay(Tact);
digitalWrite(led1, LOW);
delay(Tdes);
lcd.setCursor(0, 0);
lcd.print (" ");
lcd.setCursor(1, 0);
lcd.print(RPM);
lcd.print (" ");
lcd.setCursor(6,0);
lcd.print ("RPM");
}
for(int f = 0; f < 100; f++){
RPM = 4000;
Tact = 5.182 - (RPM/2750);
Tdes = 21.364 - (RPM/366.67);
digitalWrite(led1,HIGH);
delay(Tact);
digitalWrite(led1, LOW);
delay(Tdes);
lcd.setCursor(0, 0);
lcd.print (" ");
lcd.setCursor(1, 0);
lcd.print(RPM);
lcd.print (" ");
lcd.setCursor(6,0);
lcd.print ("RPM");
}
for(int f = 0; f < 100; f++){
RPM = 5000;
Tact = 5.182 - (RPM/2750);
Tdes = 21.364 - (RPM/366.67);
digitalWrite(led1,HIGH);
delay(Tact);
digitalWrite(led1, LOW);
delay(Tdes);
lcd.setCursor(0, 0);
lcd.print (" ");
lcd.setCursor(1, 0);
lcd.print(RPM);
lcd.print (" ");
lcd.setCursor(6,0);
lcd.print ("RPM");
}
for(int f = 0; f < 100; f++){
RPM = 6000;
Tact = 5.182 - (RPM/2750);
Tdes = 21.364 - (RPM/366.67);
digitalWrite(led1,HIGH);
delay(Tact);
digitalWrite(led1, LOW);
delay(Tdes);
lcd.setCursor(0, 0);
lcd.print (" ");
lcd.setCursor(1, 0);
lcd.print(RPM);
lcd.print (" ");
lcd.setCursor(6,0);
lcd.print ("RPM");
}
seleccion = 1;
menu.set_focusedLine(0);
menu.change_screen(2);
}
if(seleccion == 4){
double factor_rpm = 5500/1023;
int RPM = (analogRead(Potenciometro)*factor_rpm) + 500;
double factor_Tact = 1/2750;
double factor_Tdes = 1/366.67;
int Tact = 5.182 - (RPM/2750);
int Tdes = 21.364 - (RPM/366.67);
digitalWrite(led1,HIGH);
delay(Tact);
digitalWrite(led1, LOW);
delay(Tdes);
lcd.setCursor(0, 0);
lcd.print (" ");
lcd.setCursor(1, 0);
lcd.print(RPM);
lcd.print (" ");
lcd.setCursor(6,0);
lcd.print ("RPM");
}
/*if(OK == 0){
delay(200);
if(OK == 0){
menu.switch_focus(false);
}
}
*/
aState = digitalRead(outputA);
if (aState != aLastState){
if (digitalRead(outputB) != aState) {
// menu.switch_focus(false);
} else {
// menu.switch_focus(true);
}
menu.update();
aLastState = aState;
}
}
//Funciones:::::
void selectOption(){
if(digitalRead(sw) == LOW){
menu.call_function(1);
delay(500);
}
}
void fn_automatico(){
menu.change_screen(2);
menu.set_focusedLine(0);
seleccion = 1;
}
void fn_manual(){
menu.change_screen(2);
menu.set_focusedLine(0);
seleccion = 2;
}
void fn_comenzar_1(){
if(seleccion == 1){
menu.set_focusedLine(0);
menu.change_screen(3);
seleccion = 3;
}
if(seleccion == 2){
menu.set_focusedLine(2);
menu.change_screen(4);
seleccion = 4;
}
}
/*
void fn_led3(){
menu.change_screen(2);
menu.set_focusedLine(0);
seleccion = 3;
}
void fn_todos(){
menu.change_screen(2);
menu.set_focusedLine(0);
seleccion = 0;
}
*/
void fn_comenzar(){
switch(seleccion){
case 1:
digitalWrite(led1,HIGH);
delay(analogRead(0));
digitalWrite(led1, LOW);
delay(analogRead(0));
break;
case 2:
digitalWrite(led1,HIGH);
break;
/*case 3:
digitalWrite(led3,HIGH);
break;
case 0:
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,HIGH);
break;
*/
}
}
void fn_off(){
switch(seleccion){
case 1:
digitalWrite(led1,LOW);
break;
case 2:
digitalWrite(led2,LOW);
break;
case 3:
digitalWrite(led3,LOW);
break;
case 0:
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
break;
}
}
void fn_atras(){
if(seleccion == 1 || seleccion == 2){
menu.change_screen(1);
menu.set_focusedLine(0);
seleccion = 0;
}
if(seleccion == 4){
menu.change_screen(2);
menu.set_focusedLine(0);
seleccion = 2;
}
}