【M5Stack_Core2】タッチライブラリ使ってみた
サンプルスケッチにいくつか処理を追加
わかったこと、タッチパネルの機能はほとんど使ってない。ジェスチャに関しては、収得ポイントを使ってライブラリで行っている。F/Wの機能は使っていない。
#include <M5Core2.h> #include <touch.h> #define ESP32 // 画面を上下2分割してジェスチャスタート、エンドポイントとする TouchZone topHalf(0,0,320,120); // 上側 TouchZone bottomHalf(0,120,320,160); // 下側 TouchZone leftHalf(0,0,160,240); // 上側 TouchZone rigthHalf(160,120,160,240); // 下側 Gesture swipeDown(topHalf, bottomHalf, "Swipe Down"); // ソフトジェスチャ(↓) Gesture swipeUp(bottomHalf, topHalf, "Swipe Up"); // ソフトジェスチャ(↑) Gesture swipeLeft(rigthHalf, leftHalf, "Swipe Left"); // ソフトジェスチャ(←) Gesture swipeRight( leftHalf, rigthHalf, "Swipe Rigth"); // ソフトジェスチャ(→) // 画面を4分割してボタンとして割り振る TouchButton lt = TouchButton(0, 0, 160, 120, "left-top"); // 左上 TouchButton lb = TouchButton(0, 120, 160, 120, "left-bottom"); // 左下 TouchButton rt = TouchButton(160, 0, 160, 120, "right-top"); // 右上 TouchButton rb = TouchButton(160, 120, 160, 120, "right-bottom"); // 右下 void setup() { M5.begin(); M5.Touch.addHandler(eventDisplay); // イベント発生したら実行 M5.Touch.addHandler(colorButtons, TE_BTNONLY + TE_TOUCH + TE_RELEASE); swipeDown.addHandler(yayWeSwiped_down); // スタートポイントからエンドポイントに移動したら実行 swipeUp.addHandler(yayWeSwiped_up); // スタートポイントからエンドポイントに移動したら実行 swipeLeft.addHandler(yayWeSwiped_left); // スタートポイントからエンドポイントに移動したら実行 swipeRight.addHandler(yayWeSwiped_right); // スタートポイントからエンドポイントに移動したら実行 rt.addHandler(dblTapped, TE_DBLTAP); // 右上ゾーンイベントのダブルクリックが発生したら実行 } void loop() { // ループは、アップデートのみ。つまり、タッチのコールバックに登録されたファンクションで処理が行われている。 M5.update(); } void eventDisplay(TouchEvent& e) { Serial.printf("%-12s finger%d %-18s (%3d, %3d)", M5.Touch.eventTypeName(e), e.finger, M5.Touch.eventObjName(e), e.from.x, e.from.y); if (e.type != TE_TOUCH && e.type != TE_TAP && e.type != TE_DBLTAP) { Serial.printf("--> (%3d, %3d) %5d ms", e.to.x, e.to.y, e.duration); } Serial.println(); } void colorButtons(TouchEvent& e) { TouchButton& b = *e.button; M5.Lcd.fillRect(b.x, b.y, b.w, b.h, b.isPressed() ? WHITE : BLACK); } void yayWeSwiped_down(TouchEvent& e) { Serial.println("--- SWIPE DOWN DETECTED ---"); } void yayWeSwiped_up(TouchEvent& e) { Serial.println("--- SWIPE UP DETECTED ---"); } void yayWeSwiped_right(TouchEvent& e) { Serial.println("--- SWIPE RIGHT DETECTED ---"); } void yayWeSwiped_left(TouchEvent& e) { Serial.println("--- SWIPE LEFT DETECTED ---"); } void dblTapped(TouchEvent& e) { Serial.println("--- TOP RIGHT BUTTON WAS DOUBLETAPPED ---"); }
TE_TOUCH タッチした(接触した)
TE_TOUCH finger0 left-bottom (110, 196) TE_RELEASE finger0 left-bottom (110, 196)--> (110, 196) 13 ms TE_TAP finger0 left-bottom (110, 196) TE_TOUCH finger0 left-bottom ( 81, 208) TE_RELEASE finger0 left-bottom ( 81, 208)--> ( 81, 208) 52 ms TE_TAP finger0 left-bottom ( 81, 208) TE_TOUCH finger0 left-bottom ( 51, 227) TE_RELEASE finger0 left-bottom ( 51, 227)--> ( 51, 227) 26 ms TE_TAP finger0 left-bottom ( 51, 227) TE_TOUCH finger0 left-bottom ( 34, 220) TE_RELEASE finger0 left-bottom ( 34, 220)--> ( 34, 220) 39 ms TE_TAP finger0 left-bottom ( 34, 220)
パネルに接触時に発生
TE_MOVE 移動した(スワイプ)
TE_TOUCH finger0 left-top ( 6, 107) TE_MOVE finger0 left-top ( 6, 107)--> ( 10, 107) 13 ms TE_MOVE finger0 left-top ( 10, 107)--> ( 15, 107) 26 ms TE_MOVE finger0 left-top ( 15, 107)--> ( 22, 107) 52 ms TE_MOVE finger0 left-top ( 22, 107)--> ( 30, 107) 65 ms TE_MOVE finger0 left-top ( 30, 107)--> ( 39, 107) 91 ms TE_MOVE finger0 left-top ( 39, 107)--> ( 48, 107) 104 ms TE_MOVE finger0 left-top ( 48, 107)--> ( 57, 107) 117 ms TE_MOVE finger0 left-top ( 57, 107)--> ( 66, 107) 143 ms TE_MOVE finger0 left-top ( 66, 107)--> ( 75, 107) 156 ms TE_MOVE finger0 left-top ( 75, 107)--> ( 84, 107) 169 ms TE_RELEASE finger0 left-top ( 6, 107)--> ( 84, 107) 195 ms TE_PRESSED finger0 left-top ( 6, 107)--> ( 84, 107) 203 ms
タッチしてスワイプして離した。スワイプ中はTE_MOVEが発生
TE_RELEASE ジェスチャー後ある程度時間がたった?
ほかのイベントみればわかるがほとんど指を離したイベントで発生している。 タップとダブルタップでは発生してないので、ある程度の継続時間が必要かも。 PRESSEDでは発生している。
TE_GESTURE ジェスチャーした
TE_TOUCH finger0 left-top (153, 61) TE_MOVE finger0 left-top (153, 61)--> (153, 70) 39 ms TE_MOVE finger0 left-top (153, 70)--> (153, 85) 52 ms TE_MOVE finger0 left-top (153, 85)--> (153, 106) 78 ms TE_MOVE finger0 left-top (153, 106)--> (153, 137) 91 ms TE_MOVE finger0 left-top (153, 137)--> (153, 157) 117 ms TE_RELEASE finger0 left-top (153, 61)--> (153, 157) 130 ms TE_GESTURE finger0 Swipe Down (153, 61)--> (153, 157) 130 ms --- SWIPE DOWN DETECTED ---
上から下にスワイプした
TE_TAP シングルタップ 短く叩いた
TE_TOUCH finger0 left-bottom (108, 151) TE_TAP finger0 left-bottom (120, 149) TE_RELEASE finger0 left-bottom (108, 151)--> (108, 151) 26 ms
クリックした
TE_DBLTAP ダブルタップ 二回叩いた
TE_TOUCH finger0 left-bottom (135, 128) TE_RELEASE finger0 left-bottom (135, 128)--> (135, 128) 26 ms TE_DBLTAP finger0 left-bottom (135, 128)
ダブルクリップした
TE_DRAGGED ボタンからボタンへ移動(ドラッグ)
TE_TOUCH finger0 left-top ( 96, 62) TE_MOVE finger0 left-top ( 96, 62)--> ( 96, 69) 13 ms TE_MOVE finger0 left-top ( 96, 69)--> ( 96, 81) 39 ms TE_MOVE finger0 left-top ( 96, 81)--> ( 96, 97) 52 ms TE_MOVE finger0 left-top ( 96, 97)--> ( 96, 114) 65 ms TE_MOVE finger0 left-top ( 96, 114)--> ( 96, 133) 91 ms TE_RELEASE finger0 left-top ( 96, 62)--> ( 96, 133) 104 ms TE_DRAGGED finger0 left-top ( 96, 62)--> ( 96, 133) 112 ms
スワイプなんだけど、画面四分割でボタン化しているのでその間を挟んでドラックしたイメージ
TE_PRESSED 離した(指が離れた)
TE_TOUCH finger0 left-bottom (108, 191) TE_RELEASE finger0 left-bottom (108, 191)--> (108, 191) 585 ms TE_PRESSED finger0 left-bottom (108, 191)--> (108, 191) 593 ms
クリックより遅い感じで離した
マルチタッチ
TE_TAP finger0 right-bottom (273, 156) TE_TOUCH finger0 left-top ( 88, 57) TE_TOUCH finger1 left-bottom ( 73, 191) TE_MOVE finger1 left-bottom ( 73, 191)--> ( 73, 190) 178 ms TE_MOVE finger1 left-bottom ( 73, 190)--> ( 73, 189) 269 ms TE_RELEASE finger1 left-bottom ( 73, 191)--> ( 73, 189) 477 ms TE_PRESSED finger1 left-bottom ( 73, 191)--> ( 73, 189) 485 ms TE_RELEASE finger0 left-top ( 88, 57)--> ( 88, 57) 511 ms TE_PRESSED finger0 left-top ( 88, 57)--> ( 88, 57) 519 ms
finger0 が、1本指目、finger1が2本指目。
TE_MOVE finger1 left-bottom (261, 222)--> (319, 229) 143 ms TE_RELEASE finger1 left-bottom (135, 206)--> (319, 229) 156 ms TE_GESTURE finger1 Swipe Rigth (135, 206)--> (319, 229) 156 ms --- SWIPE RIGHT DETECTED --- TE_RELEASE finger0 left-top (124, 57)--> (124, 57) 1417 ms TE_PRESSED finger0 left-top (124, 57)--> (124, 57) 1425 ms
2本指目のイベントはほとんどできるけど、スワイプUP/DOWNは厳しい。1本目の影響がないY軸ラインにいないとできないのかも。
TE_TOUCH finger0 left-top (125, 56) TE_TOUCH finger1 left-bottom ( 98, 175) TE_RELEASE finger1 left-bottom ( 98, 175)--> ( 98, 175) 34 ms TE_RELEASE finger0 left-top (125, 56)--> (125, 56) 56 ms TE_TAP finger1 left-bottom ( 98, 175) TE_TAP finger0 left-top (125, 56)
同時マルチタップ 。反応見る限り、下手に組み込みF/Wで判定よりソフトでジェスチャ処理したほうがよさそう?