Encuentra información referente a la programación, electrónica y mucho más, la página está pensada para compartir contenido educativo relevante coadyuvando a su aprendizaje diario.
Librería TimerOne en Arduino

La libreria TimerOne es una de las más usadas en Arduino para trabajar con Timers, manipular los Timers con esta librería es sencilla, pero también se puede hacer sin ninguna librería, si bien es un poco más complejo, porque debemos hacer uso de las hojas de datos del microcontrolador que usa nuestra placa de Arduino, para obtener la suficiente información puedes consultar los timers sin librerías.

Esta librería según su documentación nos indica que solo trabaja con el Timer 1 que es de 16 bits en los microcontroladores ATmega168 / 328, en caso de querer trabajar con un Timer de 8 bits debemos buscar otra alternativa o simplemente trabajar con la hoja de datos del microcontrolador y buscar la sección timers, esto dependerá del tipo de Placa de Arduino que uses.

Su instalación es sencilla solo debemos ingresar a nuestro IDE de Arduino y buscar el menú Programa->Incluir Librería->Administrar Bibliotecas.

instalación de la librería timerone en arduino

Y por último buscar en la ventana TimerOne e instalarla para que podamos usarla en nuestros proyectos en Arduino.

Listo!!! Ya tenemos instalado nuestra librería TimerOne para usar el Timer1 de 16 bits en Arduino.

Descripción de los métodos de la librería TimerOne en Arduino

Antes de empezar a usar estos métodos debemos incluir nuestra librería TimerOne a nuestro código mediante la instrucción #include <TimerOne.h>, al incluir esta librería se crea un objeto llamado Timer1 que usaremos para instanciar los métodos disponibles.

Timer1.initialize(periodo opcional)

La usamos para iniciar la libreria TimerOne, puesto que si no lo hacemos funcionara de forma incorrecta nuestra librería, en este método presenta la particularidad de tener la posibilidad de una sobrecarga de métodos por lo cual nos da la posibilidad de colocar o no un periodo inicial en microsegundos como un argumento en nuestro método. 

Timer1.serPeriod(periodo)

Con este método podemos asignar un periodo de trabajo para la librería TimerOne , este periodo debe ser declarado en microsegundos, según la documentación de esta librería nos dice que debe estar entre 1 y 8388480 microsegundos.

Timer1.pwm(pin,duty,periodo [opcinal])

Como sabemos el PWM (Pulse Width Modulation) intenta imitar una señal analógica, la librería TimerOne tiene su propio método para tratar los PWM, este método en particular nos presenta tres argumentos, el primero es el pin que usaremos para sacar esta señal, en el segundo argumento debemos colocar el ciclo del duty, que es de 10 bits ósea que podemos usar valores entre 0 y 1023, además este método tiene un tercer argumento para colocar el periodo de trabajo en microsegundos pero este argumento es opcional.

Timer1.attachInterrupt(función_ISR, periodo)

Con este método podemos hacer la llamada a una función ISR (Interrupt Service Routines), que se ejecutara cuando exista un desbordamiento, esta función nos será muy útil para definir qué queremos que haga en los periodos que hayamos definido, se recomienda que no sea muy extensa esta función puesto que de lo contario podría bloquearse el programa, además se recomienda usar variables “volatile” para gestionar de mejor maneras nuestros valores.

Timer1.setPwmDuty(pin, duty)

Usado para establecer un nuevo PWM sin la necesidad de reconfigurar nuestro pin en caso que ya hayamos configurado nuestro pin el método PWM(), este método tiene dos argumentos, el primero es para identificar el pin que vamos a usar, el segundo argumento es para el ciclo del duty.

Timer1.detachInterrupt()

Este método nos ayuda a desactivar las interrupciones en cualquier momento.

Timer1.disablePwm(pin)

Usado para desactivar el PWM del pin que hayamos definido anteriormente y liberar el pin para usarlo en otras tareas útiles para nuestro proyecto.

Timer1.read()

Este método es muy útil para leer el tiempo transcurrido en microsegundos desde el último rollover.

Como podemos ver Arduino y la enorme comunidad que lo acompaña, aportan mucha información para que mucha gente pueda realizar proyectos complejos sin muchos conocimientos técnicos, pero obviamente es mejor profundizar todos estos temas desde la hoja de datos de los microcontroladores que son parte de las placas de Arduino.

Ejemplo de la librería TimerOne en Arduino

Este ejemplo consiste en encender una secuencia de leds solo si presionamos por 3 segundos el pulsador y si deseamos apagarlo también debemos presionar por 3 segundos.

Materiales necesarios

  • Arduino UNO.
  • 4 leds.
  • 4 resistores de 330 ohmios
  • 1 pulsador
  • 1 resistencia de 10K
  • Cables (lo necesario)

Diagrama del ejemplo de TimerOne en Arduino

Código del ejemplo de TimerOne en Arduino

/* AUTOR: CREATIVIDAD CODIFICADA
 *  www.creatividadcodificada.com
 *  NOMBRE DEL PROYECTO: Encendido y apagado de una secuencia de Leds
 *  accionado el pulsador por 3 segundos.
*/
#include <TimerOne.h>
volatile int contadorTiempo;
unsigned int controlTiempo;
boolean control;
void setup() {
  //Iniciar las variables contadorTiempo, controlTiempo y control 
  contadorTiempo = 0;
  controlTiempo = 0;
  control=true;
  
  //configuramos nuestras salidas para los leds
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);

  //Configuramos el pin 2 para el boton
  pinMode(2,INPUT);
  
  //Iniciamos el timer1
  Timer1.initialize(1000000);
  Timer1.attachInterrupt(ISR_tiempo);
}

void loop() {

  //Controlamos si el boton esta presionado
  if(digitalRead(2) && control == true) encendidoLed(HIGH);
  if(digitalRead(2) && control == false) encendidoLed(LOW);
}

void encendidoLed(int estado)
{
    //Reiniciamos el contadorTiempo a 0 
      contadorTiempo = 0;

      // Controlamos que detecte los 3 segundos presionados
      while(digitalRead(2) && contadorTiempo < 3 ){
        controlTiempo=contadorTiempo;
        }
        if(controlTiempo >= 2)
          {
            for(int i = 0; i < 4; i++)
            {
              // Encendemos en seecuencia los Leds
              digitalWrite(i+8,estado);
              delay(200);
              }
          // hacemos el control para cambiar de estado de los Leds    
          control=!control;
          }
  }
  // Nuestra función ISR
void ISR_tiempo()
{
  contadorTiempo++;
  }

¿Que te parecio el artículo?

Su dirección de email no sera publicado. Los campos obligatorios están marcados con *.

¿Qué hacemos con tus datos?

Creatividad Codificada como responsable tratará tus datos con la finalidad de gestionar tu participación en nuestro blog informativo. Puedes acceder, rectificar y suprimir tus datos, así como ejercer otros derechos consultando la información adicional y detallada sobre protección de datos en nuestra Política de Privacidad