キーボード
文書の過去の版を表示しています。
キーボードの動作模倣
#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;
}
}
キーボード.1745222272.txt.gz · 最終更新: (外部編集)

