CleanUpGuys

Arduino Keyboard Code

Sep 26th, 2020 (edited)
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.28 KB | None | 0 0
  1. unsigned int KEY_LEFTCURLYBRACE = (unsigned int)('{');
  2. unsigned int KEY_RIGHTCURLYBRACE = (unsigned int)('}');
  3. unsigned int KEY_SMALLERTHAN = (unsigned int)('<');
  4. unsigned int KEY_BIGGERTHAN = (unsigned int)('>');
  5. unsigned int KEY_WQUOTE = (unsigned int)('`');
  6. unsigned int KEY_COLON = (unsigned int)(':');
  7. unsigned int KEY_QUESTIONMAKR = (unsigned int)('?');
  8. unsigned int KEY_TILDE_M = (unsigned int)('~');
  9. unsigned int KEY_DOUBLEQUOTE = (unsigned int)('"');
  10. unsigned int KEY_BAR = (unsigned int)('|');
  11.  
  12. int Pressed[] = {false,false,false,false,false,false,false,false,false,false,false,false,false,
  13.                  false,false,false,false,false,false,false,false,false,false,false,false,false,
  14.                  false,false,false,false,false,false,false,false,false,false,false,false,false,
  15.                  false,false,false,false,false,false,false,false,false,false,false,false,false,
  16.                  false,false,false,false,false,false,false,false,false,false,false,false,false};
  17.                  
  18. unsigned int Keys[] = {0, MODIFIERKEY_GUI,MODIFIERKEY_CTRL ,MODIFIERKEY_ALT ,0,0,0,KEY_SPACE,MODIFIERKEY_RIGHT_ALT,MODIFIERKEY_RIGHT_CTRL,KEY_LEFT,KEY_DOWN,KEY_RIGHT,
  19.               0,MODIFIERKEY_RIGHT_SHIFT,0,KEY_Z,KEY_X,KEY_C,KEY_V,KEY_B,KEY_N,KEY_M,MODIFIERKEY_LEFT_SHIFT,KEY_UP,0,
  20.               0,KEY_A,KEY_CAPS_LOCK,KEY_S,KEY_D,KEY_F,KEY_G,KEY_H,KEY_J,KEY_K,KEY_L,KEY_ENTER,0,
  21.               0,KEY_Q,KEY_TAB,KEY_W,KEY_E,KEY_R,KEY_T,KEY_Y,KEY_U,KEY_I,KEY_O,KEY_P,KEY_BACKSPACE,
  22.               KEY_ESC,KEY_2,KEY_1,KEY_3,KEY_4,KEY_5,KEY_6,KEY_7,KEY_8,KEY_9,KEY_0,KEY_MINUS,KEY_EQUAL};
  23.  
  24. unsigned int KeysFn[] = {0, MODIFIERKEY_GUI,MODIFIERKEY_CTRL ,MODIFIERKEY_ALT ,0,0,0,KEY_SPACE,MODIFIERKEY_RIGHT_ALT,MODIFIERKEY_RIGHT_CTRL,KEY_LEFT,KEY_DOWN,KEY_RIGHT,
  25.               0,MODIFIERKEY_RIGHT_SHIFT,0,KEY_F9,KEY_F10,KEY_F11,KEY_F12,KEY_END,KEY_PAGE_DOWN,KEY_BAR,MODIFIERKEY_LEFT_SHIFT,KEY_UP,0,
  26.               0,KEY_F5,KEY_CAPS_LOCK,KEY_F6,KEY_F7,KEY_F8,KEY_INSERT,KEY_HOME,KEY_PAGE_UP,KEY_SLASH,KEY_BACKSLASH,KEY_ENTER,0,
  27.               0,KEY_F1,KEY_TAB,KEY_F2,KEY_F3,KEY_F4,KEY_T,KEY_PRINTSCREEN,KEY_U,KEY_TILDE_M,KEY_DOUBLEQUOTE,KEY_QUOTE,KEY_DELETE,
  28.               KEY_ESC,KEY_LEFT_BRACE,KEY_WQUOTE,KEY_RIGHT_BRACE,KEY_LEFTCURLYBRACE,KEY_RIGHTCURLYBRACE,KEY_SMALLERTHAN,KEY_BIGGERTHAN,KEY_SEMICOLON,KEY_COLON,KEY_QUESTIONMAKR,KEY_COMMA,KEY_PERIOD};
  29.  
  30. unsigned int KeysPr[] = {0, MODIFIERKEY_GUI,MODIFIERKEY_CTRL ,MODIFIERKEY_ALT ,0,0,0,KEY_SPACE,KEY_HOME,KEY_END,KEY_LEFT,KEY_DOWN,KEY_RIGHT,
  31.               0,MODIFIERKEY_RIGHT_SHIFT,0,KEY_Z,KEY_X,KEY_C,KEY_V,KEY_B,KEY_N,KEY_M,KEY_EQUAL,KEY_UP,0,
  32.               0,KEY_A,KEY_CAPS_LOCK,KEY_S,KEY_D,KEY_F,KEY_G,KEY_H,KEY_J,KEY_K,KEY_L,KEY_ENTER,0,
  33.               0,KEY_Q,KEY_TAB,KEY_W,KEY_E,KEY_R,KEY_T,KEY_Y,KEY_U,KEY_I,KEY_O,KEY_P,KEY_BACKSPACE,
  34.               KEY_ESC,KEY_2,KEY_1,KEY_3,KEY_QUOTE,KEY_DOUBLEQUOTE,KEY_SMALLERTHAN,KEY_BIGGERTHAN,KEY_SEMICOLON,KEY_COLON,KEY_QUESTIONMAKR,KEY_COMMA,KEY_PERIOD};
  35.  
  36. bool IsCaps[] = {false,false,false,false,false,false,false,false,false,false,false,false,false,
  37.                  false,false,false,false,false,false,false,false,false,false,false,false,false,
  38.                  false,false,true,false,false,false,false,false,false,false,false,false,false,
  39.                  false,false,false,false,false,false,false,false,false,false,false,false,false,
  40.                  false,false,false,false,false,false,false,false,false,false,false,false,false};
  41.  
  42. bool IsFn[] = {false,false,false,false,false,false,false,false,false,false,false,false,false,
  43.                false,false,false,false,false,false,false,false,false,false,false,false,true,
  44.                false,false,false,false,false,false,false,false,false,false,false,false,false,
  45.                false,false,false,false,false,false,false,false,false,false,false,false,false,
  46.                false,false,false,false,false,false,false,false,false,false,false,false,false};
  47.  
  48. bool IsPr[] = {false,false,false,false,false,false,false,false,false,false,false,false,false,
  49.                false,false,false,false,false,false,false,false,false,false,false,false,false,
  50.                false,false,false,false,false,false,false,false,false,false,false,false,true,
  51.                false,false,false,false,false,false,false,false,false,false,false,false,false,
  52.                false,false,false,false,false,false,false,false,false,false,false,false,false};
  53.  
  54. bool isRowInput = false;
  55.  
  56.  
  57. const int RowCount = 5;
  58. const int ColCount = 13;
  59. const int Rows[] = {0, 1, 2, 3, 4};
  60. const int Cols[] = {5,6,7,8,9,10,12 ,13 ,14 ,15 ,16 ,17, 18};
  61.  
  62. bool CapsLockOn = false;
  63. const int CapsLED = 11;
  64. bool FnOn = false;
  65. const int FnLED = 19;
  66. bool PrOn = false;
  67. const int PrLED = 20;
  68.  
  69. void setup()
  70. {
  71.   Serial.begin(9600);
  72.   Serial.println("Startin up...");
  73.   pinMode(CapsLED, OUTPUT);
  74.   pinMode(FnLED, OUTPUT);
  75.   pinMode(PrLED, OUTPUT);
  76.   digitalWrite(CapsLED, LOW);
  77.   digitalWrite(FnLED, LOW);
  78.   digitalWrite(PrLED, LOW);
  79.  
  80.   for (int i = 0; i < RowCount; i++)
  81.   {
  82.     if(isRowInput)
  83.     {
  84.       pinMode(Rows[i], INPUT);
  85.       digitalWrite(Rows[i], HIGH);
  86.     }
  87.     else
  88.     {
  89.       pinMode(Rows[i], OUTPUT);
  90.       digitalWrite(Rows[i], LOW);
  91.     }
  92.    
  93.   }
  94.   for (int i = 0; i < ColCount; i++)
  95.   {
  96.     if(isRowInput)
  97.     {
  98.       pinMode(Cols[i], OUTPUT);
  99.       digitalWrite(Cols[i], LOW);
  100.     }
  101.     else
  102.     {
  103.       pinMode(Cols[i], INPUT);
  104.       digitalWrite(Cols[i], HIGH);
  105.     }
  106.   }
  107.   Keyboard.begin();
  108. }
  109.  
  110. int Map(int row, int col)
  111. {
  112.   return ((13 * row) + col);
  113. }
  114.  
  115. bool CheckButton(int Row, int Col)
  116. {
  117.   if(isRowInput)
  118.   {
  119.     for(int i = 0; i < ColCount; i++)
  120.     {
  121.       digitalWrite(Cols[i], HIGH);
  122.     }
  123.     digitalWrite(Cols[Col], LOW);
  124.     return digitalRead(Rows[Row]) == LOW;
  125.   }
  126.   else
  127.   {
  128.     for(int i = 0; i < RowCount; i++)
  129.     {
  130.       digitalWrite(Rows[i], HIGH);
  131.     }
  132.     digitalWrite(Rows[Row], LOW);
  133.     return digitalRead(Cols[Col]) == LOW;
  134.   }
  135. }
  136.  
  137. void Run()
  138. {
  139.   for(int i = 0; i < RowCount; i++)
  140.   {
  141.     for(int j = 0; j < ColCount; j++)
  142.     {
  143.       if(CheckButton(i,j) && !Pressed[Map(i,j)])
  144.       {
  145.         Serial.print("[");
  146.         Serial.print(i);
  147.         Serial.print(",");
  148.         Serial.print(j);
  149.         Serial.println("] is Pressed!");
  150.         if(FnOn)
  151.         {
  152.           Keyboard.press(KeysFn[Map(i,j)]);
  153.         }
  154.         else
  155.         {
  156.           if(PrOn)
  157.           {
  158.             Keyboard.press(KeysPr[Map(i,j)]);
  159.           }
  160.           else
  161.           {
  162.             Keyboard.press(Keys[Map(i,j)]);
  163.           }
  164.         }
  165.         Pressed[Map(i,j)] = true;
  166.         if (IsCaps[Map(i,j)])
  167.           CapsLockOn = !CapsLockOn;
  168.         if(IsFn[Map(i,j)])
  169.           FnOn = !FnOn;
  170.         if(IsPr[Map(i,j)])
  171.           PrOn = !PrOn;
  172.       }
  173.       if(!CheckButton(i,j))
  174.       {
  175.         Keyboard.release(KeysFn[Map(i,j)]);
  176.         Keyboard.release(KeysPr[Map(i,j)]);
  177.         Keyboard.release(  Keys[Map(i,j)]);
  178.         Pressed[Map(i,j)] = false;
  179.       }
  180.     }
  181.   }
  182. }
  183.  
  184. void SetLED()
  185. {
  186.   if(CapsLockOn)
  187.   {
  188.     digitalWrite(CapsLED, HIGH);
  189.   }
  190.   else
  191.   {
  192.     digitalWrite(CapsLED, LOW);
  193.   }
  194.   if(FnOn)
  195.   {
  196.     digitalWrite(FnLED, HIGH);
  197.   }
  198.   else
  199.   {
  200.     digitalWrite(FnLED, LOW);
  201.   }
  202.   if(PrOn)
  203.   {
  204.     digitalWrite(PrLED, HIGH);
  205.   }
  206.   else
  207.   {
  208.     digitalWrite(PrLED, LOW);
  209.   }
  210. }
  211.  
  212. void loop()
  213. {
  214.   Run();
  215.   SetLED();
  216. }
Advertisement
Add Comment
Please, Sign In to add comment