Temporizador de aumento/disminuci贸n
12 julio, 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"); }


C贸mo cargar este c贸digo

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

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

驴Buscas 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.


Comparaci贸n PLC industrial >>>

驴Quieres m谩s informaci贸n?

隆Rellena el formulario!

隆Cu茅ntame m谩s!