LoginSignup
0
0

More than 3 years have passed since last update.

Digisparkで果物をエンターキーにしてみた

Posted at

ビッグエンターキーという無駄にデカいエンターキーがありますが、どんなものでもエンターキーになれば面白いんじゃないかと思ったので、果物や野菜など何でもエンターキーになるHIDデバイスを作ってみました。

環境

Arduino IDE 1.8.13
Digispark互換ボード

回路図

enter-key-circuit.png
0番ピンが送信ピンで、2番ピンが受信ピンになっています。0番ピンと2番ピンのの間には1MΩの抵抗が入っています。2番ピンと直列に0.1μFのコンデンサーをつなぎ、果物を接続します。

スケッチ

enterkey.ino
#include <DigiKeyboard.h>

#define REPEAT_TIME 25
#define FIRST_REPEAT_TIME 500
#define KEYUP_THRESHOLD 50
#define KEYDOWN_THRESHOLD 75
#define OUT_PIN 0
#define IN_PIN 2

unsigned long timer = 0;
int keytimes = 0;

void setup() {
  pinMode(OUT_PIN, OUTPUT);
  pinMode(IN_PIN, INPUT);
}

int get_touch() {
  int t = 0;
  int i;
  for(i = 0; i < 10; i++){
    digitalWrite(OUT_PIN, HIGH);
    while(digitalRead(IN_PIN) != HIGH) t++;
    digitalWrite(OUT_PIN, LOW);
    pinMode(IN_PIN, OUTPUT);
    digitalWrite(IN_PIN, LOW);
    DigiKeyboard.delay(1);
    pinMode(IN_PIN, INPUT);
  }
  return t;
}

void loop() {
  int touch = get_touch();
  if(touch > KEYDOWN_THRESHOLD && (timer == 0 || keytimes >= 2)){
    DigiKeyboard.sendKeyStroke(0x28);
    DigiKeyboard.delay(REPEAT_TIME);
    keytimes = min(keytimes + 1, 2);
    timer = millis();
  }else{
    if(touch <= KEYUP_THRESHOLD){
      timer = 0;
      keytimes = 0;
    }
    DigiKeyboard.sendKeyStroke(0);
    DigiKeyboard.delay(REPEAT_TIME);
  }
  if(millis() >= timer + FIRST_REPEAT_TIME){
    timer = 0;
  }
}

書き込み

Arduino開発環境の設定方法はこの記事を参考にしてください。
[メモ] Digispark(ATTiny85) Arduino開発環境で、Lチカ

設定が終わったら、Arduino IDEで
ツール > ボード > Digispark (Default - 16.5mhz)を選択します。
マイコンボードに書き込むをクリック。USBを抜き差しすると書き込みができます。

デモ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0