Raspberry Pi でタッチパネル

Raspberry Pi でタッチパネルを試してみました。

使用した液晶モジュールや接続、設定は以前の記事どおりです。
そのM028C9325TPにはタッチパネルも付いているので、これを使ってみます。
あとRPiはB+でないとGPIOの数が足らないです...(´~`)

ハード的な接続は
を参考に繋いでます。

Linuxカーネルのビルドや準備は
を参考に手元のカーネルソースに追加・設定しビルドしました。

/boot/config.txt を以下のように修正して画面サイズを小さくしています。
framebuffer_width=640
framebuffer_height=480
hdmi_group=2
hdmi_mode=4
タッチパネルの調整も必要なので入力イベントをコンソール上で見れるツールもインストールしておきます。
sudo apt-get -y install xinput evtest
カーネルビルドで参考にしたHPにも書いていますがヘルパーモジュールも必要なので
cd
git clone https://github.com/notro/fbtft_tools.git
cd ~/fbtft_tools/ads7846_device; make && sudo make install
でインストールしています。

ここで一旦タッチパネルを使えるようにして調整~
sudo modprobe ads7846_device gpio_pendown=4
evtest
しかし、調整しようと思ったらXY座標が入れ替わってるっぽいので
sudo modprobe -r ads7846_device
sudo modprobe -r ads7846
でモジュールを削除して、 swap_xyの引数を追加して組み込みしなおします。
sudo modprobe ads7846_device gpio_pendown=4 swap_xy
でも、まだおかしい...Y方向のみ逆になってる...
しかも、入れ替える設定がないっぽい?
仕方ないので、モジュールのソースコードを修正しました。
カーネルソースの linux/drivers/input/touchscreen/ads7846.c の 861 行目辺り
if (Rt) {
    struct input_dev *input = ts->input;

    if (ts->swap_xy)
        swap(x, y);

    y = (y-4095)*-1;

    if (!ts->pendown) {
            input_report_key(input, BTN_TOUCH, 1);
            ts->pendown = true;
            dev_vdbg(&ts->spi->dev, "DOWN\n");
    }

    input_report_abs(input, ABS_X, x);
    input_report_abs(input, ABS_Y, y);
    input_report_abs(input, ABS_PRESSURE, ts->pressure_max - Rt);

    input_sync(input);
    dev_vdbg(&ts->spi->dev, "%4d/%4d/%4d\n", x, y, Rt);
}                
オレンジ色の1行を追加してY座標を反転させています。
これをコンパイル、組み込みしなおし
evtest
を起動している状態で4隅をタップしてXY座標の最小値、最大値をメモします。
最小値、最大値を引数にして組み込みなおします。
私の環境だと以下のようになりました。
sudo modprobe ads7846_device gpio_pendown=4 swap_xy x_min=523 x_max=3822 y_min=451 y_max=3711
これで調整完了。

今回、動作確認アプリにはJavaFX8を使用しました。
JavaFXだとXWindowなしでUIアプリが作れます。

からARM用JDKをダウンロードして
sudo tar zxvf jdk-8u6-linux-arm-vfp-hflt.gz -C /opt
でインストール。
アプリを640x480の画面サイズで作成し、
/opt/jdk1.8.0_06/bin/java -cp test.jar fx.JavaFXMain
などで実行できます。
JavaFXアプリはRPiに依存することなく、ごく一般的な作り方をすればOKです。

動作確認のため、以下のようにし液晶表示できるようにします。
sudo modprobe fbtft_device name=itdb28 fps=15 rotate=90 gpios=reset:13,dc:5,wr:12,cs:6,db00:14,db01:15,db02:17,db03:27,db04:22,db05:23,db06:24,db07:25
fbcp &
(3行に見えるかもしれませんが、2行です。)

で、実際に動かしてみた動画は以下になります。


JavaFXアプリの起動はさすがに遅いですね (;´д`)
タッチパネルの反応もいまいちな感じです。



0 件のコメント:

コメントを投稿