Serial Port Freezing after being interrupted

Hello,

So I am using an Arduino Uno and the serial port freezes up sporadically after I flip the switch to trigger the interrupt. I have read a lot about why this maybe. Initially I began with all of my code in the interrupt but moved it to the main loop because I thought it might have been an interrupt conflict. Then I removed most of the matrix multiplications because I thought it was a pointer issue. I also switched to a standard Arduino interrupt rather than using a PinChangeInt interrupt. Finally, I figured it must be a buffer overflow issue so I placed Serial.flush() commands around each Serial.print so as to make sure that I wouldn't overflow the buffer. I have taken all of the complexity of the code out and below is the code I am left with. It still freezes up and I am completely out of ideas as to why this issue continues to occur.

Below is a screen shot of the serial monitor. This is the first time I have seen "jibberish". Usually it freezes midline or just stops responding to changing the interrupt.

Any help would be appreciated.

#include <PinChangeInt.h>
#include <SPI.h>
#include <MatrixMath.h>

int updated = 0;
int previously_updated = 0;


void setup() {
  //PCintPort::attachInterrupt(5, update, CHANGE);
  attachInterrupt(0, update, CHANGE);
  SPI.begin();
  Serial.begin(9600);
}

void loop() {

  if (updated == 0){
    if (previously_updated == 0){
      Serial.println("I am in previouslyupdated"); 
      delay(50);
      previously_updated =1;
    }
    else
    {
      Serial.println("I am in else");
      delay(50);
    }
    Serial.println("Updated"); 
    delay(50);
    updated =1;
  }
}

void update()
{
  updated = 0;
}

Screen Shot 2014-11-22 at 2.18.49 PM.png

The "updated" variable is shared between the interrupt function and the code in loop(). It must therefore be declared volatile:

volatile int updated = 0;

Pete

Is that the exact code you used? I tried that and did not have any problems:

I am in previouslyupdated
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated
I am in else
Updated

Since you're not using it, what happens if you rem out #include <PinChangeInt.h>

Hey KenF, get with the program.

rem out

God members should know better than to say "rem out", even in jest :smiley:

Pete

Doub

el_supremo:
Hey KenF, get with the program.God members should know better than to say "rem out", even in jest :smiley:

Sorry, but "Double divide out" just doesn't trip off the tongue so easily. :slight_smile:

Is 50 milisecs enough of a gap for the Serial.println()s to do their thing - or are buffers filling up?

Try a longer delay or a higher baudrate.

...R