Programação (não conta os dias )

Não sei se a programação esta correta, no LCD lê do o dia 0 para o dia 1 mas não passa disso queria que constate ate 21 ou 23 dias
mas não passa do dia 1 para frente. Pus um servo motor só da na primeira meia hora e roda 180º passa mais meia hora e roda 180º mas também não passa dai para frente queria que contasse sempre os dias e que o motor roda-se sempre em meia meia hora .

#include <Servo.h>  
#include <LiquidCrystal.h>
Servo servobase;  
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  
int min = 0;
int hora = 0;
int dia=0;
int cont;
//int pos = 180;

void setup()
{ 
lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2(Colunas x Linhas)
/*lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print("Galinha"); //Escreve no LCD "Olá Garagista!"
lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD
lcd.print("Mario");*/
servobase.attach(8);
servobase.write(0);
}

void loop()
{
  
for(int i = 0; i <= 59; i++)
{
  delay(1000);
  
  
  
  /*if((i>=30)&&(i<=59)){
       servobase.write(180);}
  else {
       servobase.write(0);
  }*/
  
  
  if(i==59){
    min=min+1;
    //for(int i = 0; i > pos; i++){
       /*servobase.write(180);
       delay(10000); 
       servobase.write(0);*/
    //}   
  }
   
  if((min>=30)&&(min<=59)){
       servobase.write(180);}
  else {
       servobase.write(0);
  }
  
    if(min==59)
     hora=hora+1;
        
  if(hora==24)
     dia=dia+1;
    //servobase.write(60);
    
lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print("Galinha"); //Escreve no LCD "Galinha"
lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD
lcd.print("Codornis");
lcd.setCursor(10, 1);
lcd.print("Dia");
lcd.setCursor(14, 1);
lcd.print(dia);

 //lcd.print("1minuto"); 
 //lcd.clear();
 
}
}

Engraçado... o teu programa nunca reinicia os minutos e dias e horas do zero... Não achas isso estranho?

O que se passa quando a variável min passa para 60? E para 61... e quando a variável hora passar para 25? Que acontece??

E o que acontece quando a variável dia passar para 32?

O que vai acontecer no teu código é quando chegar aos min 59 ele aumenta na hora (ok certo) mas os mins vao continuar a ser 60, 61, 62, 63.... e por ai fora (obvio que tens q reiniciar os minutos apos cada volta - se não o if min == 59 nunca mais vai acontecer, logo as horas nunca mais vão aumentar)
(o mesmo acontece para as horas.

if(min==59){
min==0;
hora=hora+1;
}

if(hora==24){
hora = 0;
dia=dia+1;
}

Boas amigo.

Há sempre uma solução mais cómoda, que nao necessita "empatar" o processador.

a funçao millis() retorna o numero de milissegundos desde que o arduino foi ligado, e o seu alcance antes de voltar va zero é de aproximadamente 42 dias se na memória não me falha.

Não esquecendo que o valor é do tipo inteiro de 32 bits (unsigned long).

É só ler o valor uma vez, e comparar o tempo decorrido entre o actual e o lido da 1a vez :slight_smile:

dividir por 1000, dá segundos, é só fazer a converão

Enquanto isso o prrocessador fica livre para fazer outras operações :slight_smile:

Espero ter ajudado.