Diferencia entre revisiones de «attachInterrupt()»

De ArduWiki
Saltar a: navegación, buscar
(Vea también)
(Ejemplo)
Línea 28: Línea 28:
  
 
== Ejemplo ==
 
== Ejemplo ==
<pre>
+
En este ejemplo hacemos que el LED a bordo conmute con un pulsador en el pin digital 2.
const byte pin = 13;
+
 
volatile int state = LOW;
+
<syntaxhighlight lang="c++">
 +
const byte pulsador = 2;
 +
volatile bool estado = LOW;
 
void setup(){   
 
void setup(){   
  pinMode(pin, OUTPUT);  
+
  pinMode(LED_BUILTIN, OUTPUT);  
  attachInterrupt(digitalPinToInterrupt(pin), blink, CHANGE);
+
  pinMode(pulsador, INPUT_PULLUP);
 +
  attachInterrupt(digitalPinToInterrupt(pulsador), parpadea, CHANGE);
 +
}
 +
void parpadea(){ 
 +
  estado = !estado;
 
}
 
}
 
void loop(){   
 
void loop(){   
  digitalWrite(pin, state);
+
  digitalWrite(LED_BUILTIN, estado);
}
 
void blink(){ 
 
  state = !state;
 
 
}
 
}
</pre>
+
</syntaxhighlight>
  
 
== Vea también ==
 
== Vea también ==

Revisión del 01:18 27 jun 2018

Descripción

Pines digitales con Interrupción.

El primer parámetro para attachInterrupt es el número de interrupción. Normalmente debería utilizar digitalPinToInterrupt(pin) para traducir el pin digital real al número de interrupción específica. Por ejemplo, si se conecta al pin3, utilice digitalPinToInterrupt(3) como el primer parámetro para attachInterrupt.

Sintaxis

attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);   //recomendado
attachInterrupt(interrupt, ISR, mode);                    //no recomendado
attachInterrupt(pin, ISR, mode) ;                         //Solo [[DUE]], [[Zero]], [[MKR1000]]

Parámetros

interrupt
el número de interrupción (int)
pin
el número de pin (solo DUE, Zero, MKR1000)
USR
la ISR llamada cuando sucede la interrupción; esta función no debe tener parámetros ni devolver nada. Esta función a veces se denomina Rutina del Servicio de Interrupciones.
mode
define cuando debe ser disparada la interrupción. Existen cuatro constantes predefinidas como valores válidos
LOW dispara la interruoción cuando el pin está a nivel bajo.
CHANGE dispara la interrupción cuando el pin cambia su valor.
RISING dispara la interrupción cuando el pin pasa de nivel bajo a nivel alto.
FALLING dispara la interrupción cuando el pin pasa de nivel alto a nivel bajo.

Retornos

Nada.

Advertencias

  • Dentro de la función de Interrupción, delay () no funcionará y el valor devuelto por Millis () no aumentará. Los datos serie recibidos, mientras que la función está activa se pueden perder. Usted debe declarar como volátile cualquier variable que se modifique dentro de la función de Interrupción. Vea la sección de ISR a continuación para obtener más información.

Ejemplo

En este ejemplo hacemos que el LED a bordo conmute con un pulsador en el pin digital 2.

const byte pulsador = 2;
volatile bool estado = LOW;
void setup(){  
   pinMode(LED_BUILTIN, OUTPUT); 
   pinMode(pulsador, INPUT_PULLUP); 
   attachInterrupt(digitalPinToInterrupt(pulsador), parpadea, CHANGE);
}
void parpadea(){  
   estado = !estado;
}
void loop(){  
   digitalWrite(LED_BUILTIN, estado);
}

Vea también

Referencias