Ir a contenido
📢 ¡Nos mudamos! 🏢✨ Av. Lapislázuli 2074-Interior 7, colonia Victoria, Guadalajara, Jal. Lunes - viernes 10am - 6:30pm
📢 ¡Nos mudamos! 🏢✨ Av. Lapislázuli 2074-Interior 7, colonia Victoria, Guadalajara, Jal. Lunes - viernes 10am - 6:30pm
¿Como funcionan las interrupciones con arduino?

¿Como funcionan las interrupciones con arduino?

Interrupciones externas

¿Qué es una interrupción?

Una interrupción nos permite pausar la ejecución del programa principal, de esta manera podemos atender la interrupción y que ejecute otro pequeño extracto de código.

¿Cuándo utilizar una interrupción externa?

Cuando se desea que un programe lea siempre una señal externa sin importar el segmento de código que este ejecutando la interrupción se ejecutara incluso si esta a la mitad de un delay();

ISR función para llamar cuando se produce la interrupción. La función no debe tener parámetros y no devuelve nada. Esta función a veces se conoce como una rutina de servicio de interrupción.

Las funciones de interrupción por ISR deben ser ejecutadas en el menor tiempo posible.  Es recomendable usar variables que sean compartidas por el programa principal y la función de Interrupción. Para esto se usan las variables tipo VOLATILE.

Modos de interrupción

El modo define cuándo debe activarse la interrupción.

  • LOW Activa la interrupción cuando el pin está en nivel bajo.
  • CHANGE Activa la interrupción cada vez que el pin cambia de valor.
  • RISING Activa la interrupción cuando el pin va de un nivel bajo a alto.
  • FALLING Activa la interrupción cuando el pin pasa de un nivel alto a bajo.

Pinout interrupciones arduino UNO,NANO

Funciones 

attachInterrupt(digitalPinToInterrupt(btn_contador), interrupcion, LOW);

btn_contador es el pin correspondiente al pin de la interrupcion.

interrupcion es el nombre de la funcion ISR

LOW es el modo de disparo

Ejemplo

Para comprender mejor las interrupciones vamos a crear una maquina de estados que simula 3 procesos diferentes.

El PROCESO 1 realizara un blink con un led color ROJO.

El PROCESO 2 realizara un blink con un led color AMARILLO.

El PROCESO 3 realizara un blink con un led color VERDE.

Para demostrar que la función ISR funciona incluso si la función principal se encuentra en un delay cambiamos el proceso al presionar el botón y ahí es donde se manda a llamar la función.

void interrupcion()

{

    if (millis() - Time > VENTANA)

    {

        menu++;

        Time = millis();

    }

}

La función de interrupción debe ser lo mas corta posible. Lo único que hace es aumenta la variable menú que por cierto es una variable VOLATILE porque es posible que el valor de la variable cambia en otra función. Tal como es el caso de la función interrupción y el loop().

Para eliminar el efecto rebote se usa la función millis y se declara un valor de “VENTANA” el cual será el tiempo que deberá esperar antes de aumentar la variable menú.

 Descarga el código 

Conclusión

Una interrupción externa es una señal recibida por el MCU para indicarle que debe pausar o interrumpir el flujo del programa principal y ejecutar otro código especifico para tratar ese evento. Son muy importantes y es muy importante dominar y agregar esta habilidad a nuestro repertorio de habilidades.

Referencias

https://www.arduino.cc/reference/tr/language/variables/variable-scope--qualifiers/volatile/

Artículo anterior Sensor de temperatura y humedad analógico AMT1001

Comentarios

jonathan - agosto 27, 2023

exelente infoprmacion

jonathan - marzo 21, 2023

exelente infoprmacion

Dejar un comentario

Los comentarios deben ser aprobados antes de aparecer

* Campos requeridos