Reference   Language (extended) | Libraries | Comparison | Changes

attachInterrupt(interrupcion, funcion, modo)

Descripción

Especifica la función a la que invocar cuando se produce una interrupción externa. Reemplaza cualquier función previa que estuviera enlazada a la interrupción. La mayoría de las placas Arduino tienen dos interrupciones externas: Las número 0 (en el pin digital 2) y la 1 (en el pin digital 3). La Arduino Mega tiene otras cuatro: Las número 2 (pin 21), 3 (pin 20), 4 (pin 19) y 5 (pin 18).

Parámetros

interrupcion: el número de la interrupción (int)

funcion: la función a la que invocar cuando la interrupción tiene lugar; esta función no debe tener parámetros ni devolver nada. Esta función es a veces referenciada como rutina de interrupción de servicio

modo define cuando la interrupción debe ser disparada. Hay cuatro constantes predefinidas como valores válidos:

  • LOW para disparar la interrupción en cualquier momento que el pin se encuentre a valor bajo(LOW).

  • CHANGE para disparar la interrupción en culquier momento que el pin cambie de valor.

  • RISING para disparar la interrupción cuando el pin pase de valos alto (HIGH) a bajo (LOW).

  • FALLING para cuando el pin cambie de valor alto (HIGH) a bajo (LOW)

Retorno

Ninguno

Nota

Dentro de la función enlazada, la función delay() no funciona y el valor devuelto por la función millis() no se incrementará. Los datos serie recibidos en el transcurso de esta interrupción pueden perderse. No deberías declarar como volátil cualquier variable que modifiques dentro de la función.

Usando las interrupciones

Las interrupciones son útiles para hacer que las cosas sucedan automáticamente en programas para microcontroladores, y puedan ayudar a resolver problemas de temporización. Una buena tarea en la que utilizar interrupciones podría ser leer un encoder rotacional, monitorizando la entrada del usuario.

Si quisieras asegurarte de que un programa siempre captura los pulsos de un encoder rotacional, sin perder nunca un pulso, sería muy complicado escribir un programa que haga otra cosa, puesto que el programa debería estar constantemente consultando las líneas del sensor del encoder, de forma que capture los pulsos cuando tienen lugar. Otros sensores tienen un interfaz dinámico similar, como intentar leer un sensor de sonido que intenta capturar un click, o un sensor de ranuras por infrarrojos (fotointerruptor) tratando de capturar el paso de una moneda. En todas estas situaciones, usar una interrupción, libera al microcontrolador de realizar otras tareas sin echar en falta el "timbre".

Ejemplo

int pin = 13;
volatile int estado = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, parpadeo, CHANGE);
}

void loop()
{
  digitalWrite(pin, estado);
}

void parpadeo()
{
  estado = !estado;
}

Ver también

Página principal Referencia

Correcciones, sugerencias, y nueva documentación deberán ser publicadas en el Foro (castellano) o en el Foro (inglés).

El texto de la referencia de Arduino está publicado bajo la licencia Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0. Los ejemplos de código de la referencia están liberados al dominio público.

Share