I'm trying to build a keyboard, but board is getting disconnected and reconnected after OutCol 11 get's high. What could be causing this?
#include <usb_keyboard.h>
int LongPressDelay = 350;
int SpamSpeed = 15;
byte InRow[] = { 0, 1, 2, 3, 4, 5 };
const int InCount = 6;
byte OutCol[] = { 6, 7, 8, 9, 10, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 34 };
const int OutCount = 17;
/*
const char* layout[6][17] = {
{"KEY_F1" ,"KEY_F1" ,"KEY_ESC" ,"KEY_F1" ,"KEY_F2" ,"KEY_F3" ,"KEY_F4" ,"KEY_F5" ,"KEY_F6" ,"KEY_F7" ,"KEY_F8" ,"KEY_F9" ,"KEY_F10" ,"KEY_F11" ,"KEY_F12" ,"KEY_INSERT" ,"KEY_HOME" },
{"KEY_F1" ,"KEY_F2" ,"KEY_TILDE" ,"KEY_1" ,"KEY_2" ,"KEY_3" ,"KEY_4" ,"KEY_5" ,"KEY_6" ,"KEY_7" ,"KEY_8" ,"KEY_9" ,"KEY_0" ,"KEY_MINUS" ,"KEY_EQUAL" ,"KEY_BACKSPACE" ,"KEY_END" },
{"KEY_F1" ,"KEY_F2" ,"KEY_TAB" ,"KEY_Q" ,"KEY_W" ,"KEY_E" ,"KEY_R" ,"KEY_T" ,"KEY_Y" ,"KEY_U" ,"KEY_I" ,"KEY_O" ,"KEY_P" ,"KEY_LEFT_BRACE" ,"KEY_RIGHT_BRACE" ,"KEY_BACKSLASH" ,"KEY_DELETE" },
{"KEY_F1" ,"KEY_F2" ,"KEY_CAPS_LOCK" ,"KEY_A" ,"KEY_S" ,"KEY_D" ,"KEY_F" ,"KEY_G" ,"KEY_H" ,"KEY_J" ,"KEY_K" ,"KEY_L" ,"KEY_SEMICOLON","0" ,"KEY_QUOTE" ,"KEY_ENTER" ,"KEY_PAGE_UP" },
{"KEY_F1" ,"KEY_F2" ,"KEY_LEFT_SHIFT" ,"KEY_Z" ,"KEY_X" ,"KEY_C" ,"KEY_V" ,"KEY_B" ,"KEY_N" ,"KEY_M" ,"KEY_COMMA","KEY_PERIOD" ,"KEY_SLASH" ,"0" ,"KEY_RIGHT_SHIFT" ,"KEY_UP" ,"KEY_PAGE_DOWN"},
{"KEY_F1" ,"KEY_F2" ,"KEY_LEFT_CTRL" ,"KEY_LEFT_GUI" ,"KEY_LEFT_ALT" ,"0" ,"0" ,"KEY_SPACE" ,"0" ,"0" ,"0" ,"KEY_RIGHT_ALT" ,"KEY_RIGHT_GUI","0" ,"KEY_LEFT" ,"KEY_DOWN" ,"KEY_RIGHT" }
};
const int layout[6][17] = {
{KEY_F1 ,KEY_F1 ,KEY_ESC ,KEY_F1 ,KEY_F2 ,KEY_F3 ,KEY_F4 ,KEY_F5 ,KEY_F6 ,KEY_F7 ,KEY_F8 ,KEY_F9 ,KEY_F10 ,KEY_F11 ,KEY_F12 ,KEY_INSERT ,KEY_HOME },
{KEY_F1 ,KEY_F2 ,KEY_TILDE ,KEY_1 ,KEY_2 ,KEY_3 ,KEY_4 ,KEY_5 ,KEY_6 ,KEY_7 ,KEY_8 ,KEY_9 ,KEY_0 ,KEY_MINUS ,KEY_EQUAL ,KEY_BACKSPACE ,KEY_END },
{KEY_F1 ,KEY_F2 ,KEY_TAB ,KEY_Q ,KEY_W ,KEY_E ,KEY_R ,KEY_T ,KEY_Y ,KEY_U ,KEY_I ,KEY_O ,KEY_P ,KEY_LEFT_BRACE ,KEY_RIGHT_BRACE ,KEY_BACKSLASH ,KEY_DELETE },
{KEY_F1 ,KEY_F2 ,KEY_CAPS_LOCK ,KEY_A ,KEY_S ,KEY_D ,KEY_F ,KEY_G ,KEY_H ,KEY_J ,KEY_K ,KEY_L ,KEY_SEMICOLON,0 ,KEY_QUOTE ,KEY_ENTER ,KEY_PAGE_UP },
{KEY_F1 ,KEY_F2 ,KEY_LEFT_SHIFT ,KEY_Z ,KEY_X ,KEY_C ,KEY_V ,KEY_B ,KEY_N ,KEY_M ,KEY_COMMA,KEY_PERIOD ,KEY_SLASH ,0 ,KEY_RIGHT_SHIFT ,KEY_UP ,KEY_PAGE_DOWN},
{KEY_F1 ,KEY_F2 ,KEY_LEFT_CTRL ,KEY_LEFT_GUI ,KEY_LEFT_ALT ,0 ,0 ,KEY_SPACE ,0 ,0 ,0 ,KEY_RIGHT_ALT ,KEY_RIGHT_GUI,0 ,KEY_LEFT ,KEY_DOWN ,KEY_RIGHT }
};
*/
const uint8_t layout[6][17] = {
{104 ,41 ,41 ,58 ,59 ,60 ,61 ,62 ,63 ,64 ,65 ,66 ,67 ,68 ,69 ,73 ,74 },
{105 ,21 ,53 ,30 ,31 ,32 ,33 ,34 ,35 ,36 ,37 ,38 ,39 ,45 ,46 ,42 ,77 },
{106 ,21 ,43 ,20 ,26 ,8 ,21 ,23 ,28 ,24 ,12 ,18 ,19 ,47 ,48 ,49 ,76 },
{107 ,21 ,57 ,4 ,22 ,7 ,9 ,10 ,11 ,13 ,14 ,15 ,51 ,52 ,0 ,40 ,75 },
{108 ,21 ,0x02,29 ,27 ,6 ,25 ,5 ,17 ,16 ,54 ,55 ,56 ,0 ,0x20,82 ,78 },
{109 ,21 ,0x01,0x08,0x04,0 ,0 ,44 ,0 ,0 ,0 ,0x40,0x80,0 ,80 ,81 ,79 }
};
int KeyDown[6][17];
bool KeyLong[6][17];
void setup() {
for(int i = 0; i < OutCount; i++){
pinMode(OutCol[i],OUTPUT);
digitalWrite(OutCol[i],LOW);
}
for(int i = 0; i < InCount; i++){
pinMode(InRow[i],INPUT_PULLUP);
}
Keyboard.begin();
}
void loop() {
for(int i = 0; i < OutCount; i++){
digitalWrite(OutCol[i],HIGH);
delayMicroseconds(1000);
Seirial.print(i);
for(int j = 0; j < InCount; j++){
if(digitalRead(InRow[j]) == LOW)
{
KeyPressed(i,j);
}
else if(KeyDown[i][j] != 0){
resetKey(i,j);
}
}
digitalWrite(OutCol[i],LOW);
pinMode(OutCol[i],INPUT);
delayMicroseconds(500);
}
}
void KeyPressed(int row, int col){
Serial.print("Output: ");
Serial.print(row);
Serial.print("Input: ");
Serial.print(col);
Serial.print(" ");
Serial.println(layout[row][col]);
if(KeyDown[row][col] == 0){
Keyboard.write(layout[row][col]);
}
else if(KeyLong[row][col] && KeyDown[row][col] > SpamSpeed){
usb_keyboard_press(layout[row][col],0);
KeyDown[row][col] = 1;
}
else if(KeyDown[row][col] > LongPressDelay){
KeyLong[row][col] = true;
}
KeyDown[row][col]++;
}
void resetKey(int row, int col){
KeyDown[row][col] = 0;
KeyLong[row][col] = false;
}