10年ほど前にはじめて Kickstarter でファンドしたDigiSpark

とにかく小さいArduinoマイコン。 メモリは8K(プログラムは6K程度)なので、一発芸的な用途に向いている。

ということで、キー1個のキーボードを作ってみる。

3Dデータ

UI

通常押しで、 SPACE 長押しで、 RETURN

配線

PULL UP 抵抗が内蔵されているので、簡単。

  • P0 ... キースイッチの +
  • GND ... キースイッチの -

上の配線を、3Dプリントしたエンクロージャーで包む。

プログラム

one_key.cpp · Gistcpp
#include <Arduino.h>
#include <DigiKeyboard.h>
#include <DigiUSB.h>

#define SWITCH (0)
#define LED (1)

int _current_sw = 0;
int _changed_time = -1;

void setup()
{
  pinMode(SWITCH, INPUT_PULLUP);
  pinMode(LED, OUTPUT);
}

void loop()
{
  int sw;

  sw = digitalRead(SWITCH);
  int spent_time = millis() - _changed_time;

  if (_current_sw != sw)
  {
    //
    // change push status
    //
    if (sw)
    {
      // release button
      digitalWrite(LED, LOW);

      // handshake to PC
      DigiKeyboard.sendKeyStroke(0);
      if (_changed_time != -1)
      {

        if (spent_time > 500) // msec
        {
          // long push
          DigiKeyboard.sendKeyStroke(KEY_RETURN);
        }
        else
        {
          // short push
          DigiKeyboard.sendKeyStroke(KEY_SPACE);
        }
        _changed_time = -1;
      }
    }
    else
    {
      // push button
      digitalWrite(LED, HIGH);

      // save push button time
      _changed_time = millis();
    }
    _current_sw = sw;
  }
}

demo

痛恨!せっかくハンダ付けしたのに、Digistumpの故障?でプログラムが書き込めなくなってしまった。

デバッグ用の機器ではできるので、よしとする。。

かわいいは正義。