Tengo dos problemas en un selector de alarmas

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;
  }
  }
  
}

:warning:

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español .

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.