台風のため外出しない週末の過ごし方。家に転がっている「おとうさんのおもちゃ」で山キッズたちと遊びます。
今回は電子サイコロ!
「ねえねぇ、おとうさーん、Arduinoやろうよ」
というので、前回7セグLEDで遊んだ続きをやることにしました。
本当はLED7発でサイコロの目を表現したかったのですが、手持ちのLED在庫では色が揃わなかったので、7セグLEDでデジタルサイコロに方針変更。
任意の数字を表示させるプログラムを作るところまでできていたので、あとは
・スイッチが押されたら、ランダムに1〜6の数字を表示する
・電子サイコロ感を出すために、ピロピロ回るアニメーションを加える
・ムードを盛り上げる効果音を発生(圧電ブザーで音を鳴らしています)
こんな感じでプログラムを書き足します。
今回時間がかかったところ
loop内でスイッチが押されたときにサイコロが回り始めるようにしたかったのですが、digitalRead(PINNO) == HIGHを条件にしても勝手にプログラムが進んでしまいます。調べた結果、digitalInする場合、GNDもしくは5Vを入れておかないと周りの回路の状態次第で不定値をとるようです。digitalInのPINの5vを直接入れるのではなく、プルアップ抵抗を入れて電流を流すことで解決しました。
また、乱数のシード値を一定にしてしまうと毎回同じ乱数が発生してしまうため、特に何も繋いでいないanalogIn(0)の値をシード値として使うようにしました。
動画もアップしてみました
電子サイコロなので、それほど大したプログラムでもないのですが、作ったものが実際に動くと楽しいものですね。
作ったものは実際に使って楽しむ!
早速、電子サイコロを使いながらすごろくゲームをやって遊んでいました。
山キッズ1曰く、サイコロの振り方でズルできないから良い!らしいです。普段の遊びにも使えそうなので、次は小型のArduinoProMini互換ボードとかを使って組み上げちゃいましょうか。