ユーザ用ツール

サイト用ツール


キーボード

キーボードの動作模倣

#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;
}

}

キーボード.txt · 最終更新: by masatok