フォームコントロールを使ってLEDを操作する
はじめに
このシリーズでは、Arduinoに7インチタッチディスプレイGT-SPシリーズを接続し、様々なプロジェクトを進める過程を解説しています。
前回はGT-SPに搭載されたスライダーの可動域を制御するシステムを構築しました。今回は、GT-SPに搭載できるラジオボタンやチェックボックス等のフォームコントロールを利用してLEDの制御を行ってみます。
この記事を読むにあたって、過去の記事が基礎となります。そこで紹介したオブジェクトの装飾技術などを応用しますので、まだの方はぜひ他の記事もご覧ください。

LEDへの接続
今回は、3色のLEDを用意し、それぞれに300Ωから1kΩ程度の抵抗を接続します。以下のようにピン接続を行います:
・赤色LEDを9番ピンに接続
・緑色LEDを10番ピンに接続
・青色LEDを11番ピンに接続
さらに、各LEDをGNDに接続します。LEDを接続する際は、極性を間違えないように注意してください。長い方のピンをArduinoの指定されたピン(9番、10番、11番)に接続し、短い方のピンをGNDに接続します。

GT Design Studioでの画面の作成

今回は一つのページにチェックボックス、ラジオボタン、ドロップダウンを使用します。それぞれのチェックの状態を、用意されたSETボタンよりセットしてArduinoに送ることで、LEDの制御を可能にしました。
一つ目のSETボタン(左のボタン)は、用意された色を決めるチェックボックスのON/OFFを確認するトリガー(「CHK」が送られる)です。
二つ目のSETボタン(中央のボタン)は、LEDの状態を示す「Solid on」(点灯)と「Blinking」(点滅)のどちらかを選択したのかを確認するトリガー(「RAD」が送られる)です。
三つ目のSETボタン(右のボタン)は、あらかじめ動作が用意されたプリセットをドロップダウンメニューより選び、どれが選択されたのかを確認するためのトリガー(「DROP」が送られる)です。
タイトルやボタン周りのデザインについては、前回の記事(Arduinoから得られた値を、視認性の高いデザインにするのリンク)を参考にしてください。
チェックボックスについて
チェックボックスは項目につきそれぞれ配置が必要です。今回は3つのチェックボックスを用意しました。
チェックボックスのデザインについては、以下の設定をしています。

具体的にはCheck Sizeを「32」にしています。(デフォルトのサイズは20です)
ラジオボタンについて
ラジオボタンは「Text0」にいれる「行」に応じて項目が増えていきます。

今回は項目が二つ必要だったので「Solid on」と「Blinking」を入れます。チェックされる項目ごとに、「VAL」が付与されます。この例では「Solid on」がチェックされると「VAL」の値が「0」、「Blinking」のときは「1」となります。
ドロップダウンについて
今回はドロップダウンに「DEMO 1」と「DEMO 2」を入れました。それぞれVALの「0」と「1」が付与されます。
ドロップダウンもラジオボタンと同様に、「Text 0」にいれる行に応じて項目が増えていきます。また行が増えていくと、項目が隠れて表示されるようになり、スクロールバーが表示されます。
今回はドロップダウンに「DEMO 1」と「DEMO 2」を入れました。それぞれVALの「0」と「1」が付与されます。

また、ドロップダウンのプロパティのStyle>Dropdown Sizeを変更することで、表示域を増やせます。行を増やす予定があり、スクロールバーが不要な場合にサイズ変更をすると良いでしょう。(デフォルトの値には100が入っています
一つ目のSETボタンのEVENT設定
一つ目のSETボタン(左のボタン)には以下のEventが入っています。

二つ目のSETボタンのEVENT設定
二つ目のSETボタン(中央のボタン)には以下のEventが入っています。

三つ目のSETボタンのEVENT設定
三つ目のSETボタン(右のボタン)には以下のEventが入っています。

タッチスクリーンに書き込むプロジェクトの作成
このプログラムは、シリアル通信を介して外部デバイスからのコマンドを受け取り、LEDの点灯状態やデモモードの制御を行います。
具体的には、受信したコマンドに応じてLEDの点灯や消灯を制御し、「CHK」コマンドでは指定されたLEDのチェック状態を更新し、「RAD」コマンドではLEDの点滅モードを設定します。また、「DROP」コマンドを通じてデモモードの切り替えを行い、デモモードでは設定に応じたLEDが順番に点灯し、ユーザーに視覚的なフィードバックを提供します。
シリアル通信でのデータ送受信を通じて、柔軟かつ効率的なLED制御を実現しています。
プログラム解説
このプログラムは、シリアル通信を介して外部デバイスから送信されるコマンドに基づいて、LEDの点灯状態やデモモードの管理を行います。loop関数内でデータが受信されると、その内容に応じて異なる処理が実行されます。
前知識、gtsp_ObjPrpRead_val関数の説明
今回新たに追加されたgtsp_ObjPrpRead_val関数は、指定されたオブジェクト番号、プロパティ番号、およびデータ長を送信し、プロパティデータを受信します。例えば、LED1Check = gtsp_ObjPrpRead_val(3, 0x10, 4);のコードは、オブジェクト番号3のプロパティ番号0x10の値を読み取り、その値をLED1Check変数に格納します。これにより、LED1がオンかオフかが決まります。
LEDの状態制御
「CHK」コマンドを受け取ると、特定のLEDのチェック状態が更新されます。各LEDのチェック状態はgtsp_ObjPrpRead_val関数を使用して取得され、その結果に基づいてLEDがオンまたはオフになります。
グローバル点滅制御
「RAD」コマンドを受け取ると、全てのLEDの点滅状態が設定されます。BlinkingMode変数を更新することで、LEDの点滅モードがオンまたはオフに切り替わります。これにより、全LEDが一斉に点滅するかどうかが決まります。
デモモードの管理
「DROP」コマンドを受け取ると、デモモードが切り替わります。このモードでは、LEDが特定のパターンで点灯し、視覚的な効果を提供します。別のコマンドが受信されると、デモモードは自動的に解除されます。
このプログラムは、受け取ったコマンドに基づき、さまざまな機能を適切に制御できる柔軟性を持っています。各機能は独立しており、迅速かつ正確に反応するように設計されています。
実行結果
今回のプロジェクトはフォームコントロールとArduinoを連携したLEDの制御でした。今回のようなシステムを用いれば、機器のリモート制御の自動化に役立ちます。

次回はアウトラインフォントとドローシェイプツールを使用して画面の装飾を行うプロジェクトを紹介します。
