de varios ejemplos de creado este codigo para usarlo como un temporizador , usando la libreria timerOne, mi pregunta seria ?? lo he probado con tiempo pequeños cada 1 minuto activa rele y al 1y 5 eg apague, y se resetee a cero, pero el uso que quiero es q cada 12 hora haga lo mismo active dure 5 seg y apaga y asi sucesivamente
Tengo mis misma pregunta
si el arduino se deseneregiza despues de haber empezado el contador , continua donde quedo o desde cero ,
se alaragaria el tiempo fijado
el tema del desboramiento en arduino
o que me recomendarian para hacer esta funcion , se podra crear para no usar rtc
#define LED 13 // LED
#include <TimerOne.h>
//Variable para la interrupción
volatile long int Time = 0;
volatile long int ONTime = 30; // 43200; // 12 HORAS
volatile long int OFFTime = 35; // 43205; // 12 + 5 seg
//volatile unsigned int Time = 0;
void setup()
{
Serial.begin(9600);
Timer1.initialize(1000000); //Configura el TIMER en 1 Segundo
Timer1.attachInterrupt(Temporizador) ; //Configura la interrupción del Timer 1
}
void loop() {
// put your main code here, to run repeatedly:
}
void Temporizador(void) //Función de la Interrupción cuando se ejecuta el TIMER
{
Time++; //Incremento
if (Time == ONTime) {
digitalWrite(LED, HIGH);
// Time = 0;
}
if (Time == OFFTime ) {
digitalWrite(LED, LOW);
Time = 0; //Resetea el contador
}
Serial.print("\n");
Serial.print("\t");
Serial.print(Time);
}
Si arduino se desenergiza, lo que ocurre es que todo comienza de nuevo, asi que ya tienes tu respuesta.
En este caso usado en setup() eso se ejecuta una sola vez, ojo con el detalle aunque supongo que lo tienes claro.
El otro detalle es que timerOne usa microsegundos y tmb usa unsigned long o sea
maximo posible es 2^32 = 4.294.967.296 useg = 4294.9 segundos para 12 hs tendras problemas no?
Para algo tan largo que mejor que usar un simple millis() tampoco lo que haces es tan complejo.
Mira los tutoriales sobre millis() en documentación.
Ahora, el otro tema, que pasa cuando se corte la alimentación? Bueno, tienes dos caminos.
Armas un sistema de backup o una UPS o SAI como le llamen en tu pais y permites que el arduino siga trabajando. La cuestion es que controlas, y si tendras energía para hacerlo cuando no haya justamente energía y dependas de la batería.
la otra opcion es detectar que te quedas sin energia, almacenar el dato del tiempo ON o OFF en EEPROM y restablecer la situacion cuando vuelva la energía.
Para ello hay metodos, pero uno de los mas simples es con un capacitor de gran valor permitir que el Arduino complete una operación de escritura en EEPROM lo que se logra en menos de 5mseg y eso es fácilmente alcanzable con un capacitor de valor importante.
Olvidé lo mas importante.
TimeOne es una librería que usa TIMERs qué novedad!! Y por ello no fue pensada para tiempos grandes sino para tener precisión y control sobre eventos rápidos.
ah ok entiendo , no necesito precision pero si que hiciera como un test diario lo mas importante , eso es para una bomba de 1/2 de agua por que el problema es que cuando pasan muchos dias la bomba se queda pegada , y para evita eso lo quise automatizar y tomando esto como base agregaria otras cosa mas.
en el codigo pasaria mas tiempo apagada que prendida , 5 seg on , 20 seg off , tome ese tiempo como ejemplo usando millis
saludos, este seria el codigo que pudiera funcionar , se pudiera hacer en 3 veces cada " 8 horas " o 12 por si hay cortes de luz creo q lo haria una vez al dia ..