Created
May 14, 2017 18:52
-
-
Save lazygyu/b2c36bd3bc91353ae7a626092ce55772 to your computer and use it in GitHub Desktop.
커스텀 키보드 아두이노 소스
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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