Primero una aclaración del objetivo principal de este post, nuestro querido arduino se “parece un poco a un ordenador” cuando lo compramos nuevo viene solo con el sistema operativo y es muy rápido, luego nosotros vamos cargando programas y archivos de todo tipo y esa rapidez pasa a ser cosa del pasado. Con el sistema domotico corremos el riesgo de hacer algo parecido, si cargamos solo el programa base generado con el configurador windows el sistema va muy rápido, esta muy optimizado y mas que va a estar una vez se libere la v2.2. Pero claro, a todos nos gusta ir metiendo nuestros fragmentos de código, y si estos no se colocan en el sitio correcto podemos sobrecargar el arduino, dando este la sensación de que se vuelve lento o que no responde a algunas ordenes de pulsadores y demás. Para evitar esto es fundamental comprender este documento, de esta manera podremos colocar nuestro código en el sitio mas conveniente, no “ensuciando” la velocidad del sistema. Los métodos y funciones principales del sistema domotico con arduino son.

void UserSetup() {}

Se ejecuta una sola vez, es el utilizado para iniciar sistemas, es el equivalente a al método Setup cuando programamos arduino, solo que este ya has sido utilizado por el sistema y es mas sencillo de actualizar si programáis vuestro código en esta sección.

void UserLoop(){}

Este método se ejecuta continuamente, podemos usarlo para tareas que necesitan una revisión continua, equivale a la función Loop de arduino, solo que este ya ha sido utilizado por el sistema.

void LoopNew100MillisSg(){}

Este método se ejecuta cada 100 segundillos, es decir 10 veces por segundo, es ideal para temporalizaciones cortas, de algunos segundos.

void LoopNewSecond(){}

Se ejecuta cada segundo, podemos utilizarlo para temporizar tareas o realizar tareas que sea suficiente que se comprueben una vez cada segundo, una buena opción es temporizados mediante condicionados, como puede ser un alumbrado por volumetrico, haremos un tuto especifico para esto, combinado con la herramienta de consignas tiene una gran potencia.

void Loop30Sg(){

Este método se ejecuta cada 30 sg, pongamos un ejemplo, vamos a añadir al sistema un sensor de humedad que tiene un tiempo de respuesta lento, ¿realmente necesitamos conocer su valor continuamente? Pues no, los cambios en la humedad son lentos y no va a sufrir muchos cambios en ese espacio de tiempo, de hecho lo normal es que no cambie su valor….

void NewMinute(){}

Se ejecuta cada minuto, ademas este esta sincronizado con el reloj del sistema, la ejecución de este método implica que estamos en un minuto nuevo, SIN RELOJ NO SE EJECUTARA NUNCA!!

void SwicthStateChange(int NumberInput, int Value){}

Indica un cambio en una entrada configurada como swicht, o interruptor, no es traducción literal pero se entiende, esta tiene dos parametros.

  1. NumberInput nos informa del numero de entrada que produjo ese evento, es decir si NumberInput=10, la entrada activada es la numero 10, tener en cuenta que empezamos a contar por el 0,
  2. Value, indica el valor de la entrada, puede ser HIGH, o LOW, de esta manera conocemos si la entrada esta activada o desactiva.

void ShortInput(int NumberInput){}

Indica que se ha producido una pulsación corta en una entrada de pulsador, es decir el pulsador se pulso y se soltó rápidamente, el parámetro NumberInput indica el numero de la entrada.

void LongInput(int NumberInput){}

Indica que se ha producido una pulsación larga en una entrada de pulsador, es decir el pulsador se pulso y se mantuvo pulsado durante mas de medio segundo, el parámetro NumberInput indica el numero de la entrada.

void LongInputEnd(int NumberInput){}

Indica el final de una pulsación larga de una entrada tipo pulsador.

void OutControl(){}

Este método es usado para activar las salidas a reles, es donde las configura el configurador windows, no es obligatorio hacerlo aquí pero si muy recomendable, mantener una estructura organizada os ayudara mucho a la hora de programar.

char* RunCommand(byte CommandNumber){}

Este método se ejecuta con la herramienta android de comandos, puede ser utilizado para manejar dispositivos de infrarrojos o lo que os de la gana, en al app android aparece con el icono del mando a distancia, pero puede ser usada para cualquier otra cosa, abrir puertas, el limite vuestra creatividad. El parámetro CommandNumber informa del numero de comando ejecutado, en la aplicación android estos se muestran ordenados siempre y cuando no juguemos con la propiedad descripción, que permite crear grupos y configuraciones avanzadas. Si usáis la aplicación arduino remote control también ejecutara este método, y dará un acceso mas rápido a ciertas funciones, no obligando a usar todo el programa de domotica.,

 

char* FreeText(byte Number){}

Herramienta de texto libre, se utilizar para mostrar texto en la opción Estados de la app android..

String GetAlarmsName(byte Number){}

Esta función sirve para dar nombre a las notificaciones, es decir el texto que se envía al terminal cuando tenemos una notificacion o alerta, vamos con un ejemplo sencillo tomamos este código.

String GetAlarmsName(byte Number){

if (Number==0){return "Alarma incendio";}

if (Number==1){return "Alarma inundacion";}

return "RESERVA"; }

 

 

De esta manera tenemos dos notificaciones activadas, una para incendio y otra para inundación, si queremos enviar una alerta con el texto Alarma incendio al móvil hacemos los siguiente dentro de nuestro programa.

SetAlarm(0);

 

Como veis indicamos con el parámetro 0 que se envié la notificación 0, Una vez se ha enviado una notificación es necesario resetearla para volver a enviarla, tampoco es plan de llenar el móvil de mensajes, por tanto para volver a enviarla previamente tendríamos que desactivar esta de esta manera.

 

ResetAlarm(0);

 

 

Recordar que si las alarmas no están habilitadas previamente desde el móvil no se enviaran , llamemos o no a estos métodos, esto es necesario pues un sensor se puede averiar en cualquier momento y debe poder desactivarse el envió de forma sencilla.