OP’s code where it can be seen:
//Librerias
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RotaryEncoder.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7);
//Pines del Encoder(CLK,DT)
RotaryEncoder encoder(A0, A1);
//Definicion Pines
int pinlampara = 2;
int pinmotor = 3;
int pinboton = 4;
//Definicion Variables
//DATOS
int setvelocidad = 0;
unsigned long settiempo;
unsigned long tiempo;
int velocidad = 255;
int progreso = 0;
int tiempotranscurido;
int tiempominutos;
unsigned long time;
int velocidadreal;
//ENCODER
static int pos = 1;
int nuevaposicion = 0;
int selecionado = 0;
int page = 1;
int newposi;
int newposi1;
int posi;
//Caracteres Especiales
uint8_t parametroslogo[8] = {0x00, 0x0E, 0x11, 0x15, 0x11, 0x0E, 0x00, 0x00};
uint8_t velocidadlogo[8] = {0x01, 0x02, 0x04, 0x08, 0x1E, 0x04, 0x08, 0x10};
uint8_t tiempologo[8] = {0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00};
void setup() {
Serial.begin(9600);
newposi = 0;
pinMode(pinlampara, OUTPUT);
pinMode(pinboton, INPUT);
digitalWrite(pinlampara, LOW);
analogWrite(pinmotor, 255);
lcd.setBacklightPin(3, POSITIVE);
lcd.setBacklight(HIGH);
lcd.begin(20, 4);//16,2 (chica)
//Se declaran los caracteres creados
lcd.createChar(0, parametroslogo);//lcd.write((byte)0);
lcd.createChar(1, velocidadlogo);
lcd.createChar(2, tiempologo);
lcd.setCursor(0, 1);
lcd.print(" MODULO CURADO UV ");
lcd.setCursor(7, 3);
lcd.print(" UTEC ");
delay(3000);
lcd.clear();
}
void loop() {
if (page == 1)
{
primerapagina();
}
if (page == 2)
{
segundapagina();
}
if (page == 3)
{
tercerapagina();
}
if (page == 4)
{
cuartapagina();
}
}
void sumartiempo() {
time = millis();//No borrar sino no hay progreso
Serial.print(time);
progreso = map(time, 0, tiempo, 0, 100);
if (progreso != 100 && progreso != 0) {
digitalWrite(pinlampara, HIGH);
analogWrite(pinmotor, velocidad);
}
if (progreso <= 0) {
digitalWrite(pinlampara, LOW);
analogWrite(pinmotor, 255);
progreso = 0;
}
if (digitalRead(pinboton) == LOW) {
settiempo = 0;
progreso = 0;
}
}
void primerapagina() {
lcd.clear();
//Titulo
lcd.setCursor(0, 0);
lcd.print("ESTADO:");
//Tiempo
lcd.setCursor(0, 1);
lcd.write(2);
lcd.setCursor(1, 1);
lcd.print(":");
lcd.setCursor(6, 1);
lcd.print("min");
//Velocidad
lcd.setCursor(0, 2);
lcd.write(1);
lcd.setCursor(1, 2);
lcd.print(":");
lcd.setCursor(6, 2);
lcd.print("%");
//Progreso
lcd.setCursor(0, 3);
lcd.print("Progreso: ");
lcd.setCursor(13, 3);
lcd.print("%");
//Parametros
lcd.setCursor(10, 2);
lcd.write((byte)0);
lcd.setCursor(11, 2);
lcd.print(":");
lcd.setCursor(12, 2);
lcd.print("Click");
while (true)
{
sumartiempo();
if (progreso >= 100) {
digitalWrite(pinlampara, LOW);
analogWrite(pinmotor, 255);
loop();
}
lcd.setCursor(3, 1); lcd.print(settiempo); //Tiempo
lcd.setCursor(3, 2); lcd.print(velocidadreal); //Velocidad
lcd.setCursor(10, 3); lcd.print(progreso); //Progreso
if (digitalRead(pinboton) == LOW)
{
delay(50);
while (digitalRead(pinboton) == LOW);
delay(50);
page = 2;
break;
}
}
}
void segundapagina() {
//Parametros
lcd.clear();
//Modificar Tiempo
lcd.setCursor(1, 0);
lcd.print("Parametros");
//Modificar Tiempo
lcd.setCursor(1, 1);
lcd.print("Tiempo");
//Modificar Velocidad
lcd.setCursor(1, 2);
lcd.print("Velocidad");
//REGRESAR
lcd.setCursor(1, 3);
lcd.print("Regresar");
while (true)
{
leerencoder();
if (digitalRead(pinboton) == LOW)
{
delay(50); while (digitalRead(pinboton) == LOW); delay(50);
if (nuevaposicion == 0) page = 2;
if (nuevaposicion == 1) page = 3;
if (nuevaposicion == 2) page = 4;
if (nuevaposicion == 3) page = 1;
break;
}
}
}
void tercerapagina() {
lcd.clear();
//Parametros
lcd.setCursor(1, 0);
lcd.print("Regresar");
lcd.setCursor(1, 1);
lcd.print("Cambiar");
lcd.setCursor(1, 3);
lcd.print(settiempo);
lcd.setCursor(4, 3);
lcd.print("min");
while (true)
{
leerencoder();
if (digitalRead(pinboton) == LOW)
{
delay(50);
while (digitalRead(pinboton) == LOW); delay(50);
if (nuevaposicion == 0)
{
page = 2;
break;
}
if (nuevaposicion == 1) {
encoder.setPosition(settiempo);
while (true) {
encoder.tick();
settiempo = encoder.getPosition();
if (settiempo > 120) {
encoder.setPosition(120);
settiempo = 120;
}
if (settiempo <= 0) {
encoder.setPosition(0);
settiempo = 0;
}
if (settiempo < 100) {
lcd.setCursor(3, 3);
lcd.print(" ");
}
if (settiempo < 10) {
lcd.setCursor(2, 3);
lcd.print(" ");
}
lcd.setCursor(1, 3);
lcd.print(settiempo);
tiempo = (settiempo * 60000);
if (digitalRead(pinboton) == LOW)
{ delay(50); while (digitalRead(pinboton) == LOW); delay(50);
encoder.setPosition(1);
break;
}
}
}
}
}
}
void cuartapagina() {
lcd.clear();
//Parametros
lcd.setCursor(1, 0);
lcd.print("Regresar");
lcd.setCursor(1, 1);
lcd.print("Cambiar");
lcd.setCursor(1, 3);
lcd.print(velocidadreal);
lcd.setCursor(6, 3);
lcd.print("%");
while (true)
{
leerencoder();
if (digitalRead(pinboton) == LOW)
{
delay(50); while (digitalRead(pinboton) == LOW); delay(50);
if (nuevaposicion == 0)
{
page = 2;
break;
}
if (nuevaposicion == 1) {
encoder.setPosition(setvelocidad);
while (true) {
encoder.tick();
//Rutina para incrementar de 5 en 5;
posi = encoder.getPosition();
if (posi >= 20) {
posi = 20;
}
if (posi < 0) {
posi = 0;
}
setvelocidad = posi;
velocidadreal = posi * 5;
if (velocidadreal < 100) {
lcd.setCursor(3, 3);
lcd.print(" ");
}
if (velocidadreal < 10) {
lcd.setCursor(2, 3);
lcd.print(" ");
}
lcd.setCursor(1, 3);
lcd.print(velocidadreal);
if (digitalRead(pinboton) == LOW)
{
delay(50); while (digitalRead(pinboton) == LOW); delay(50);
encoder.setPosition(1);
break;
}
velocidad = map(velocidadreal, 0, 100, 255, 0);
}
}
}
}
}
void leerencoder() {
encoder.tick();
nuevaposicion = encoder.getPosition();
if (pos != nuevaposicion)
{
//Limite maximo del menu
if (nuevaposicion > 3)
{
encoder.setPosition(3);
nuevaposicion = 3;
}
//Limite minimo del menu
if (nuevaposicion < 0)
{
encoder.setPosition(0);
nuevaposicion = 0;
}
//Actualiza el menu
destaque_selecionado(nuevaposicion);
pos = nuevaposicion;
}
}
void destaque_selecionado(int conta)
{
int posicion = conta;
//Permite borrar el valor anterior del select
if (conta > pos)
{
lcd.setCursor(0, posicion - 1);
lcd.print(" ");
}
//Permite borrar el valor siguiente del select
if (conta < pos)
{
lcd.setCursor(0, posicion + 1);
lcd.print(" ");
}
//Permite hacer mover el select
lcd.setCursor(0, posicion);
lcd.write((byte)0);
}