HSES-LCD24のタッチスクリーンを使う

タッチスクリーンを使おうとすると意外に大変だ。HSES-LCD24のLCDモジュールではXPT2046というチップ経由でタッチスクリーンのデータを読み込む。XPT2046のライブラリは複数あり、その点では苦労しないのだが、その次にcalibrationの問題がある。自分ひとりで使う、使い捨てみたいなプログラムであれば、実測値を使い、定数をプログラムに埋め込んで解決だが、人に使いやすいライブラリを提供しようと思うと、それではまずい。LCDの座標系を90度づつ、4方向に設定可能かだから、calibrationも、それに対応する必要がある。毎回、calibrationするのは面倒なので、結果は不揮発性メモリに保存しておきたい。さらに、ちょっと見栄えがするサンプルプログラムを付けようとすると、ボタンやメニューも扱える簡易ウィンドウシステム的なものも欲しくなる。

そこまで作ると、いつ公開できるかわからなので、calibration機能と、そのデータのload/saveができるライブラリを作成し、公開する。名前はLcdTouchscreenでgithubで公開している。データはArduinoのEEPROMライブラリで保存してるが、そのままでは使いづらいので、名前ベースで文字列のsave/loadをできるようにしたライブラリParamsを作成、これもgithubで公開した。

動画は、サンプルプログラムの動作の様子である。このプログラムは、起動時にcalibrationのデータがEEPROMになければ、calibrationを起動する。あれば、calibrationは行わず、タッチされた座標とカーソルの表示を行う。データが既にあってもcalibrationをしたい時のために、起動時に、タッチパネルを押していれば、calibrationを起動する機能も準備した。

calibrationのやり方は、結構、頑張った。LCD上の目標のx,y座標とタッチスクリーンの読出値x’,y’の4点分のでデータで、xとx’, xとy’, yとx’, yとy’の4通りの直線回帰を求め、相関係数の値からどちらの座標と対応しているのかを判断している。これでrotationの値によらず直接calibrationの値を決定することができた。また、calibrationでデタラメな場所をクリックした場合、相関係数の値を見て排除できる。

タッチスクリーンを活用した、もっと見栄えがするプログラムを準備したい。それには、自分が普段使いできるプログラムを作って、使いながら完成度を上げていくのがいいのだろうなぁ。となると、時計+温度計になるなぁ。少しづつ、作っていこう。

Leave a Reply

メールアドレスが公開されることはありません。