Time Functions y Interrupts Functions en Arduino Deja un comentario

Funciones básicas relacionadas con el tiempo y las interrupciones en Arduino

Veamos algunas funciones básicas relacionadas con el tiempo y las interrupciones que se usan frecuentemente en Arduino IDE.

Time Functions

millis()

  • Esta función devuelve el número de milisegundos transcurridos desde que la placa Arduino empezó a ejecutar el programa actual.
  • Este número se desborda (vuelve a cero) después de aproximadamente 50 días.
  • El valor devuelto por milis es un int. largo sin firmar.
  • Ejemplo
    • unsigned long time
      time = millis()

micros()

  • Esta función devuelve el número de microsegundos transcurridos desde que la placa Arduino empezó a ejecutar el programa actual.
  • Este número se desborda (vuelve a cero) después de aproximadamente 70 minutos.
  • El valor devuelto por los micros es un int. largo sin firmar.
  • Ejemplo: unsigned long time
    time = micros()

delay(value)

  • value : el número de milisegundos para pausar el programa.
  • Esta función detiene el programa durante el número de milisegundos especificado.

Tiempo de impresión transcurrido en microsegundos y milisegundos en el monitor serie de Arduino desde el momento en que se enciende el Arduino.

/* Printing time elapsed in microseconds and milliseconds on the serial monitor of Arduino from the time the Arduino is powered on */

unsigned long time_value;

/* Setup is run once at the start (Power-On or Reset) of sketch */
void setup()
{
pinMode(13, OUTPUT); /* Pin 13 is defined as Output */
Serial.begin(9600); /* opens serial port, sets data rate to 9600 bps */
}

/* Loop runs over and over after the startup function */
void loop()
{
digitalWrite(13, HIGH); /* Make pin 13 HIGH */
delay(2000); /* Wait for 2 seconds */
digitalWrite(13, LOW);
delayMicroseconds(100); /* Wait for 100 microseconds */
Serial.print("Time passed since power on in milliseconds:");
time_value = millis(); /* Read value of number of microseconds since program started executing */
Serial.println(time_value);
delay(2000);
Serial.print("Time passed since power on in microseconds:");
time_value = micros(); /* Read value of number of milliseconds since program started executing */
Serial.println(time_value);
delay(1000);
}

Interrupt Functions, Funciones de interrupción

interrupts()

  • Esta función vuelve a habilitar las interrupciones después de que hayan sido deshabilitadas por noInterrupts().

noInterrupts()

  • Esta función desactiva las interrupciones.
  • Las interrupciones se pueden volver a habilitar utilizando interrupts().

attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)

  • El primer parámetro para attachInterrupt es el número de pin.
  • digitalPinToInterrupt(pin) debe utilizarse para especificar el pin en el que se utiliza la interrupción externa.
    pin es el número de pin al que se debe habilitar la funcionalidad de interrupción externa.
    Para Arduino UNO, sólo se pueden utilizar los pines 2 y 3 para las interrupciones externas.
  • ISR : El ISR al que se llama cuando ocurre un evento de interrupción. Esta función no debe tomar ningún parámetro y no debe devolver nada.
  • Mode Decide qué evento debe causar una interrupción. Hay 4 opciones disponibles para seleccionar.
    • LOW Interrupción generada cuando el pin está BAJO.
    • CHANGE Interrupción generada cuando el pin cambia de valor.
    • FALLING Interrupción generada cuando el pin cambia de ALTO a BAJO.
    • RISING   Interrupción generada cuando el pin cambia de BAJO a ALTO.

detachInterrupt(digitalPinToInterrupt(pin))

  • Desactiva la interrupción especificada por el digitalPinToInterrupt(pin)

Encendido y apagado de interrupciones

/* Interrupt Functions */

/* Setup is run once at the start (Power-On or Reset) of sketch */
void setup()
{

}

/* Loop runs over and over after the startup function */
void loop()
{
noInterrupts();
/* critical, time-sensitive code here */
interrupts();
/* other code here */
}

Encendiendo LED conectado al pin 13 de Arduino usando eventos de interrupción en el pin 2 de Arduino. Se utiliza un interruptor táctil para provocar las acciones de interrupción

/* Toggling LED connected to pin 13 of Arduino using interrupt events on pin 2 of Arduino. A tactile switch is used to cause the interrupt events. */

volatile bool led_state = LOW;

/* Setup is run once at the start (Power-On or Reset) of sketch */
void setup()
{
pinMode(13, OUTPUT); /* Pin 13 is defined as Output */
pinMode(2, INPUT_PULLUP); /* Interrupt pin */
/* Connect pin 2 to ground using a tactile switch between the pin and ground */
attachInterrupt(digitalPinToInterrupt(2), blink, FALLING); /* Call ISR blink whenever a falling edge event is detected on pin 2 */
/* Press switch to cause falling edge event on the pin */
}

/* Loop runs over and over after the startup function */
void loop()
{
digitalWrite(13, led_state); /* Write state value to pin 13 which has on-board LED */
}

/* ISR */
void blink() {
led_state = !led_state; /* Toggle state value of LED */

También te puede interesar

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

0
    0
    Tu Carrito
    Tu carrito esta vacíoVolver a la tienda
    Enviar Whatsapp
    Hola 👋
    ¿En qué podemos ayudarte?