====== キーボードの動作模倣 ====== {{:key.png?400|}} #include "Keyboard.h" const int KEYIN[] = { 8, 9 }; const int KEYOUT[] = { 2, 3, 4, 5 }; unsigned long previousMillis = 0; const long interval = 30; int columnNum = 0; int sw[4][2] = { 0 }; char keyMap[4][2] = { { 'A', 'B' }, { 'C', 'D' }, { 'E', 'F' }, { 'G', 'H' } }; void setup() { for (int i = 0; i < 4; i++) { pinMode(KEYOUT[i], OUTPUT); digitalWrite(KEYOUT[i], LOW); } for (int i = 0; i < 2; i++) { pinMode(KEYIN[i], INPUT); } Keyboard.begin(); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; digitalWrite(KEYOUT[columnNum], HIGH); for (int rowNum = 0; rowNum < 2; rowNum++) { int readValue = digitalRead(KEYIN[rowNum]); if (readValue != sw[columnNum][rowNum] && readValue == HIGH) { keyPress(keyMap[columnNum][rowNum]); } sw[columnNum][rowNum] = readValue; delay(10); Keyboard.releaseAll(); } digitalWrite(KEYOUT[columnNum], LOW); columnNum++; columnNum %= 4; } } void keyPress(char key) { switch (key) { case 'A': Keyboard.write('p'); Keyboard.write('r'); Keyboard.write('i'); Keyboard.write('n'); Keyboard.write('t'); Keyboard.write('('); Keyboard.write(')'); break; case 'B': Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_RIGHT_ARROW); break; case 'C': Keyboard.press(KEY_LEFT_GUI); Keyboard.press('/'); break; case 'D': Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_LEFT_ARROW); break; case 'E': Keyboard.press(KEY_LEFT_GUI); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('j'); break; case 'F': Keyboard.press(KEY_LEFT_GUI); Keyboard.press(KEY_RIGHT_ARROW); break; case 'G': Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('i'); break; case 'H': Keyboard.press(KEY_LEFT_GUI); Keyboard.press(KEY_LEFT_ARROW); break; default: break; } }