足の操作でコード譜表示サイトをスクロールしながら弾き語りするためのデバイスを作成。
(自作デバイスで日常遣いしてるのはこれだけ)
スイッチ3つ。信号配置は以下の通り
Pin | 接続先 | 機能 |
---|---|---|
P0 | SW1(IN) | スクロールアップ |
P1 | SW2(IN) | 左スイッチ |
P2 | SW3(IN) | スクロールダウン |
P3 | NC | (USB D-) |
P4 | NC | (USB D+) |
P5 | NC | (Reset) |
Eagleをアンインストールしてしまったので回路図は割愛。
回路は@nak435様投稿の↓の記事の回路と同じ。
https://qiita.com/nak435/items/5e9320342729ae76e40d
P0,P2に繋がるSW1/SW2の反対側はGND。(INPUT_PULLUPで開放時H)
P1はLEDが繋がってるので PullUpせず、反対側は5Vに繋ぐ。
ソースコードは以下の通り。
#include <DigiMouse.h>
int step = -1;
void setup() {
pinMode( 0, INPUT_PULLUP);
pinMode( 1, INPUT);//PB1はLED繋がってる
pinMode( 2, INPUT_PULLUP);
DigiMouse.begin(); //start or reenumerate USB - BREAKING CHANGE from old versions that didn't require this
}
void leftkeyClick(int pin, int cond)
{
DigiMouse.setButtons(1);
//離されるのを待つ
while(cond==digitalRead(pin)){
DigiMouse.delay(10);
};
DigiMouse.setButtons(0);
}
void rightkeyClick(int pin, int cond)
{
DigiMouse.setButtons(-1);
//離されるのを待つ
while(cond==digitalRead(pin)){
DigiMouse.delay(10);
};
DigiMouse.setButtons(0);
}
void loop() {
// If not using plentiful DigiMouse.delay(), make sure to call
// DigiMouse.update() at least every 50ms
if( LOW==digitalRead(0)){ //コレはPULL-UP
DigiMouse.scroll(step);
} else if( LOW==digitalRead(2)){ //コレはPULL-UP
DigiMouse.scroll(-step);
}
else if(HIGH==digitalRead(1)){ //コレはPULL-DOWN
leftkeyClick(1, HIGH);
}
DigiMouse.delay(100);
}
以上