Temporizador de aumento/disminución

12 de julio de 2019 por
Temporizador de aumento/disminución
Boot & Work Corp. S.L., Quesada Dani Salvans

Index

1. Introducción
2. Solución de código
    2.1 Incremento del temporizador
    2.2 Disminución del temporizador
3. Cómo cargar este código

Introducción

Este post muestra cómo programar un temporizador de forma correcta utilizando el lenguaje de programación Arduino IDE. Un temporizador se puede hacer como creciente o decreciente, para hacer una cuenta atrás o una cuenta atrás, y veremos ambas formas. Este código se puede adaptar y aplicar a cualquier tipo de proyecto o idea. 


Solución de código

Temporizador creciente

Este temporizador está diseñado para permitir ejecutar varias tareas al mismo tiempo, evitando errores comunes relacionados con la creación de temporizadores como el uso de retardos, que son un problema porque detienen la CPU por un momento y no se puede aprovechar ese tiempo.

Si echamos un vistazo a este código, podemos ver que, en primer lugar, definimos el periodo de la tarea, después de eso, inicializamos el puerto serie en el setup. En el bucle, el contador de la tarea se pone a 0 (asegúrese de que, al menos, el tamaño del uint es 16 para proporcionar un buen rango para el contador), hacemos una condicional regulada por la condición de la substracción de millis() y lastTime mayor que 1000 ms (1000 ms es la resolución del temporizador, puede cambiarlo como quiera), lastTime es igual a millis(), el contador de la tarea se incrementa y, si el contador de la tarea ha alcanzado el periodo previamente establecido, se reinicia y se ejecuta la tarea. 

La función de tarea es sólo un ejemplo para comprobar cuántos segundos han pasado cada vez que se ejecuta una tarea. Esta tarea se supone que es lo que se quiere gestionar con este temporizador. Como podemos ver en el ejemplo, se puede replicar esta estructura para cada tarea que se necesite (en el código de ejemplo podemos ver que se hace para ejecutar 3 tareas).

/*
   Copyright (c) 2019 Boot&Work Corp., S.L. All rights reserved

This program is free software: you can redistribute it and/or modify it under the terms 
of the GNU Lesser General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */ #define TASK1PERIOD 2 #define TASK2PERIOD 5 #define TASK3PERIOD 10 void setup() { Serial.begin(9600UL); Serial.println("CountUp Timer Started"); } void loop(){ static uint32_t task1Counter=0; static uint32_t task2Counter=0; static uint32_t task3Counter=0; static uint32_t lastTime=millis(); if (millis()-lastTime>1000){ lastTime=millis(); ++task1Counter; if (task1Counter==TASK1PERIOD){ task1Counter=0; task1(); } ++task2Counter; if (task2Counter==TASK2PERIOD){ task2Counter=0; task2(); } ++task3Counter; if (task3Counter==TASK3PERIOD){ task3Counter=0; task3(); } } } void task1(){ Serial.print(millis()/1000); Serial.print(':'); Serial.println("task1"); } void task2(){ Serial.print(millis()/1000); Serial.print(':'); Serial.println("task2"); } void task3(){ Serial.print(millis()/1000); Serial.print(':'); Serial.println("task3"); }

Temporizador decreciente

Este es el mismo que el otro pero haciendo algunos pequeños cambios; el temporizador de la tarea se establece en el tiempo del período de la tarea, el contador de la tarea se descrementa, el condicional se hace cuando el contador de la tarea llega a 0 y el contador se reinicia al tiempo del período de la tarea.

/*
   Copyright (c) 2019 Boot&Work Corp., S.L. All rights reserved

This program is free software: you can redistribute it and/or modify it under the terms 
of the GNU Lesser General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with
this program. If not, see <http://www.gnu.org/licenses/>. */ #define TASK1PERIOD 2 #define TASK2PERIOD 5 #define TASK3PERIOD 10 void setup() { Serial.begin(9600UL); Serial.println("CountDown Timer Started"); } void loop(){ static uint32_t task1Counter=TASK1PERIOD; static uint32_t task2Counter=TASK2PERIOD; static uint32_t task3Counter=TASK3PERIOD; static uint32_t lastTime=millis(); if (millis()-lastTime>1000){ lastTime=millis(); --task1Counter; if (task1Counter==0){ task1Counter=TASK1PERIOD; task1(); } --task2Counter; if (task2Counter==0){ task2Counter=TASK2PERIOD; task2(); } --task3Counter; if (task3Counter==0){ task3Counter=TASK3PERIOD; task3(); } } } void task1(){ Serial.print(millis()/1000); Serial.print(':'); Serial.println("task1"); } void task2(){ Serial.print(millis()/1000); Serial.print(':'); Serial.println("task2"); } void task3(){ Serial.print(millis()/1000); Serial.print(':'); Serial.println("task3"); }


How to upload this code

Si quieres cargar este código en tu PLC tienes que seguir estos pasos:
 1. Seleccione Herramientas > Placa > Familia M-Duino (o tu PLC de trabajo).
upload the code - Increasing/Decreasing Timer

2. Selecciona Herramientas > Industrial shields > M-Duino 21+ (o tu modelo de PLC de trabajo).
3. Selecciona Herramientas > Puerto > COM65 (o el puerto donde tengas conectado tu dispositivo).
upload the code - Increasing/Decreasing Timer

4.-Subir el programa. Pulsa sobre la flecha situada en la parte superior izquierda de la ventana.
upload the code - Increasing/Decreasing Timer

5. Si todo funciona correctamente, tu temporizador está listo para ser aplicado a sus proyectos. Si quieres comprobar si el programa está funcionando bien, haz clic en el icono del Monitor Serial situado en la esquina superior derecha de la ventana. Asegúrate de que has configurado el puerto al que has conectado el PLC.
haz clic en el icono del Monitor Serial situado en la esquina superior derecha de la ventana. Asegúrate de que ha configurado el puerto al que ha conectado el escudo. 
upload the code - Increasing/Decreasing Timer
 

6. Asegúrate de configurar el baudrate a 9600 para sincronizarlo con el puerto serie. Si todo funciona bien, verás el nombre de cada tarea ejecutada en su momento (cada periodo) como puedes ver en la imagen de abajo: 
upload the code - Increasing/Decreasing Timer

Buscar en nuestro blog

Temporizador de aumento/disminución
Boot & Work Corp. S.L., Quesada Dani Salvans 12 de julio de 2019
Compartir

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Industrial PLC comparison >>>