#include "Keyboard.h" uint8_t IP[4] = {15, 14, 16, 10}; uint8_t OP[8] = {18, 19, 4, 5, 6, 7, 8, 9}; //英語キーボードとして扱われるので記号を変換する const char keyMap[7][3] = { {'7', '4', KEY_F4}, {'5', '6', ':'}, // : → + {'_', '8', KEY_F3}, // _ → = {'/', '9', KEY_F2}, {'\"', '-', KEY_F1}, // " → * {'3', KEY_RETURN, '.'}, {'2', '1', '0'}, }; const char keyMapExt[2] = {KEY_BACKSPACE, KEY_LEFT_SHIFT}; uint8_t keyStat[7][3]; uint8_t keyStatExt[2]; uint8_t keyin; void setup() { Keyboard.begin(); pinMode(IP[0], INPUT_PULLUP); pinMode(IP[1], INPUT_PULLUP); pinMode(IP[2], INPUT_PULLUP); pinMode(IP[3], INPUT_PULLUP); pinMode(OP[0], OUTPUT); pinMode(OP[1], OUTPUT); pinMode(OP[2], OUTPUT); pinMode(OP[3], OUTPUT); pinMode(OP[4], OUTPUT); pinMode(OP[5], OUTPUT); pinMode(OP[6], OUTPUT); pinMode(OP[7], OUTPUT); for(int i=0; i<8; i++) digitalWrite(OP[i], HIGH); //前回押されたキーの状態リセット for(int i=0; i<7; i++) for(int j=0; j<3; j++) keyStat[i][j] = 1; keyStatExt[0] = 1; keyStatExt[1] = 1; } void loop() { pinMode(OP[7], INPUT); //ハイインピーダンスにする pinMode(OP[0], OUTPUT); //clearキー digitalWrite(OP[0], LOW); delay(1); //信号線の状態が安定するのを待つ keyin = digitalRead(IP[0]); if(keyin != keyStatExt[0]) { if(keyin) Keyboard.release(keyMapExt[0]); else Keyboard.press(keyMapExt[0]); keyStatExt[0] = keyin; } //shiftキー keyin = digitalRead(IP[3]); if(keyin != keyStatExt[1]) { if(keyin) Keyboard.release(keyMapExt[1]); else Keyboard.press(keyMapExt[1]); keyStatExt[1] = keyin; } //その他のキー for(int i=0; i<7; i++) { pinMode(OP[i], INPUT); //ハイインピーダンスにする pinMode(OP[i+1], OUTPUT); digitalWrite(OP[i+1], LOW); delay(1); //信号線の状態が安定するのを待つ for(int j=0; j<3; 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; } } }