Help: Interrupt Service Routine (ISR) Error / Glitch

I am trying to use an ISR to increase the serial output by 1 every time the value of pin 2 changes, this value changes when someone steps on or off of a pressure mat. The problem is that sometimes (about 10% of the time) the increase is a seemingly arbitrary number (2, 3, 4 etc.) and I need it to be able to work 100% of the time increasing by only 1 each time the value changes.
The output ultimately tells Isadora which image to project and the images need to go in order (ex: display img1 when no one has stepped on mat, img2 when someone steps on, img3 when they step off, img4 when someone else steps on, etc.)

I am using Arduino with Isadora, but the problem is on the Arduino side of things, since I get the error regardless of whether or not Isadora is running.
A computer science professor suggested the pressure mat might be the problem, so we swapped in a button and got the same result, so it isn't the mat. No one else at my school really knows much about Arduino and he doesn't really have the time to help, he also seemed to be at a loss for an explanation as to why this error is occurring.
I tried modifying the code by breaking it into two interrupts one looking for RISING and FALLING rather than just CHANGE, but got the same result.

Thank you for your help, my code and a screenshot of the error in the serial monitor is attached.

(This is somewhat time sensitive and the sooner I can fix this glitch the sooner I can move on to more nuanced aspects of my installation so quick replies are appreciated.)

Interrupt_sketch_mar05a.ino (1.21 KB)

Screen Shot 2016-03-31 at 4.35.40 PM.png

I think the problem is that you're not debouncing the pad/button so a single press may cause multiple triggers of the ISR. So basically you need to disable the input for a little while(the length of time depends on the switch but 20-30 ms should do it) after the ISR is triggered. If you do some searching on the topic of debouncing you'll find lots of information of different ways to do this.

You don't need to use interrupts unless the event you are trying to capture is in the microseconds range.
Even Ussain Bolt's feet touch the ground for longer than that.
Use polling instead.

An example of debouncing an interrupt:

/*
  Jake Yanoviak 2016
  Aduino Code for CAMS Comps Installation

  This is modified code based on example code in the public domain.
*/
volatile int counter;
volatile unsigned long intervalTime = 0;
volatile unsigned long previousInterruptTime = 0;

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  attachInterrupt(digitalPinToInterrupt(2), interruptCount, CHANGE); // looks for any change in value of pin 2
  // if there is a change it calls the function interruptCount
  counter = 1; // sets the initial value of counter
}

// the loop routine runs over and over again forever:
void loop() {
  if (counter > 20)
  {
    counter = 1; // restarts the count once counter is greater than 20
  }

  // parser number for communicating with Isadora through the serial port:
  Serial.print(1, DEC);
  // Print out the value of counter:
  Serial.println(counter, DEC);
  // Pause for one second at the end of each loop. Frequent enough to provide real time info,
  // but not too fast it crashes Isadora
  delay(1000);
}

void interruptCount() {
  previousInterruptTime = intervalTime;
  intervalTime = micros();
  if (intervalTime - previousInterruptTime > 50000) { //50ms
    counter = counter + 1; // everytime the pad is stepped on or off the circuit is completed or broken
    // When this happens, the signal changes and this function is called
  }
}