Hola, estoy haciendo un proyecto en el que tengo que cambiar el valor de dos alarmas y mostrarlas en un display i2c, y tengo un par de problemas si me podrían ayudar.
el primero es que al probarlo en el simulador tinkercad el botonCambio y funciona perfectamente pero al probarlo en el protoboard no tiene nada de tención y esta bien conectado , el otro problema es que al pulsar el botonMenos se restan los valores una vez hasta que suelte el botón y lo vuelva a tocar pero con el botonMas se suma sin parar aunque en el codigo lo unico que cambia es la funcion de sumar o restar. El codigo es el siguiente
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20,16,2);
#define botonMas 2
#define botonMenos 3
#define botonCambioY 6
#define botonCambio 7
int horaA1=0,minutoA1=0,segundoA1=0;
int horaA2=0,minutoA2=0,segundoA2=0;
int lineaCambio=0;
int modoCambio=0;
bool soltarBoton=false;
void setup()
{
Serial.begin(9600);
lcd.init();
lcd.backlight();
pinMode(botonMas, INPUT_PULLUP);
pinMode(botonMenos, INPUT_PULLUP);
pinMode(botonCambio, INPUT_PULLUP);
pinMode(botonCambioY, INPUT_PULLUP);
}
void loop()
{
if(digitalRead(botonCambioY)==HIGH && digitalRead(botonCambio)==HIGH && digitalRead(botonMas==HIGH) && digitalRead(botonMenos)==HIGH)
{
soltarBoton=false;
}
if(digitalRead(botonCambio)==LOW && soltarBoton==false)
{
lcd.clear();
if(modoCambio==0)
{
modoCambio=1;
}
else if(modoCambio==1)
{
modoCambio=0;
}
lineaCambio=0;
soltarBoton=true;
}
Serial.print(horaA1);
Serial.print(":");
Serial.print(minutoA1);
Serial.print(":");
Serial.print(segundoA1);
Serial.print(" Y:");
Serial.print(lineaCambio);
Serial.print(" M:");
Serial.print(modoCambio);
Serial.print(" boton:");
Serial.println(soltarBoton);
if(modoCambio==0)
{
lcd.setCursor(0,0);
lcd.print("hs : min : sec");
lcd.setCursor(0,1);
lcd.print(horaA1);
lcd.setCursor(3,1);
lcd.print(":");
lcd.setCursor(5,1);
lcd.print(minutoA1);
lcd.setCursor(9,1);
lcd.print(":");
lcd.setCursor(11,1);
lcd.print(segundoA1);
//programacion de los botones
if(digitalRead(botonCambioY)==LOW && soltarBoton==false)
{
lcd.clear();
switch(lineaCambio)
{
case 0:
lineaCambio=1;
break;
case 1:
lineaCambio=2;
break;
case 2:
lineaCambio=0;
break;
default:
Serial.println("como ocurrio esto ._.");
break;
}
soltarBoton=true;
}
//horas
if(digitalRead(botonMas)==LOW && lineaCambio==0 && soltarBoton==false)
{
lcd.clear();
if(horaA1<24)
{
horaA1=horaA1+1;
}
else if(horaA1>=24)
{
horaA1=0;
}
soltarBoton=true;
}
if(digitalRead(botonMenos)==LOW && lineaCambio==0 && soltarBoton==false)
{
lcd.clear();
if(horaA1>0)
{
horaA1=horaA1-1;
}
else if(horaA1<=0)
{
horaA1=24;
}
soltarBoton=true;
}
//minutos
if(digitalRead(botonMas)==LOW && lineaCambio==1 && soltarBoton==false)
{
lcd.clear();
if(minutoA1<60)
{
minutoA1=minutoA1+1;
}
else if(minutoA1>=60)
{
minutoA1=0;
}
soltarBoton=true;
}
if(digitalRead(botonMenos)==LOW && lineaCambio==1 && soltarBoton==false)
{
lcd.clear();
if(minutoA1>0)
{
minutoA1=minutoA1-1;
}
else if(minutoA1<=0)
{
minutoA1=60;
}
soltarBoton=true;
}
//segundos
if(digitalRead(botonMas)==LOW && lineaCambio==2 && soltarBoton==false)
{
lcd.clear();
if(segundoA1<60)
{
segundoA1=segundoA1+1;
}
else if(segundoA1>=60)
{
segundoA1=0;
}
soltarBoton=true;
}
if(digitalRead(botonMenos)==LOW && lineaCambio==2 && soltarBoton==false)
{
lcd.clear();
if(segundoA1>0)
{
segundoA1=segundoA1-1;
}
else if(segundoA1<=0)
{
segundoA1=60;
}
soltarBoton=true;
}
}
else if(modoCambio==1)
{
lcd.setCursor(0,0);
lcd.print("hs : min : sec");
lcd.setCursor(0,1);
lcd.print(horaA2);
lcd.setCursor(3,1);
lcd.print(":");
lcd.setCursor(5,1);
lcd.print(minutoA2);
lcd.setCursor(9,1);
lcd.print(":");
lcd.setCursor(11,1);
lcd.print(segundoA2);
//programacion de los botones
if(digitalRead(botonCambioY)==LOW && soltarBoton==false)
{
lcd.clear();
switch(lineaCambio)
{
case 0:
lineaCambio=1;
break;
case 1:
lineaCambio=2;
break;
case 2:
lineaCambio=0;
break;
default:
Serial.println("como ocurrio esto ._.");
break;
soltarBoton=true;
}
}
//horas
if(digitalRead(botonMas)==LOW && lineaCambio==0 && soltarBoton==false)
{
lcd.clear();
if(horaA2<24)
{
horaA2=horaA2+1;
}
else if(horaA2>=24)
{
horaA2=0;
}
soltarBoton=true;
}
if(digitalRead(botonMenos)==LOW && lineaCambio==0 && soltarBoton==false)
{
lcd.clear();
if(horaA2>0)
{
horaA2=horaA2-1;
}
else if(horaA2<=0)
{
horaA2=24;
}
soltarBoton=true;
}
//minutos
if(digitalRead(botonMas)==LOW && lineaCambio==1 && soltarBoton==false)
{
lcd.clear();
if(minutoA2<60)
{
minutoA2=minutoA2+1;
}
else if(minutoA2>=60)
{
minutoA2=0;
}
soltarBoton=true;
}
if(digitalRead(botonMenos)==LOW && lineaCambio==1 && soltarBoton==false)
{
lcd.clear();
if(minutoA2>0)
{
minutoA2=minutoA2-1;
}
else if(minutoA2<=0)
{
minutoA2=60;
}
soltarBoton=true;
}
//segundos
if(digitalRead(botonMas)==LOW && lineaCambio==2 && soltarBoton==false)
{
lcd.clear();
if(segundoA2<60)
{
segundoA2=segundoA2+1;
}
else if(segundoA2>=60)
{
segundoA2=0;
}
soltarBoton=true;
}
if(digitalRead(botonMenos)==LOW && lineaCambio==2 && soltarBoton==false)
{
lcd.clear();
if(segundoA2>0)
{
segundoA2=segundoA2-1;
}
else if(segundoA2<=0)
{
segundoA2=60;
}
soltarBoton=true;
}
}
}