Go Down

Topic: Interrupt called only once (Read 59 times) previous topic - next topic

Hi!! I am new to the Arduino world and I have been trying to run the Interrupt's example on my Arduino DUE, but I just can't get it to work because my LED is always in the HIGH state.

This is my code:

Code: [Select]

int out = 9;

volatile int state = LOW;
volatile int count = 0;

void setup() {
  // put your setup code here, to run once:
  pinMode(out, OUTPUT);
  // Init serial port
  Serial.begin(9600);
  // Attach interrupt on led change
  attachInterrupt(out, toggle, CHANGE);
}

void loop() {
  // write state to LED
  digitalWriteDirect(out, state);
  // print state and count
  delay(2000);
  Serial.println(state);
  Serial.println(count);
}

void toggle() {
  count++;
  state = !state;
}

inline void digitalWriteDirect(int pin, boolean val){
  if(val) g_APinDescription[pin].pPort -> PIO_SODR = g_APinDescription[pin].ulPin;
  else    g_APinDescription[pin].pPort -> PIO_CODR = g_APinDescription[pin].ulPin;
}


I added a "count" variable to see whats happening and it is always printed as 1 so it seemed obvious that my interrupt was being triggered only once, so after some Googling I found this one year old bug that suggests to change "digitalWrite" to "digitalWriteDirect" to avoid this exact behaviour, but it's still not working.

Any ideas?  :smiley-cry: I am using an Arduino DUE and 1.5.8 IDE running on OSX Mavericks.

Palliser

#1
Dec 04, 2014, 04:25 pm Last Edit: Dec 04, 2014, 04:27 pm by Palliser
Hello peguerosdc,

Try moving the following line...
Code: [Select]
state = !state;
...from toggle() to loop().

Regards,
p

Go Up