



// *** This is for Fujitsu Leaf Spring Board ***




#include <Bounce.h>
const int bounceDelay = 125;

// Row Wires (1 - 14)
Bounce wire1  = Bounce(0, bounceDelay);
Bounce wire2  = Bounce(1, bounceDelay);
Bounce wire3  = Bounce(2, bounceDelay);
Bounce wire4  = Bounce(3, bounceDelay);
Bounce wire5  = Bounce(4, bounceDelay);
Bounce wire6  = Bounce(17, bounceDelay);
Bounce wire7  = Bounce(26, bounceDelay);
Bounce wire8  = Bounce(25, bounceDelay);
Bounce wire9  = Bounce(24, bounceDelay);
Bounce wire10 = Bounce(23, bounceDelay);
Bounce wire11 = Bounce(22, bounceDelay);
Bounce wire12 = Bounce(21, bounceDelay);
Bounce wire13 = Bounce(20, bounceDelay);
Bounce wire14 = Bounce(19, bounceDelay);

//Column Wires (15 - 22)
Bounce wire15 = Bounce(18, bounceDelay);
Bounce wire16 = Bounce(38, bounceDelay);
Bounce wire17 = Bounce(39, bounceDelay);
Bounce wire18 = Bounce(40, bounceDelay);
Bounce wire19 = Bounce(41, bounceDelay);
Bounce wire20 = Bounce(42, bounceDelay);
Bounce wire21 = Bounce(43, bounceDelay);
Bounce wire22 = Bounce(44, bounceDelay);



boolean rShft;
boolean lShft;
boolean ctrlNoise;    // for ctrl single click
boolean lshftNoise;
boolean rshftNoise;
boolean fntNoise;
boolean newLockPress; //for ALPHA LOCK 


//ROWS are OUTPUT,  COLUMNS are INPUT (Rows Wires 1 - 14; Columns Wires 15-22)
void setup(){
  pinMode(0, OUTPUT);  // Wire # 1 
  pinMode(1, OUTPUT);  //        2
  pinMode(2, OUTPUT);  //        3
  pinMode(3, OUTPUT);  //        4
  pinMode(4, OUTPUT);  //        5
  pinMode(17, OUTPUT);  //        6
  pinMode(26, OUTPUT);  //        7
  pinMode(25, OUTPUT);  //       8
  pinMode(24, OUTPUT);  //       9
  pinMode(23, OUTPUT);  //       10
  pinMode(22, OUTPUT);  //       11
  pinMode(21, OUTPUT);  //      12
  pinMode(20, OUTPUT);  //      13
  pinMode(19, OUTPUT);  //      14 
  pinMode(18, INPUT_PULLUP);  //      15
  pinMode(38, INPUT_PULLUP);  //      16
  pinMode(39, INPUT_PULLUP);  //      17
  pinMode(40, INPUT_PULLUP);  //      18
  pinMode(41, INPUT_PULLUP);  //      19
  pinMode(42, INPUT_PULLUP);  //      20
  pinMode(43, INPUT_PULLUP);  //      21
  pinMode(44, INPUT_PULLUP);  //      22
  

  //Set initial subroutine boolean values
  newLockPress = true;
  ctrlNoise = true;
  lshftNoise = true;
  rshftNoise = true;
  fntNoise = true;
}
  // ROW 1 - 14 are WIRE 1-14 and PIN 0,1,2,3,4,17,26,25,24,23,22,21,20,19
  // COLUMN A - H are WIRE 15 - 22  and PIN 18,38,39,40,41,42,43,44

void loop(){
  // Write LOW to each OUTPUT pin (row), one at a time.
  // Check all INPUT pins (column) for a signal.
  

  // check for SHIFT, CTRL, FCTN, and/or ALPHA LOCK
  checkModifiers();
  
  // ------------------------------------------------------------------------------ Wire 1 @ PIN 0
  digitalWrite(0, LOW); 
  
  wire15.update();
  wire16.update();
  wire17.update();
  wire18.update();
  wire19.update();
  wire20.update();
  wire21.update();
  wire22.update();
 
                                  
 
   // ----------------------- KP 8
  if(wire15.fallingEdge()){
   Keyboard.press(KEYPAD_8);
   delay(100);
   Keyboard.release(KEYPAD_8);
   beep(); 
  } 
   
   // ----------------------- TAB
  if(wire16.fallingEdge()){
	  Keyboard.press(KEY_TAB);
	  delay(100);
    Keyboard.release(KEY_TAB);
    beep();
  }
  
	// ----------------------- ESC
  if(wire17.fallingEdge()){
	  Keyboard.press(KEY_ESC);
	  delay(100);
    Keyboard.release(KEY_ESC);
    beep();
   }
   
   	// ----------------------- BREAK
  if(wire18.fallingEdge()){
    Keyboard.press(KEY_ESC);
    delay(100);
    Keyboard.release(KEY_ESC);
    beep();
   }
    
    	// ----------------------- F1
  if(wire19.fallingEdge()){
    Keyboard.press(KEY_F1);
    delay(100);
    Keyboard.release(KEY_F1);
    beep();
   }
	
	
	// ----------------------- SPACE
  if(wire20.fallingEdge()){
    Keyboard.press(' ');
    delay(100);
    Keyboard.release(' ');
    beep();
   }
   
	// -----------------------  = (KP)
  if(wire21.fallingEdge()){
    Keyboard.press('=');
    delay(100);
    Keyboard.release('=');
    beep();
   }
	// ----------------------- 9 (KP)
  if(wire22.fallingEdge()){
    Keyboard.press(KEYPAD_9);
    delay(100);
    Keyboard.release(KEYPAD_9);
    beep();
   }


	// RESET Wire 1 to HIGH
	digitalWrite(0, HIGH);
	
	
	// ---------------------------------------------------------------------------- Wire 2 @ PIN 1
  digitalWrite(1, LOW); 
  
  wire15.update();
  wire16.update();
  wire17.update();
  wire18.update();
  wire19.update();
  wire20.update();
  wire21.update();
  wire22.update();
 
  

  
   
   // ----------------------- F9
  if(wire15.fallingEdge()){
   Keyboard.press(KEY_F9);
   delay(100);
   Keyboard.release(KEY_F9);
   beep(); 
  } 
  
   // ----------------------- F2
  if(wire16.fallingEdge()){
    Keyboard.press(KEY_F2);
    delay(100);
    Keyboard.release(KEY_F2);
    beep();  
    } 
  
   // ----------------------- F3
  if(wire17.fallingEdge()){
   Keyboard.press(KEY_F3);
   delay(100);
   Keyboard.release(KEY_F3);
   beep();  
  } 
  
   // ----------------------- F4
  if(wire18.fallingEdge()){
    Keyboard.press(KEY_F4);
    delay(100);
    Keyboard.release(KEY_F4);
   beep(); 
  } 
    
   // ----------------------- F5
  if(wire19.fallingEdge()){
   Keyboard.press(KEY_F5);
   delay(100);
   Keyboard.release(KEY_F5);
   beep();  
  } 
  
   // ----------------------- F6
  if(wire20.fallingEdge()){
   Keyboard.press(KEY_F6);
   delay(100);
   Keyboard.release(KEY_F6);
   beep(); 
  } 
  
   
  //------------------------- F7
  if(wire21.fallingEdge()){
   Keyboard.press(KEY_F7);
   delay(100);
   Keyboard.release(KEY_F7);
   beep(); 
  } 
  
    // ----------------------- F8
  if(wire22.fallingEdge()){
	  Keyboard.press(KEY_F8);
    delay(100);
	  Keyboard.release(KEY_F8);
    beep();
	}

  
  //Reset Wire 2 to HIGH 
  digitalWrite(1, HIGH);


  // ---------------------------------------------------------------------------- Wire 3 @ PIN 2
  digitalWrite(2, LOW); 
  
  wire15.update();
  wire16.update();
  wire17.update();
  wire18.update();
  wire19.update();
  wire20.update();
  wire21.update();
  wire22.update();
  
 
  
  // Wire15 empty on this row
 
  
  // ----------------------- F10
  if(wire16.fallingEdge()){
   Keyboard.press(KEY_F10);
   delay(100);
   Keyboard.release(KEY_F10); 
   beep();
  }
  
  // ----------------------- F11
  if(wire17.fallingEdge()){
   Keyboard.press(KEY_F11);
   delay(100);
   Keyboard.release(KEY_F11); 
   beep();
  }
  
  // ----------------------- F12
  if(wire18.fallingEdge()){
   Keyboard.press(KEY_F12);
   delay(100);
   Keyboard.release(KEY_F12); 
   beep();
  }
  
  // ----------------------- F13 (Print Screen)
  if(wire19.fallingEdge()){
   Keyboard.press(KEY_PRINTSCREEN);
   delay(100);
   Keyboard.release(KEY_PRINTSCREEN); 
   beep();
  }
  
  // ----------------------- F14 (Scroll Lock)
  if(wire20.fallingEdge()){
     Keyboard.press(KEY_SCROLL_LOCK);
     delay(100);
     Keyboard.release(KEY_SCROLL_LOCK); 
     beep();
  }
  
 	// ----------------------- F15 (Pause)
  if(wire21.fallingEdge()){
	  Keyboard.press(KEY_PAUSE);
    delay(100);
    Keyboard.release(KEY_PAUSE);
    beep();
	}
  
  // ----------------------- F16 (Num Lock)
  if(wire22.fallingEdge()){
    Keyboard.press(KEY_NUM_LOCK);
    delay(100);
    Keyboard.release(KEY_NUM_LOCK);
    beep();
  }

  
  // Reset Wire 3 to HIGH
  digitalWrite(2, HIGH);
 
  
  // -------------------------------------------------------------------------------------- Wire 4 @ PIN 3
  digitalWrite(3, LOW); 
  
  wire15.update();
  wire16.update();
  wire17.update();
  wire18.update();
  wire19.update();
  wire20.update();
  wire21.update();
  wire22.update();
 
  
  

 
  
   // ----------------------- 8*
  if(wire15.fallingEdge()){
   Keyboard.press('8');
   delay(100);
   Keyboard.release('8');
   beep();
  }
  
   // ----------------------- 1!
  if(wire16.fallingEdge()){
   Keyboard.press('1');
   delay(100);
   Keyboard.release('1');
   beep();
  }
    
   // ----------------------- 2@
  if(wire17.fallingEdge()){
   Keyboard.press('2');
   delay(100);
   Keyboard.release('2');
   beep();
  }
  
   // ----------------------- 3#
  if(wire18.fallingEdge()){
   Keyboard.press('3');
   delay(100);
   Keyboard.release('3');
   beep();
  }
  
   // ----------------------- 4$
  if(wire19.fallingEdge()){
   Keyboard.press('4');
   delay(100);
   Keyboard.release('4');
   beep();
  }
  
   // ----------------------- 5%  
  if(wire20.fallingEdge()){
   Keyboard.press('5');
   delay(100);
   Keyboard.release('5');
   beep();
  }


  // ------------------------- 6
   if(wire21.fallingEdge()){
    Keyboard.press('6');
    delay(100);
    Keyboard.release('6');
    beep();
  }
  	// ----------------------- 7&
 if(wire22.fallingEdge()){
   Keyboard.press('7');
   delay(100);
   Keyboard.release('7');
   beep();
  }

    
 
  
  
  // Reset Wire4 to HIGH
  digitalWrite(3, HIGH);

  
  // --------------------------------------------------------------------------------------- Wire 5 @ PIN 4
  digitalWrite(4, LOW); 
  
  // wire15.update();
  wire16.update();
  wire17.update();
  wire18.update();
  wire19.update();
  wire20.update();
  wire21.update();
  wire22.update();
 
 


      // Wire15 RIGHT SHIFT IN CHECK MODIFIERS SUBROUTINE
  
  
   // ----------------------- 9(
  if(wire16.fallingEdge()){
   Keyboard.press('9');
   delay(100);
   Keyboard.release('9');
   beep(); 
  }
  
   // ----------------------- 0)
  if(wire17.fallingEdge()){
   Keyboard.press('0');
   delay(100);
   Keyboard.release('0');
   beep(); 
  }
  
   // ----------------------- -_
  if(wire18.fallingEdge()){
   Keyboard.press('-');
   delay(100);
   Keyboard.release('-');
   beep(); 
  } 
  
   // ----------------------- =+
  if(wire19.fallingEdge()){
   Keyboard.press('=');
   delay(100);
   Keyboard.release('=');
   beep(); 
  } 
  
   // ----------------------- `~
  if(wire20.fallingEdge()){
   Keyboard.press('`');
   delay(100);
   Keyboard.release('`');
   beep(); 
  } 


   // ----------------------- INS
  if(wire21.fallingEdge()){
   Keyboard.press(KEY_INSERT);
   delay(100);
   Keyboard.release(KEY_INSERT);
   beep(); 
  } 
    
   //------------------------ CLS						
  if(wire22.fallingEdge()){
   Keyboard.press(KEY_BACKSPACE);
   delay(100);
   Keyboard.release(KEY_BACKSPACE);
   beep(); 
  } 
  


  
    // Reset Wire5 to HIGH     
  digitalWrite(4, HIGH);


// ------------------------------------------------------------------------------ Wire 6 @ PIN 17
   digitalWrite(17, LOW); 
  
  wire15.update();
  wire16.update();
  wire17.update();
  wire18.update();
  wire19.update();
  wire20.update();
  wire21.update();
  wire22.update();
 
                                  
 
   
  // ------------------------ Wire 15 @ PIN 18:  "Alt"
  if ((digitalRead(18) == LOW)){          //Reading column on PIN 18 Wire15)             *****   keep ALT pressed until digitalRead of key is no longer 0 (LOW)   *****
  Keyboard.press(KEY_LEFT_ALT); 
    if(fntNoise == true){                 //                                  ***** Single click for ALT *****
    beep();
    fntNoise = false;
    }
  } else {
    Keyboard.release(KEY_LEFT_ALT);
    fntNoise = true; 
   }


   
   // ----------------------- * KP
  if(wire16.fallingEdge()){
  Keyboard.press(KEYPAD_ASTERIX);
  delay(100);
    Keyboard.release(KEYPAD_ASTERIX);
    beep();
  }
  
  // ----------------------- 1 KP
  if(wire17.fallingEdge()){
  Keyboard.press(KEYPAD_1);
  delay(100);
    Keyboard.release(KEYPAD_1);
    beep();
   }
   
    // ----------------------- 2 KP
  if(wire18.fallingEdge()){
  Keyboard.press(KEYPAD_2);
  delay(100);
    Keyboard.release(KEYPAD_2);
    beep();
   }
    
      // ----------------------- 3 KP
  if(wire19.fallingEdge()){
  Keyboard.press(KEYPAD_3);
  delay(100);
    Keyboard.release(KEYPAD_3);
    beep();
   }
  
  
  // -----------------------RETURN (KP)
  if(wire20.fallingEdge()){
  Keyboard.press(KEYPAD_ENTER);
  delay(100);
    Keyboard.release(KEYPAD_ENTER);
    beep();
   }
   
  // -----------------------  0 KP
  if(wire21.fallingEdge()){
  Keyboard.press(KEYPAD_0);
  delay(100);
    Keyboard.release(KEYPAD_0);
    beep();
   }
  // ----------------------- . KP
  if(wire22.fallingEdge()){
  Keyboard.press(KEYPAD_PERIOD);
  delay(100);
    Keyboard.release(KEYPAD_PERIOD);
    beep();
   }


  // RESET Wire 6 to HIGH
  digitalWrite(17, HIGH);


  // ------------------------------------------------------------------------------ Wire 7 @ PIN 26
  digitalWrite(18, HIGH);
  digitalWrite(26, LOW); 
  
  wire15.update();
  wire16.update();
  wire17.update();
  wire18.update();
  wire19.update();
  wire20.update();
  wire21.update();
  wire22.update();
 
                                  
 
   // ----------------------- KP /
  if(wire15.fallingEdge()){
   Keyboard.press(KEYPAD_SLASH);
   delay(100);
   Keyboard.release(KEYPAD_SLASH);
   beep(); 
  } 
   
   // Wire16 empty thid row
  

  
  // Wire17 empty this row
  

   
    // Wire18 this row empty this row
  

    
      //Wire19 empty this row
 

  
  // Wire20 empty this row
  

   
  // -----------------------  - (KP)
  if(wire21.fallingEdge()){
  Keyboard.press(KEYPAD_MINUS);
  delay(100);
    Keyboard.release(KEYPAD_MINUS);
    beep();
   }
  // ----------------------- + (KP)
  if(wire22.fallingEdge()){
  Keyboard.press(KEYPAD_PLUS);
  delay(100);
    Keyboard.release(KEYPAD_PLUS);
    beep();
   }


  // RESET Wire 7 to HIGH
  digitalWrite(26, HIGH);

  // ------------------------------------------------------------------------------ Wire 8 @ PIN 25
  digitalWrite(25, LOW); 
  
  wire15.update();
  wire16.update();
  wire17.update();
  wire18.update();
  wire19.update();
  wire20.update();
  wire21.update();
  wire22.update();
 
                                  
 
   // ----------------------- i
  if(wire15.fallingEdge()){
   Keyboard.press('i');
   delay(100);
   Keyboard.release('i');
   beep(); 
  } 
   
   // ----------------------- q
  if(wire16.fallingEdge()){
  Keyboard.press('q');
  delay(100);
    Keyboard.release('q');
    beep();
  }
  
  // ----------------------- w
  if(wire17.fallingEdge()){
  Keyboard.press('w');
  delay(100);
    Keyboard.release('w');
    beep();
   }
   
    // ----------------------- e
  if(wire18.fallingEdge()){
  Keyboard.press('e');
  delay(100);
    Keyboard.release('e');
    beep();
   }
    
      // ----------------------- r
  if(wire19.fallingEdge()){
  Keyboard.press('r');
  delay(100);
    Keyboard.release('r');
    beep();
   }
  
  
  // ----------------------- t
  if(wire20.fallingEdge()){
  Keyboard.press('t');
  delay(100);
    Keyboard.release('t');
    beep();
   }
   
  // -----------------------  y
  if(wire21.fallingEdge()){
  Keyboard.press('y');
  delay(100);
    Keyboard.release('y');
    beep();
   }
  // ----------------------- u
  if(wire22.fallingEdge()){
  Keyboard.press('u');
  delay(100);
    Keyboard.release('u');
    beep();
   }


  // RESET Wire 8 to HIGH
  digitalWrite(25, HIGH);
  

 
   
// ------------------------------------------------------------------------------ Wire  9 PIN 24
  digitalWrite(24, LOW); 
  
  wire15.update();
  wire16.update();
  wire17.update();
  wire18.update();
  wire19.update();
  wire20.update();
  wire21.update();
  wire22.update();
 
                                  
 
   // Wire15 caps lock addressed in checkModifiers subroutine
   // ----------------------- Caps Lock
  if(wire15.fallingEdge()){
  Keyboard.press(KEY_CAPS_LOCK);
  delay(100);
    Keyboard.release(KEY_CAPS_LOCK);
    beep();
  }
   
   // ----------------------- o
  if(wire16.fallingEdge()){
  Keyboard.press('o');
  delay(100);
    Keyboard.release('o');
    beep();
  }
  
  // ----------------------- p
  if(wire17.fallingEdge()){
  Keyboard.press('p');
  delay(100);
    Keyboard.release('p');
    beep();
   }
   
    // ----------------------- [
  if(wire18.fallingEdge()){
  Keyboard.press('[');
  delay(100);
    Keyboard.release('[');
    beep();
   }
    
      // ----------------------- ]
  if(wire19.fallingEdge()){
  Keyboard.press(']');
  delay(100);
    Keyboard.release(']');
    beep();
   }
  
  
  // ----------------------- BACKSPACE
  if(wire20.fallingEdge()){
  Keyboard.press(KEY_BACKSPACE);
  delay(100);
    Keyboard.release(KEY_BACKSPACE);
    beep();
   }
   
  // -----------------------  EL
  if(wire21.fallingEdge()){
  Keyboard.press(KEY_PAGE_DOWN);
  delay(100);
    Keyboard.release(KEY_PAGE_DOWN);
    beep();
   }
  // ----------------------- DUP
  if(wire22.fallingEdge()){
  Keyboard.press(KEY_PAGE_UP);
  delay(100);
    Keyboard.release(KEY_PAGE_UP);
    beep();
   }


  // RESET Wire 9 to HIGH
  digitalWrite(24, HIGH);


  // ------------------------------------------------------------------------------ Wire 10 @ PIN 23
  digitalWrite(23, LOW); 
  
  wire15.update();
  wire16.update();
  wire17.update();
  wire18.update();
  wire19.update();
  wire20.update();
  wire21.update();
  wire22.update();
 
                                  
 
   // ----------------------- k
  if(wire15.fallingEdge()){
   Keyboard.press('k');
   delay(100);
   Keyboard.release('k');
   beep(); 
  } 
   
   // ----------------------- a
  if(wire16.fallingEdge()){
  Keyboard.press('a');
  delay(100);
    Keyboard.release('a');
    beep();
  }
  
  // ----------------------- s
  if(wire17.fallingEdge()){
  Keyboard.press('s');
  delay(100);
    Keyboard.release('s');
    beep();
   }
   
    // ----------------------- d
  if(wire18.fallingEdge()){
  Keyboard.press('d');
  delay(100);
    Keyboard.release('d');
    beep();
   }
    
      // ----------------------- f
  if(wire19.fallingEdge()){
  Keyboard.press('f');
  delay(100);
    Keyboard.release('f');
    beep();
   }
  
  
  // ----------------------- g
  if(wire20.fallingEdge()){
  Keyboard.press('g');
  delay(100);
    Keyboard.release('g');
    beep();
   }
   
  // ----------------------- h
  if(wire21.fallingEdge()){
  Keyboard.press('h');
  delay(100);
    Keyboard.release('h');
    beep();
   }
  // ----------------------- j)
  if(wire22.fallingEdge()){
  Keyboard.press('j');
  delay(100);
    Keyboard.release('j');
    beep();
   }


  // RESET Wire 10 to HIGH
  digitalWrite(23, HIGH);


  // ------------------------------------------------------------------------------ Wire 11 @ PIN 22
  digitalWrite(22, LOW); 
  
  wire15.update();
  wire16.update();
  wire17.update();
  wire18.update();
  wire19.update();
  wire20.update();
  wire21.update();
  wire22.update();
 
                                  
 
   // Wire15 CTRL addressed in checkModifiers subroutine
  
   
   // ----------------------- L
  if(wire16.fallingEdge()){
  Keyboard.press('l');
  delay(100);
    Keyboard.release('l');
    beep();
  }
  
  // ----------------------- ;:
  if(wire17.fallingEdge()){
    Keyboard.press(';');
    delay(100);
    Keyboard.release(';');
    beep();
   }
   
    // ----------------------- '"
  if(wire18.fallingEdge()){
    Keyboard.press('\'');
    delay(100);
    Keyboard.release('\'');
    beep();
   }
    
      // ----------------------- \|
  if(wire19.fallingEdge()){
    Keyboard.press('\\');
    delay(100);
    Keyboard.release('\\');
    beep();
   }
  
  
  // ----------------------- RETURN (MAIN)
  if(wire20.fallingEdge()){
    Keyboard.press(KEY_RETURN);
    delay(100);
    Keyboard.release(KEY_RETURN);
    beep();
   }
   
  // -----------------------  DEL
  if(wire21.fallingEdge()){
    Keyboard.press(KEY_DELETE);
    delay(100);
    Keyboard.release(KEY_DELETE);
    beep();
   }
  // ----------------------- HOME
  if(wire22.fallingEdge()){
    Keyboard.press(KEY_HOME);
    delay(100);
    Keyboard.release(KEY_HOME);
    beep();
   }


  // RESET Wire 11 to HIGH
  digitalWrite(22, HIGH);


  // ------------------------------------------------------------------------------ Wire 12 @ PIN 21
  digitalWrite(21, LOW); 
  
  wire15.update();
  wire16.update();
  wire17.update();
  wire18.update();
  wire19.update();
  wire20.update();
  wire21.update();
  wire22.update();
 
                                  
 
   // ----------------------- GRAPH
  if(wire15.fallingEdge()){
   Keyboard.press(KEY_END);
   delay(100);
   Keyboard.release(KEY_END);
   beep(); 
  } 
   
   // ----------------------- 7 KP
  if(wire16.fallingEdge()){
    Keyboard.press(KEYPAD_7);
    delay(100);
    Keyboard.release(KEYPAD_7);
    beep();
  }
  
  // ----------------------- 4 KP
  if(wire17.fallingEdge()){
    Keyboard.press(KEYPAD_4);
    delay(100);
    Keyboard.release(KEYPAD_4);
    beep();
   }
   
    // ----------------------- 5 KP
  if(wire18.fallingEdge()){
    Keyboard.press(KEYPAD_5);
    delay(100);
    Keyboard.release(KEYPAD_5);
    beep();
   }
    
      // ----------------------- 6 KP
  if(wire19.fallingEdge()){
    Keyboard.press(KEYPAD_6);
    delay(100);
    Keyboard.release(KEYPAD_6);
    beep();
   }
  
  
  // ----------------------- , KP
  if(wire20.fallingEdge()){
    Keyboard.press(',');
    delay(100);
    Keyboard.release(',');
    beep();
   }
   
  // -----------------------  LEFT ARROW
  if(wire21.fallingEdge()){
    Keyboard.press(KEY_LEFT_ARROW);
    delay(100);
    Keyboard.release(KEY_LEFT_ARROW);
    beep();
   }
  // ----------------------- RIGHT ARROW
  if(wire22.fallingEdge()){
    Keyboard.press(KEY_RIGHT_ARROW);
    delay(100);
    Keyboard.release(KEY_RIGHT_ARROW);
    beep();
   }


  // RESET Wire 12 to HIGH
  digitalWrite(21, HIGH);


  // ------------------------------------------------------------------------------ Wire 13 @ PIN 20
  digitalWrite(20, LOW); 
  
  wire15.update();
  wire16.update();
  wire17.update();
  wire18.update();
  wire19.update();
  wire20.update();
  wire21.update();
  wire22.update();
 
                                  
 
   // ----------------------- , <
  if(wire15.fallingEdge()){
   Keyboard.press(',');
   delay(100);
   Keyboard.release(',');
   beep(); 
  } 
   
   // ----------------------- z
  if(wire16.fallingEdge()){
    Keyboard.press('z');
    delay(100);
    Keyboard.release('z');
    beep();
  }
  
  // ----------------------- x
  if(wire17.fallingEdge()){
    Keyboard.press('x');
    delay(100);
    Keyboard.release('x');
    beep();
   }
   
    // ----------------------- c
  if(wire18.fallingEdge()){
    Keyboard.press('c');
    delay(100);
    Keyboard.release('c');
    beep();
   }
    
      // ----------------------- v
  if(wire19.fallingEdge()){
    Keyboard.press('v');
    delay(100);
    Keyboard.release('v');
    beep();
   }
  
  
  // ----------------------- b
  if(wire20.fallingEdge()){
    Keyboard.press('b');
    delay(100);
    Keyboard.release('b');
    beep();
   }
   
  // -----------------------  n
  if(wire21.fallingEdge()){
    Keyboard.press('n');
    delay(100);
    Keyboard.release('n');
    beep();
   }
  // ----------------------- m
  if(wire22.fallingEdge()){
    Keyboard.press('m');
    delay(100);
    Keyboard.release('m');
    beep();
   }


  // RESET Wire 13 to HIGH
  digitalWrite(20, HIGH);


  // ------------------------------------------------------------------------------ Wire 14 @ PIN 19
  digitalWrite(19, LOW); 
  
  wire15.update();
  wire16.update();
  wire17.update();
  wire18.update();
  wire19.update();
  wire20.update();
  wire21.update();
  wire22.update();
 
                                  
 
   // Wire15 LEFT SHIFT addressed in checkModifiers subroutine
 
   
   // ----------------------- .>
  if(wire16.fallingEdge()){
    Keyboard.press('.');
    delay(100);
    Keyboard.release('.');
    beep();
  }
  
  // ----------------------- /?
  if(wire17.fallingEdge()){
    Keyboard.press('/');
    delay(100);
    Keyboard.release('/');
    beep();
   }
   
    // ----------------------- 'blank'
  if(wire18.fallingEdge()){
    Keyboard.press(KEY_RETURN);
    delay(100);
    Keyboard.release(KEY_RETURN);
    beep();
   }
    
      // Wire19 empty on this row
  

  
  
     // Wire20 empty on this row
 
   
  // -----------------------  UP ARROW
  if(wire21.fallingEdge()){
    Keyboard.press(KEY_UP_ARROW);
    delay(100);
    Keyboard.release(KEY_UP_ARROW);
    beep();
   }
   
  // ----------------------- DOWN ARROW
  if(wire22.fallingEdge()){
    Keyboard.press(KEY_DOWN_ARROW);
    delay(100);
    Keyboard.release(KEY_DOWN_ARROW);
    beep();
   }


  // RESET Wire 14 to HIGH
  digitalWrite(19, HIGH);
   
 

}


//------------------------------------------------  MODIFIER KEYS
void checkModifiers(){ 

  
  // ------------------------ Wire 14          PIN 19: L SHIFT
  digitalWrite(19, LOW); //PIN 19 (Wire14)
  wire9.update();
  wire22.update();
  if ((digitalRead(18) == 0)){           // Reading PIN18 (Wire15) ***** Long press LShift *****
   Keyboard.press(KEY_LEFT_SHIFT);
   lShft = true;
   if(lshftNoise == true){                                          
      beep();
      lshftNoise = false;
   } 
  } else {
    Keyboard.release(KEY_LEFT_SHIFT);
   lShft = false; 
   lshftNoise = true;
  }
  digitalWrite(19, HIGH);
  

  digitalWrite(18,HIGH);   //reset column
  
  digitalWrite(4, LOW); // Wire 5 pin 4
  wire15.update();
  if ((digitalRead(18) == 0)){           // Reading  PIN18  (Wire15) ***** Long press RShift) ***** LShift won't work now in keychecks still using boolean "shft" check due to "shft = false" after Keyboard.relase(KEY_RIGHT_SHIFT) *****
     Keyboard.press(KEY_RIGHT_SHIFT);
   rShft = true;
   if(rshftNoise == true){                                          
      beep();
      rshftNoise = false;
   }  
  } else {
    Keyboard.release(KEY_RIGHT_SHIFT);
   rShft = false; 
   rshftNoise = true;
  }
  digitalWrite(4, HIGH);
  digitalWrite(18, HIGH);  //  try resetting column to high
  wire15.update();
  
  
  digitalWrite(24, HIGH);
 
   
  // ------------------------ Wire 11 @ PIN 22: ctrl
  digitalWrite(22, LOW);
  wire15.update();
  if(digitalRead(18) == 0){            //Reading PIN18 (Wire15)             *****   keep CTRL pressed until digitalRead of key is no longer 0 (LOW)   *****
   Keyboard.press(KEY_LEFT_CTRL); 
    if(ctrlNoise == true){                 //                                  ***** Single click for CTRL *****
	    beep();
      ctrlNoise = false;
   }
  } else {
   Keyboard.release(KEY_LEFT_CTRL);
   ctrlNoise = true; 
  }
  digitalWrite(22, HIGH);
}

void beep(){
  tone(13, 500, 5);  //(pin,freq,duration)
}














