Me encontraba trabajando con las interrupciones del Arduino UNO (0 y 1 fijadas en los pines 2 y 3 respectivamente) cuando me he dado cuenta de que (al menos en mis placas) no funcionan correctamente. Los pines 2, 3 y 4 (sí, el cuarto también) responden a la interrupción 0.
Convencido de que debía tratarse de un error puntual de mi placa he cambiado a otra que tenía "sin abrir" y he obtenido el MISMO comportamiento.
¿Alguno que pueda echarme una mano con este asunto? ¿Le ha ocurrido esto a alguien anteriormente?
Se trataba de que los pines estaban acoplándose. Es necesario establecer "pull-up" o "pull-down resistors". Este simple código deja claro que todo funciona correctamente:
int pin = 13;
volatile int state = LOW;
void setup()
{
pinMode(pin, OUTPUT);
pinMode(2, INPUT);
digitalWrite(2, HIGH); // pull up resistor
pinMode(3, INPUT);
digitalWrite(3, HIGH); // pull up resistor
attachInterrupt(0, blink1, RISING);
attachInterrupt(1, blink2, RISING);
Serial.begin(9600); // send and receive at 9600 baud
}
void loop()
{
digitalWrite(pin, state);
}
void blink1()
{
Serial.println("Called interrupt1");
state = !state;
}
void blink2()
{
Serial.println("Called interrupt2");
state = !state;
}