Programación

Hola, mi consulta es la siguiente, soy nuevo en el tema, estoy haciendo un ciclador, necesito habilitar una salida en ciclos largos, algunos de 20 minutos y otros hasta 8 horas, hasta el momento usaba la función de delay(); que esta en milisegundo, pero ahora como la espera son de varios minutos y hasta horas, ¿es conveniente que use esta función o que puedo hacer?.
Ejemplo de lo que necesito hacer, prender una lampar por 8 horas, luego que permanezca prendida por 8 horas y se vuelva apagar por 8 horas ... y así.
gracias.

Ve a Documentación => Indice de temas tutoriales => millis()

Tienes muchos tutoriales para aprender a usar la función, medir o controlar cosas con tiempos.

Te podría funcionar con un “reloj”, aquí se hace uso de la librería TimerOne, la puedes agregar en Programa > Incluir Librería > Administrar Bibliotecas…, en la búsqueda escribes timerone y te aparece.
La librería te permite crear una interrupción cada que pasen los microsegundos que se indiquen en la inicialización, en este caso cada 1000000uS ó 1seg y mediante la función que ejecuta cada que sucede la interrupción se incrementa la variable segundo y si pasan 60 segundos incrementa la de minutos, la otra de horas no es necesaria incrementarla en la interrupción.

Espero te sirva, saludos.


#include <TimerOne.h>

unsigned short segundos=0;
unsigned short minutos=0;
unsigned short horas=12;
unsigned short bandera=0;

unsigned short anchoPulso=100;

void setup(void)
{
 Timer1.initialize(1000000); //uS
 Timer1.attachInterrupt(intSegundo);
 Serial.begin(9600);
}

void intSegundo(void)
{
 bandera=1;
 segundos++;
 if (segundos == 60){
   segundos=0;
   minutos++;
 }
}

void loop(void)
{ 
 if (minutos == 60){
   minutos=0;
   horas++;
  }
 if (horas==13){
   horas=1;
  }
 
 if (bandera == 1){
 Serial.print(horas);  
 Serial.print(":");
 Serial.print(minutos);  
 Serial.print(":");
 Serial.println(segundos);
 bandera=0;
 }
 
}