Buenas,
Es mi segunda o tercer consulta en el foro. Esta vez relevante al uso de los timers de un arduino nano usando la librería TimerOne. Realice la estructura de lo que quiero tener en el loop(). Sin embargo no tengo los resultados esperados. Es decir, el timer no funciona de la manera que tengo pensado.
Aclaro que leí y busque información sobre el uso de la librería. Pero siempre se encuentra el code sobre LedBlink con el timer. El mismo funciona, pero usando el mismo concepto y usándolo en mi programa me encuentro con un funcionamiento distinto.
Paso a comentarles que es lo que quiero hacer:
- Tomar medidas de voltaje
- Tomar medidas de corriente
- Tomar decisión de control cuando tenga consumo excesivo de corriente
- Temporizar la anterior decisión 10segundos; luego levantar dicha protección
Estoy monitoreando con arduino valores de voltaje DC y corriente DC de una placa. Lo único que me interesa proteger es el consumo de corriente excesivo, usando un relay e inhabilitando la carga. Nada complicado. Hasta que quiero temporizar esos 10 segundos.
Pienso temporizar esos 10 segundos para verificar si ese sobre-consumo sigue presente o no, para habilitar la salida o seguir en ese chequeo.
El Código:
Es breve y sencillo.
Cuerpo principal
#include <TimerOne.h>
volatile int terminedecontar = 0; // Variable ficticia usada para disparar timer
void programab ();
void timerIsr();
void timecounter ();
void setup()
{
Serial.begin(4800);
Serial.println("INICIO PROGRAMA");
Serial.println();
}
void loop()
{
Serial.println("Mido Voltaje");
Serial.println("Mido Corriente");
programab();
Serial.println("Imprimo en LCD");
if (terminedecontar == 0){
timecounter ();
terminedecontar = 1;
}
}
Programab
void programab (){
Serial.println("Llamada programa 2");
}
Timecounter
void timecounter (){
Serial.println("EMPIEZO A CONTAR");
Timer1.initialize(10000000); // set a timer of length 100000 microseconds (or 0.1 sec - or 10Hz => the led will blink 5 times, 5 cycles of on-and-off, per second)
Timer1.attachInterrupt( timerIsr ); // attach the service routine here
}
Timer ISR
void timerIsr()
{
Timer1.restart();
Serial.println();
Serial.println("INTERRUPCION 10 SEGUNDOS");
Serial.println();
terminedecontar = 0;
}
Creo que se entiende como hago el trigger y luego trato de limpiar la variable "volatile int terminedecontar".
Si alguno puede señalarme donde tengo mi error en el programa o indicando realmente si está bien el uso de la librería.
Saludos. Desde ya muchas gracias.