Skip to content

Instantly share code, notes, and snippets.

@lazygyu
Created May 14, 2017 18:52
Show Gist options
  • Save lazygyu/b2c36bd3bc91353ae7a626092ce55772 to your computer and use it in GitHub Desktop.
Save lazygyu/b2c36bd3bc91353ae7a626092ce55772 to your computer and use it in GitHub Desktop.
커스텀 키보드 아두이노 소스
#include <Keyboard.h>
int vPins[] = {A2, A3, A4, A5, 14};
int hPins[] = {11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, A0, 13, A1};
unsigned char keys[5][15] = {
{KEY_ESC, '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '=', '0', KEY_BACKSPACE, '\0' },
{KEY_TAB, 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', '[', ']', 'p', KEY_HOME, '\\' },
{KEY_LEFT_CTRL, 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', '\'', KEY_RETURN, ';', KEY_END},
{KEY_LEFT_SHIFT, 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', KEY_RIGHT_SHIFT, KEY_UP_ARROW, '/', KEY_DELETE},
{KEY_LEFT_GUI, KEY_LEFT_ALT, '\0', '\0', '\0', ' ', '\0', '\0', KEY_RIGHT_ALT, '\0', KEY_LEFT_ARROW,KEY_DOWN_ARROW, KEY_RIGHT_CTRL, KEY_RIGHT_ARROW}
};
unsigned char fnKeys[5][15] = {
{'`', KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F11, KEY_F12, KEY_F10, KEY_BACKSPACE, '\0'},
{KEY_TAB, 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', '[', ']', 'p', KEY_PAGE_UP, '\\' },
{KEY_LEFT_CTRL, 'a', 's', 'd', 'f', 'g', KEY_LEFT_ARROW, KEY_DOWN_ARROW, KEY_UP_ARROW, KEY_RIGHT_ARROW, '\'', KEY_RETURN, ';', KEY_PAGE_DOWN},
{KEY_LEFT_SHIFT, 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', KEY_RIGHT_SHIFT, KEY_UP_ARROW, '/', KEY_INSERT},
{KEY_LEFT_GUI, KEY_LEFT_ALT, '\0', '\0', '\0', ' ', '\0', '\0', KEY_RIGHT_ALT, '\0', KEY_LEFT_ARROW,KEY_DOWN_ARROW, KEY_RIGHT_CTRL, KEY_RIGHT_ARROW}
};
bool keyDowns[5][15] = {
{false,},{false,},{false,},{false,},{false,}
};
void setup() {
// put your setup code here, to run once:
for(char x =0; x < 5; x++){
pinMode(vPins[x], INPUT_PULLUP);
}
for(char x = 0; x < 15; x++){
pinMode(hPins[x], OUTPUT);
digitalWrite(hPins[x], HIGH);
}
Keyboard.begin();
}
bool fn = false;
void loop() {
int val = 0;
unsigned char ch = 0;
fn = false;
digitalWrite(3, LOW);
fn |= !digitalRead(14);
digitalWrite(3, HIGH);
digitalWrite(10, LOW);
fn |= !digitalRead(14);
digitalWrite(10, HIGH);
// put your main code here, to run repeatedly:
for(char x = 0; x < 15; x++){
digitalWrite(hPins[x], LOW);
for(char y=0;y<5;y++){
val = digitalRead(vPins[y]);
ch = fn ? fnKeys[y][x]:keys[y][x];
if( ch == '\0' ) continue;
if(!val ){
Keyboard.press(ch);
keyDowns[y][x] = true;
}else if(keyDowns[y][x]){
Keyboard.release(keys[y][x]);
Keyboard.release(fnKeys[y][x]);
keyDowns[y][x] = false;
}
val = 0;
}
digitalWrite(hPins[x], HIGH);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment