Blackberry Trackball 基板(icsh044a)を使う

Blackberry Trackball 基板(icsh044a)とPro Microを使ってマウスポインタを動かします。

icsh044aはこれです。
http://www.icstation.com/icstation-blackberry-cellphone-tracking-ball-trackball-breakout-board-module-icsh044a-b713-p-5646.html

動作電圧: 2.5~5.25V

上下左右それぞれの方向について回転信号(パルス)を出力します。

Pro MicroはATmega32U4というチップを使っていてUSBデバイスを簡単に作ることができます。

環境

  • Pro Micro (クローン)
  • Arduino

概要

2つの方法があります。1つはPro Microにある割り込み機能を使う方法、もう1つはタイマによって制御する方法です。

ボタンのクリックの反応はだいぶ怪しい。ソフトウェアで調整はできるかもしれない。
LED必要なかったので動作未確認。

割り込み機能を使って制御

Pro Microは0,1,2,3,7の5つのピンに対して割り込み機能が使えます。
参考:
https://garretlab.web.fc2.com/arduino_reference/language/functions/external_interrupts/attachInterrupt.html

このうち0,2,3,7を使います。ちなみにこの番号はピンの位置ではありません。
0はTX0、2は2、3は3、7は7と書いてある場所です。

注意

Pro Micro(クローン)は、ものによってはTX0の割り込みが使えないことがありました。

コード

パルスの立ち上がりをトリガとしてます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "Mouse.h"

void setup()
{
pinMode(0, INPUT);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(7, INPUT);
attachInterrupt(digitalPinToInterrupt(0), right_pulse, RISING);
attachInterrupt(digitalPinToInterrupt(2), left_pulse, RISING);
attachInterrupt(digitalPinToInterrupt(3), down_pulse, RISING);
attachInterrupt(digitalPinToInterrupt(7), up_pulse, RISING);
Mouse.begin();
}

void loop()
{

}

void right_pulse()
{
Mouse.move(30, 0, 0);
}

void left_pulse()
{
Mouse.move(-30, 0, 0);
}

void down_pulse()
{
Mouse.move(0, 30, 0);
}

void up_pulse()
{
Mouse.move(0, -30, 0);
}

タイマを使って制御

こちらが参考になります。

https://github.com/LSChyi/blackberry-mini-trackball

短時間で操作した場合は移動量を増やす処理が入っています。素晴らしい。

参考資料

AliExpressで買うと安いです。