Serial transmission duration different with serial monitor on and off...????

Ok, another question for the experts…

I found a multi-button debounce program online that is perfect for what i am looking for. When i run it with the serial monitor, i press a button, it outputs to the serial monitor for as long as i hold the button down (working perfectly). When i close the serial monitor, i press and release the button, the serial TX light stays on for an additional 5 seconds, and it is sending that data for a longer period of time than the button is pressed. Any ideas on why this would continue to send data?

Here is the code:

#define DEBOUNCE 10  // button debouncer, how many ms to debounce, 5+ ms is usually plenty

// here is where we define the buttons that we'll use. button "1" is the first, button "6" is the 6th, etc
byte buttons[] = {3,4,5,6}; // using digital pins 3,4,5,6
// This handy macro lets us determine how big the array up above is, by checking the size
#define NUMBUTTONS sizeof(buttons)
// we will track if a button is just pressed, just released, or 'currently pressed' 
volatile byte pressed[NUMBUTTONS], justpressed[NUMBUTTONS], justreleased[NUMBUTTONS];

void setup() {
  byte i;

  // set up serial port
 // Serial.print("Button checker with ");
 // Serial.print(NUMBUTTONS, DEC);
 // Serial.println(" buttons");

  // pin13 LED
  pinMode(13, OUTPUT);

  // Make input & enable pull-up resistors on switch pins
  for (i=0; i< NUMBUTTONS; i++) {
    pinMode(buttons[i], INPUT);
    digitalWrite(buttons[i], HIGH);

  // Run timer2 interrupt every 15 ms 
  TCCR2A = 0;
  TCCR2B = 1<<CS22 | 1<<CS21 | 1<<CS20;

  //Timer2 Overflow Interrupt Enable
  TIMSK2 |= 1<<TOIE2;



void check_switches()
  static byte previousstate[NUMBUTTONS];
  static byte currentstate[NUMBUTTONS];
  static long lasttime;
  byte index;

  if (millis() < lasttime) {
     // we wrapped around, lets just try again
     lasttime = millis();

  if ((lasttime + DEBOUNCE) > millis()) {
    // not enough time has passed to debounce
  // ok we have waited DEBOUNCE milliseconds, lets reset the timer
  lasttime = millis();

  for (index = 0; index < NUMBUTTONS; index++) {

    currentstate[index] = digitalRead(buttons[index]);   // read the button

    Serial.print(index, DEC);
    Serial.print(": cstate=");
    Serial.print(currentstate[index], DEC);
    Serial.print(", pstate=");
    Serial.print(previousstate[index], DEC);
    Serial.print(", press=");

    if (currentstate[index] == previousstate[index]) {
      if ((pressed[index] == LOW) && (currentstate[index] == LOW)) {
          // just pressed
          justpressed[index] = 1;
      else if ((pressed[index] == HIGH) && (currentstate[index] == HIGH)) {
          // just released
          justreleased[index] = 1;
      pressed[index] = !currentstate[index];  // remember, digital HIGH means NOT pressed
    //Serial.println(pressed[index], DEC);
    previousstate[index] = currentstate[index];   // keep a running tally of the buttons

void loop() {
  for (byte i = 0; i < NUMBUTTONS; i++) {
    if (justpressed[i]) {
      justpressed[i] = 0; //this sends a single serial Byte regardless of whether button is held down
      Serial.print(i+1);  //i+1 because we want the button "0" to be sent as button 1
      //Serial.println(" Just pressed");
      // remember, check_switches() will CLEAR the 'just pressed' flag
    if (justreleased[i]) {
      justreleased[i] = 0;
    //  Serial.print(i, DEC);
    //  Serial.println(" Just released");
      // remember, check_switches() will CLEAR the 'just pressed' flag
    if ((pressed[i]) && (i < 2)) { // want to stream serial data for button 1 and 2 while button is pressed 
      Serial.print(i+1, BYTE);  //i+1 because we want button "0' to be sent as button 1
      //Serial.println(" pressed");
      // is the button pressed down at this moment

Thanks guys!