en compras
mayores a $750
Compras mayores a $750
Ordena el material de todo tu salón y obtén un descuento.
en compras
mayores a $750
Compras mayores a $750
Ordena el material de todo tu salón y obtén un descuento.
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.
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.
El modo define cuándo debe activarse la interrupción.
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
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ú.
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.
https://www.arduino.cc/reference/tr/language/variables/variable-scope--qualifiers/volatile/
Comentarios
Dejar un comentario