lunes, 31 de marzo de 2014

12.5 Creación de una alarma para llamar periódicamente a una función

Problema:


Se quieren realizar algunas acciones en días y horas específicas.

Solución:

Lo primero que se hizo fue descargar las librerías necesarias: la librería Time y TimeAlarms



Al finalizar la descarga de las librerías se prosiguió a agregarse y compilarse el código que se va a utilizar, al compilarse se creara el código hexadecimal que se utilizará mas adelante:



Posteriormente se diseña el circuito y se realizan las conexiones correspondientes, quedando de la siguiente manera:



Se carga el archivo que contiene el código hexadecimal que se generó, el cual tendrá una extensión .hex , para esto se hace click en el botón secundario y se selecciona "Edit properties" como en la siguiente imagen: 



Se desplegará una ventana, localizaremos la leyenda "Program File" e introducimos la dirección donde se encuentra nuestro archivo .hex, que será una ruta similar a "C:/Users\”usuario”\AppData\Local\Temp\build….tmp" como se muestra:



Después, en la barra inferior, se da click en el botón "play" para correr la simulación.



Nos aparecerá una pantalla como la que se muestra a continuación:



Se programo un trigger para que solo se ejecutará una sola vez al transcurrir 10 segundos después de iniciada la simulación



Otro trigger esta programado para que se ejecute cada 15 segundos y otro mas que se ejecuta diariamente a las 8:30 y a las 17:45




Código:


#include <Time.h>
#include <TimeAlarms.h>

void setup(){
  Serial.begin(9600);
  Serial.println("TimeAlarms Example");
  Serial.println("Alarms are triggered daily at 8:30am and 17:45pm");
  Serial.println("One timer is triggered every 15 seconds");
  Serial.println("Another time is set to trigger only once after 10 seconds");
  Serial.println();

  setTime(8,29,40,1,1,10);

  Alarm.alarmRepeat(8,30,0, MorningAlarm);
  Alarm.alarmRepeat(17,45,0,EveningAlarm);

  Alarm.timerRepeat(15, RepeatTask);
  Alarm.timerOnce(10, OnceOnlyTask);
}

void MorningAlarm(){
  Serial.println("Alarm: - turn lights off");
}


void EveningAlarm(){
  Serial.println("Alarm: - turn lights on");
}

void RepeatTask(){
  Serial.println("15 second timer");
}

void OnceOnlyTask(){
  Serial.println("This timer only triggers once");
}

void loop(){
  digitalClockDisplay();
  Alarm.delay(1000);
}

void digitalClockDisplay(){
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println();
}

void printDigits(int digits){
  Serial.print(":");
  if(digits < 10){
    Serial.print('0');
  }
  Serial.print(digits);
}



2 comentarios:

Anuvis dijo...

muy bien explicado grasias

Unknown dijo...

Hola una consulta, estoy queriendo usar Alarm.alarmRepeat para un controlador de pileta. Es decir que yo pueda conkfigurar la frecuencia (dias de la semana), hora de inicio y duracion. EL cuando yo cambie la hora o el dia la primer alarma que setie se queda no es que la puedo borar.

Publicar un comentario