Tutorial de Arduino, lección 3, vamos a hablar de sincronización

Arduino Uno Tutorial 3 – sincronización

Para este tutorial nos vamos a basar en el primero, en el que hacíamos lucir un LED por un segundo y luego lo apagábamos durante un segundo en un bucle continuo.

El programa que usamos entonces se muestra a continuación y tiene un defecto importante. Estamos utilizando la función delay () para retrasar el procesador durante 1 segundo antes de encender o apagar el LED. Mientras está en espera, el microcontrolador no puede realizar ninguna otra función en el bucle principal loop().

/* Flashing LED
 * ------------
   * Enciende y apaga un diodo emisor de luz (LED) conectado a un
  * Pin, en intervalos de 2 segundos. *
 */ 
int ledPin = 13; // LED conectado al pin digital 13
void setup() {
   pinMode(ledPin, OUTPUT); // establece el pin digital como salida 
} 
void loop() {
   digitalWrite(ledPin, HIGH); // enciende el LED
   delay(1000);                // espera un segundo
   digitalWrite(ledPin, LOW);  // apaga el LED
   delay(1000);                // espera un segundo 
}

En primer lugar, vamos a hacer un cambio rápido a la función loop (). Vamos a reemplazar los dos pares de declaraciones que encienden y apagan el LED con sólo un par. En lugar de ajustar el valor a HIGH y luego a LOW, leeremos su valor actual y lo ajustaremos al contrario usando la función NOT.

void loop()
{
  digitalWrite(ledPin, !digitalRead(ledPin));   // Activa o desactiva el LED
  delay(1000);                  // Espera un segundo
}

Bien, ahora permite mejorar las funciones delay (). En su lugar utilizaremos la función Arduino millis(). La función millis() devuelve el número de milisegundos desde que la placa Arduino comenzó a ejecutar el programa actual. Este número se desbordará, es decir volverá a cero, después de aproximadamente 50 días. Por lo tanto, siempre y cuando usted no está dejando su dispositivo en más de 50 días, esta es una gran manera de realizar funciones de sincronización. Si su dispositivo está destinado a permanecer encendido durante más de 50 días, tendrá que contabilizar el rollover en su código.

Alternativamente, para tiempos más rápidos se puede utilizar la función micros(). Esto devuelve el número de microsegundos desde que la placa Arduino comenzó a ejecutar el programa actual. Este número se desbordará, después de aproximadamente 70 minutos.

Utilizaremos la función millis() para controlar nuestro LED como antes. El código para esto es el que se muestra a continuación:

/* LED parpadeante Versión 2
 * ------------------------
 *
  * Enciende y apaga un diodo emisor de luz (LED) conectado a un
  * Pin, en intervalos de 2 segundos utilizando la función millis()
 *
 */
int ledPin = 13;                 // LED conectado al pin digital 13
unsigned long currentTime;
unsigned long loopTime;

void setup()
{
  pinMode(ledPin, OUTPUT);      // establece el pin digital como salida
  currentTime = millis();
  loopTime = currentTime;  
}

void loop()
{
  currentTime = millis();
  if(currentTime >= (loopTime + 1000)){  
    digitalWrite(ledPin, !digitalRead(ledPin));   // activa / desactiva el LED
    loopTime = currentTime;  // Actualizacion loopTime
  }
  // Se puede hacer otro procesamiento aqui
}

Este código utiliza dos variables adicionales: currentTime y loopTime. En la función setup() ambas variables se ajustan inicialmente al mismo valor.
En la función loop(), currentTime se actualiza cada vez a través del bucle. Sólo cuando ha pasado al menos un segundo y la variable currentTime es mayor que loopTime + 1000 (1000 milisegundos = 1 segundo), cambia el valor de ledPin y también restablece loopTime al mismo valor que currentTime.

Observa que no hay uso de la función delay() para que el procesador no esté esperando y puede realizar cualquier procesamiento adicional en el bucle principal que se necesita.

Tutorial Anterior.

 

Pin It on Pinterest

Shares