soy nuevo en esto del arduino y no puedo hacer que los botones del shield ejecuten las operaciones, estoy tratando de hacer un reloj, pero cuando oprimo el boton select aparece el cursor en minutos no en horas despues de varias pulsaciones se pone en horas, pero no puedo incrementar ni decrementar ni las horas ni los minutos, alguien que me pueda ayudar? el codigo es el siguiente, es sobre un arduino uno y el shield un itead
#include <TimerOne.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int horas=0;
int minutos=0;
volatile int segundos=0;
int modo=0;
int truco=0;
int lcd_key = 0; //toma el valor del boton que se trate
int adc_key_in = 0;
int ajuste = 0; //variable auxiliar para la lectura de los botones
#define btnRight 0 //boton minutos
#define btnLeft 1 //boton horas
#define btnUP 2 //boton dia
#define btnDown 3 //diasemana
#define btnSelect 4 //boton seleccion
#define btnNONE 5
const int N=3; // las posibles combinaciones para cambiar entre horas y minutos
char texto[10];
volatile boolean actualizar = true;
int read_LCD_buttons()
{
adc_key_in=analogRead(0); //LEEMOS A0
if (adc_key_in < 50) return btnRight;
if (adc_key_in < 250) return btnUP;
if (adc_key_in < 450) return btnDown;
if (adc_key_in < 650) return btnLeft;
if (adc_key_in < 850) return btnSelect;
if (adc_key_in > 900) return btnNONE;
return btnNONE;
}
void setup(){
lcd.begin(16,2);
lcd.clear();
Timer1.initialize(1000000);
Timer1.attachInterrupt(manejoreloj);
}
void manejoreloj(){
segundos++;
actualizar=true;
}
void corrijehoras(){
minutos+= segundos/60;
segundos = segundos % 60;
horas+= minutos/60;
minutos = minutos % 60;
horas = horas % 24;
}
void incrementarhoras(){
horas++;
horas = horas % 24;
actualizar = true;
}
void decrementarhoras(){
horas--;
if (horas<0){
horas = 23;
actualizar = true;
}
}
void incrementarminutos(){
minutos++;
minutos = minutos % 60;
actualizar = true;
}
void decrementarminutos(){
minutos--;
if (minutos<0){
minutos = 59;
actualizar = true;
}
}
void fijarCursorModo(){
switch(modo){
case 0:
lcd.noBlink();
break;
case 1:
lcd.setCursor(0, 0);
lcd.blink();
ajuste = 1;
break;
case 2:
lcd.setCursor(3, 0);
lcd.blink();
ajuste = 2;
break;
}
}
void loop(){
lcd_key = read_LCD_buttons();
switch(lcd_key)
{ //para modificar las horas
case btnSelect:
{
modo++; //incrementa las pulsaciones
modo = modo % N; //numero de pulsaciones en funcion de las variables a cambiar, horas, minutos y alarma
fijarCursorModo();
}
break;
case btnUP:
if (ajuste == 1)
{
incrementarhoras();
while(modo == 1);
break;
if (ajuste == 2)
{
incrementarminutos();
while(modo == 1);
}
break;
}
case btnDown:{
if (ajuste == 1){
decrementarhoras();
while(ajuste == 1);
}
break;
if (ajuste == 2){
decrementarminutos();
while(ajuste == 2);
break;
}
}
}
if(actualizar==true){
corrijehoras();
lcd.clear();
lcd.setCursor(0,0);
lcd.noBlink();
sprintf(texto, "%02d:%02d:%02d", horas, minutos, segundos); //para dar formato
lcd.print(texto);
actualizar = false;
fijarCursorModo();
}
}