Olá, Edson:
Caso ainda não tenha resolvido seu problema, aí vai uma sugestão, baseada em seu próprio código:
/**
Sugiro que:
1. Divida o código em funções. Fica mais fácil de entender e depurar.
Função Clock(): Verifica se está na hora de atualizar o cronômetro ( copiei o que você já tinha feito ).
Função lcdPrintTime(): Mostra o tempo no LCD ( é uma função auxiliar da função lcdPrintShift )
Função lcdPrintShift(): desloca as informações de tempo no LCD
2. Use arrays para as informações, pois isto facilita a movimentação de valores e a mostra no LCD.
O setup() pode ficar como está.
As variáveis devem ser modificadas para:
int Horas[4], Minutos[4], Segundos[4], Decimais[4] ; // Horas[0] ... Decimais[0] é o cronômetro
O índice 0 corresponde ao cronômetro ( Horas[0] ... Decimais[0] )
O índice 1 corresponde ao tempo a mostrar na linha 1 do LCD ( Horas[1] ... Decimais[1] )
O índice 2 corresponde ao tempo a mostrar na linha 2 do LCD ( Horas[2] ... Decimais[2] )
O índice 3 corresponde ao tempo a mostrar na linha 3 do LCD ( Horas[3] ... Decimais[3] )
No main() faça o seguinte:
- Chame Clock()
- Verifique os botões
- Se for para zerar o cronômetro, faça
Horas[ 0 ] = Minutos[ 0 ] = Segundos[ 0 ] = Decimais[ 0 ] = 0 ;
lcd.clear();
- Se for Pausa/Play, chame lcdPrintShift()
Sugestões das rotinas seguem abaixo
**/
void Clock( void )
{
Milisegundos[ 0 ] = millis();
if ( Milisegundos[ 0 ] % 100 == 0 )
{
//Entrar apenas se tiver passado o décimo de segundo
Decimais[ 0 ]++;
if ( Decimais[ 0 ] == 10 )
{
//Quando passou 10 décimos de segundo, conta um segundo
Decimais[ 0 ] = 0;
Segundos[ 0 ]++;
}
if ( Segundos[ 0 ] == 60 )
{
// Após 60 Segundos, conta um minuto
Segundos[ 0 ] = 0;
Minutos[ 0 ]++;
}
if ( Minutos[ 0 ] == 60 )
{
// Depois de 60 Minutos, conta uma hora
Minutos[ 0 ] = 0;
Horas[ 0 ]++;
}
}
}
void lcdPrintTime( int lcdLineParam )
{
if ( Horas[ lcdLineParam ] > 9 ) lcd.print( "0" ) ;
lcd.print( Horas[ lcdLineParam ] ) ;
lcd.print( ":" ) ;
if ( Minutos[ lcdLineParam ] > 9 ) lcd.print( "0" ) ;
lcd.print( Minutos[ lcdLineParam ] ) ;
lcd.print( ":" ) ;
if ( Segundos[ lcdLineParam ] > 9 ) lcd.print( "0" ) ;
lcd.print( Segundos[ lcdLineParam ] ) ;
lcd.print( ":" ) ;
if ( Decimais[ lcdLineParam ] > 9 ) lcd.print( "0" ) ;
lcd.print( Decimais[ lcdLineParam ] ) ;
}
void lcdPrintShift( void )
{
for( int i=3; i>0. i-- )
{
Horas[ i ] = Horas[ i-1 ] ;
Minutos[ i ] = Minutos[ i-1 ] ;
Segundos[ i ] = Segundos[ i-1 ] ;
Decimais[ i ] = Decimais[ i-1 ] ;
lcd.setCursor( 0, i ) ;
lcd.PrintTime( i ) ;
}
}