Board keeps getting disconnected

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;
}

Disconnected from what? Plugs flying out?

What's it connected to?

Please post a schematic and the code.

a7

What "board" do you write about? It cannot be the standard UNO because you have pins numbered higher than 20.

Above code won't compile.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.