#include "Keyboard.h" #define AC 10 uint8_t IP[5] = {16, 14, 6, 5, 4}; uint8_t OP[5] = {9, 8, 7, 3, 2}; const char keyMap[5][5] = { {0x62, 0x2B, 0x5B, 0x5A, 0x59}, //Num0,Tab,Num3,Num2,Num1 {0x65, 0x63, 0x5E, 0x5D, 0x5C}, //App,Num.,Num6,Num5,Num4 {0x5F, 0, 0x56, 0x61, 0x60}, //Num7,,Num-,Num9,Num8 {0x58, 0, 0x55, 0x54, 0xE7}, //NumEnter,,Num*,Num/,RightGUI {0x29, 0, 0x57, 0x2A, 0xE3} //Esc,,Num+,Backspace,GUI }; uint8_t keyStat[5][5]; uint8_t keyStatExt; //ACキー uint8_t keyin; void setup() { for(int i=0; i<5; i++) pinMode(IP[i], INPUT_PULLUP); for(int i=0; i<5; i++) pinMode(OP[i], INPUT); //ハイインピーダンスにする pinMode(AC, INPUT); //ハイインピーダンスにする //キーの状態リセット for(int i=0; i<5; i++) for(int j=0; j<5; j++) keyStat[i][j] = 1; keyStatExt = 1; } void loop() { for(int i=0; i<5; i++) { pinMode(OP[i], OUTPUT); digitalWrite(OP[i], LOW); delay(1); //信号線の状態が安定するのを待つ for(int j=0; j<5; j++) { keyin = digitalRead(IP[j]); if(keyin != keyStat[i][j]) { if(keyin) Keyboard.release(keyMap[i][j]); else Keyboard.press(keyMap[i][j]); keyStat[i][j] = keyin; } } pinMode(OP[i], INPUT); //ハイインピーダンスにする } pinMode(AC, OUTPUT); digitalWrite(AC, LOW); delay(1); //信号線の状態が安定するのを待つ keyin = digitalRead(IP[2]); if(keyin != keyStatExt) { //NumLock if(keyin) Keyboard.release(0x53); else Keyboard.press(0x53); keyStatExt = keyin; } pinMode(AC, INPUT); //ハイインピーダンスにする }