ユーザ用ツール

サイト用ツール


キーボード

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
キーボード [2025/04/21 07:56] masatokキーボード [2025/04/21 07:57] (現在) masatok
行 2: 行 2:
  
 {{:key.png?400|}} {{: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;
 +  }
 +}
 +
キーボード.txt · 最終更新: by masatok