画面タッチで背面LEDを点滅させる方法
続いて、背面LEDの制御に移ります。まずは安全に配慮し、低輝度かつ短時間の点滅からテストを行いました。
次はLEDを暗めで3秒だけ点滅させたいです。
どのLEDを、何をきっかけに点滅させますか?
スタックチャンの背面についたLEDです。画面タッチで光らせたいです
Codexはこの指示から対象を本体の12個のLEDと特定し、画面タッチをトリガーとするUIメニューの追加まで解釈して実装を進めました。既存コードの構造に合わせ、「LED」メニューと「低輝度で3秒点滅」ボタンが実装されます。
点滅ロジックは緑色を0.5秒点灯・0.5秒消灯する動作を3回繰り返す内容です。「低輝度」の具体的な数値設定はCodex側で安全な低い値を選択し、3秒経過後の自動消灯処理も組み込まれました。
LEDが低輝度の緑で点滅しました
曖昧な指示を対話で制御コードへ落とし込む方法
基本点滅を確認できたため、少し抽象的な表現で発光パターンの変更を指示してみました。
ゲーミングっぽく光らせて
まずはLチカと同じく、背面12灯をすべて同じ色にして、色だけを滑らかに変える試作にします。 色相を連続的に巡回させやすいHSVを使います。 点灯時間は直前と同じ3秒にし、明るさは安全側から始めます。
ここで提示された「HSV」という専門用語について詳しく確認します。
HSVってなんですか?
Codexから以下の通り解説がありました。
HSVは、色を「色相(Hue)・彩度(Saturation)・明度(Value)」の3つで表す方法です。 色相だけを少しずつ動かすと、赤→黄→緑→青のように虹色へ変化します。 今回は彩度と明度を固定し、鮮やかさと明るさを保ったまま色相だけを巡回させます。 最初はLEDや電源への負荷を抑えるため暗めで試します。 HSVは色の変化を考えやすくするための指定方法で、実際に点灯するときはLEDが扱えるRGB値へ変換します。
理解を深めた上で「暗い色で試してください」と返し、最初の試作を実行しました。この時点では12個のLEDがすべて同期してゆっくり色が変化する挙動となり、想像していた「ゲーミング風」よりも控えめな印象でした。
そこで、実機の動きを見た感想をダイレクトに追加指示として伝えます。
記載のとおりに光りました。 12個全部同じ色ではなく、1個ずつ色をずらしながら光らせてほしいです。 もっと滑らかに、高頻度で色を変えてほしいです もっと明るくてもOKです 上記で3秒間光らせてください
この指示を受け、Codexは12個のLEDそれぞれに異なる色相オフセットを割り当て、鮮やかな虹色が回転するようなエフェクトを実装しました。「高頻度」「明るく」という定性的な要望に対しても、内部パラメータを適切に調整しています。
| 条件 | 最初の試作 | 調整後 |
|---|---|---|
| LEDの更新間隔 | 100ms(10回/秒) | 33ms(約30回/秒) |
| RGB出力の上限値 | 8/255 | 32/255 |
これらの数値はいずれも筆者が直接指定したものではなく、Codexが安全域を考慮して算出した値です。3秒後に消灯する条件はそのままです。
記載のとおり動作しました。光り方もイメージ通りです。 会話を通じた言語化のよいサンプルになりましたね。
Codexでは、画面を離れた際の停止処理や3秒後の消灯制御も確実に実装されました。
stackchan-idfの内部構造では、CoreS3がI2C通信経由で台座側の制御 ICへデータを出力し、制御 ICがWS2812C用の信号を生成します。Codexは通信失敗時に過剰なリトライを行わない堅牢な例外処理も組み込んでいました。
Codexとの対話で理想の動きへ仕上げる「バイブコーディング」
最終的に、背面の12灯が1灯ずつ色をずらしながら滑らかに変化し、3秒後に正しく消灯する理想の動作が完成しました。
最初の「ゲーミングっぽく光らせて」という抽象的な指示だけでは、各LEDの色関係や変化の速度、最適な明るさは決まっていませんでした。Codexが提示した安全な試作を出発点とし、人間が実機の動作を見て短いフィードバックを返すことで、具体的な実装条件へと洗練されていきました。
Codexが調査・実装・ビルドを担い、人間が安全管理と実機の動作確認を担う。互いの役割を明確に分担しながら対話を重ね、思い描く動作へ近づけていくアプローチこそが、バイブコーディングの最大の醍醐味と言えます。
背面LEDの制御は思い通りになりました。これで今回のLEDを点滅させる「Lチカ」の実装は完了です。
次回は、画面の表情変化や首振り動作の追加に挑戦します。各要素を1つずつ検証しながら、目的である「手拍子で踊るスタックチャン」の完成を目指します。
