この記事は下記の続きです。
https://my-zukuri.com/wp/arduino-touchpanel-keyboard/
概要
キーボードとして操作可能になったタッチパネルを、マウス操作できるように変更します。
プログラムの修正
このプログラムではグローバル変数timerを定義してloopでカウントアップさせる動作を加えています。これが無いと、タッチパネルでマウス操作したあとに再度マウス操作しようとすると、 cur_x と cur_y が前の値を保持しているためマウスカーソルが移動してしまいます。(100は適当な値です)
- 定義追加
GT911_touch.ino
#include “Mouse.h”
#define SPD 2
int nxt_x;
int nxt_y;
int cur_x;
int cur_y;
int move_x=0;
int move_y=0;
int timer=0; //再度タッチしたときにマウスカーソルが飛ぶのを防ぐために使用
- void setup()を修正
ProMicroがマウスとしてPCから認識されるようになります。
GT911_touch.ino
void setup(){
︙
Mouse.begin();
}
- void handleTouch( )を修正
クリックは、2点タッチの検出で動作させるようにしています。
void handleTouch(int8_t contacts, GTPoint *points) {
if(timer==100{
cur_x = points[0].x;
cur_y = points[0].y;
}
timer = 0;
nxt_x = points[0].x;
nxt_y = points[0].y;
move_x = (cur_x – nxt_x)/2;
move_y = (cur_y – nxt_y)/2;
Mouse.move(SPD*move_x, SPD*move_y);
cur_x = nxt_x;
cur_y = nxt_y;
if(contacts == 2{
Mouse.press();
delay(50);
Mouse.release();
}
}
2点タッチするとクリックします。
- void loop( )を修正
void loop() {
if(timer < 100){
timer++;
}
touch.loop();
delay(1);
}
- 参考
今回のプログラムにおけるマウス操作は通常のマウスパッドのように、現在位置からの相対的に移動させましたが、絶対値でカーソルを移動させることもできます。こちらが参考になります。
https://jtakao.web.fc2.com/elec/leonardo_digitizer2/index.html
#include “Digitizer.h” 追加と、GT911_touch.inoと同ディレクトリにDigitizer.cppを配置で正常に動作することを確認しています。