Interruptores hardware en Arduino

 Piensa en tu placa Arduino ejecutando alegremente y ad libitum el bloque Loop que le ordenaste. En un momento dado necesitas que lo deje todo y realice una acción concreta. Por ejemplo, un láser que al ser interrumpido activa una alarma. Bien, pues para conseguir esto disponemos de un tipo de función avanzada que se llama ISP (Rutina de interrupción de servicio).

Vayamos por partes. Lo primero que necesitamos es adjuntar un interruptor a nuestro código. Para ello usamos la función attachInterrupt(interruptor, función, modo). En arduino Uno podemos usar los pines 2 y 3 para conectar el hardware que ordenará la ejecución de nuestra ISP. En el primer parámetro esta función, el parámetro interruptor, debemos aclarar de que interruptor estamos hablando, por tanto escribe 0 si tu láser está conectado en el pin 2, o escribe 1 si lo está en el pin 3.
 El parámetro función espera que le indiquemos la función que debe ejecutarse cuando el interruptor hardware (nuestro laser) así lo indique. Para nuestro ejemplo habremos preparado la función activar_alarma(), la cual habremos definido en otro momento.
Vamos con el parámetro modo. Podemos elegir que activar_alarma() se ejecute mientras no recibimos señal en nuestro pin (LOW), cuando la señal cambie de bajo a alto (RISING), cuando cambie en el sentido contrario (FALLING), o simplemente cuando cambie, independientemente de la dirección (CHANGE). Visto todo esto, nos queda así la función: 

 attachInterrupt(0, activar_alarma (), RISING);

 Si más adelante en tu código necesitas desactivar este interruptor de servicio, puedes usar la función detachInterrupt(interruptor), que sólo necesita como parámetro el pin donde está conectado nuestro interruptor hardware. En nuestro caso quedaría así:

 detachInterrupt(0);

 ¡y alarma desactivada!