Mi hai convinto metto tutto il programma , che può essere utile , l ho realizzato con LCDshield della DFROBOTICS , se googlate si vede subito, comunque è un normale timer , dove vengono settati i secondi e i minuti , ancora da rivedere visto che ancora non ho messo i decimali dei minuti , ma tanto non mi serve per tempi cosi lunghi , comunque oltre al problema che ho scritto li sopra c è anche quello che se faccio partire il timer a 2:00 o a 3:00 o a qualsiasi minuto preciso , mi parte a 2:59 e 3:59 , cioè si scorda di togliere un minuto al timer , succede anche se lo faccio partire a qualsiasi tempo , la prima volta che deve scalare il minuto se ne dimentica , dopodichè è tutto ok
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
int i;
int minuti ;
int eminuti ;
int secondi ;
int esecondi ;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int read_LCD_buttons()
{
adc_key_in = analogRead(0);
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 250) return btnUP;
if (adc_key_in < 400) return btnDOWN; // ogni valore dell analog read corrisponde ad un tasto
if (adc_key_in < 600) return btnLEFT; // se non viene premuto nulla il valore è 1023
if (adc_key_in < 900) return btnSELECT;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//________________________________________________________________________________________________________________________________________________________________________
void setup()
{
i =0;
minuti = 0;
eminuti = 0;
secondi = 0;
esecondi =0;
lcd.begin(16, 2);
lcd.setCursor(1,0);
lcd.print("SET THE TIMER!"); //Questa parte scrive Set the timer ! 00:00 sul display
lcd.setCursor(4,1);
lcd.print(eminuti);
lcd.setCursor(5,1);
lcd.print(minuti);
lcd.setCursor(7,1);
lcd.print(":");
lcd.setCursor(10,1);
lcd.print(secondi);
lcd.setCursor(9,1);
lcd.print(esecondi);
Serial.begin ( 9600);
}
//_________________________________________________________________________________________________________________________________________________________________________
//||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
void timer()
{
if (secondi == 0 && esecondi >0)
{
esecondi--;
lcd.setCursor(9,1);
lcd.print(esecondi);
secondi = 9 ;
lcd.setCursor(10,1);
lcd.print(secondi);
delay(999);
}
else if (secondi >0)
{
secondi--;
lcd.setCursor(10,1);
lcd.print(secondi);
delay(999);
}
if (secondi == 0 && esecondi == 0 && minuti > 0)
{
minuti--;
lcd.setCursor(5,1);
lcd.print(minuti);
esecondi = 5;
lcd.setCursor(9,1);
lcd.print(esecondi);
secondi =9;
lcd.setCursor(10,1);
lcd.print(secondi);
delay(999);
}
if ( secondi == 0 && esecondi == 0 && minuti == 0 && eminuti == 0)
{
lcd.clear();
delay(10);
lcd.setCursor(1,0);
lcd.print(" FINE TIMER");
}
}
//||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
void loop()
{
Serial.println (i);
delay(100);
lcd.setCursor(i,1);
lcd_key = read_LCD_buttons();
switch (lcd_key)
{
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ò
case btnRIGHT:
{
i++;
if ( i == 5)
{
lcd.setCursor(12,1);
lcd.print ("MIN");
}
else if ( i == 10)
{
lcd.setCursor(12,1);
lcd.print ("SEC");
}
else
{
lcd.setCursor(12,1);
lcd.print (" ");
}
delay (30);
break;
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ò
//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
case btnLEFT:
{
i--;
if ( i == 5)
{
lcd.setCursor(12,1);
lcd.print ("MIN");
}
else if ( i == 10)
{
lcd.setCursor(12,1);
lcd.print ("SEC");
}
else
{
lcd.setCursor(12,1);
lcd.print (" ");
}
delay (30);
break;
}
//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§
//*************************************************************************************************************************************************************
case btnUP:
{
if (i== 5)
{
lcd.setCursor(i,1);
lcd.print(minuti++);
delay(20);
if (minuti > 9)
{
minuti = 0;
eminuti++;
lcd.setCursor(4,1);
lcd.print(eminuti);
delay(20);
}
}
else if(i==10)
{
lcd.setCursor(i,1);
lcd.print(secondi++);
delay(20);
if (secondi > 9)
{
esecondi++;
secondi = 0;
lcd.setCursor(9,1);
lcd.print(esecondi);
delay(20);
}
}
break;
}
//*************************************************************************************************************************************************************
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
case btnDOWN:
{
if (i==5)
{
lcd.setCursor(i,1);
minuti--;
lcd.print (minuti);
delay(20);
if (minuti<1)
{
eminuti--;
minuti = 9;
lcd.setCursor(4,1);
lcd.print(eminuti);
delay(20);
}
break;
}
else if(i==10)
{
lcd.setCursor(i,1);
secondi--;
lcd.print(secondi);
delay(20);
break;
}
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
case btnSELECT:
{
lcd.setCursor(1,0);
lcd.print("TIMER AVVIATO");
{
return timer();
}
}
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
}
}
Sono partito dal miniprogramma sulla Wiki di DFrobot
http://www.dfrobot.com/wiki/index.php?title=Arduino_LCD_KeyPad_Shield_(SKU:_DFR0009)
00:00
gli eminuti sono il primo zero , i minuti il secondo , gli esecondi il terzo e i secondi il quarto
Trovate il pezzo mancante e avrete tutta la mia gratitudine 