imjhの○っき

なんかいろいろ思いついたことを書き散らしているだけ

Arduinoを始めた

Arduinoを始めた」というタイトル、頭悪そうだな。

f:id:imjh:20210113233520p:plain

おもしろおきらく電子工作

 ずーっと以前に買ったままにしていたArduinoをようやく箱から出していじり始めたのが先週の7日。で、1週間ほど触ってみてなんとか満足に動かせるようになってきた。delay()を使ってLEDをチカチカ点滅するだけなら楽勝なのだが、今後いろいろと電子工作をする上でまともな雛形を作っておきたかったので、ちょっと時間がかかってしまった。
とりあえず、

  • ArduinoIDEのコンソールに出力するデバッグ用ライブラリ
  • スイッチ検出用ライブラリ
  • ロータリーエンコーダー操作検出用ライブラリ
  • 汎用タイマモジュール
  • OLED描画処理用モジュールの改修

 スイッチ検出用ライブラリは、任意の時間間隔での短押し/長押しに対応し、検出時にloop()中でイベントとして確認できるようにした。

 ロータリーエンコーダー操作検出用ライブラリは、1クリック毎に回転方向、クリックに要した時間を検出し、スイッチと同様にloop()中でイベントとして確認可能。

 汎用タイマモジュールはちょっと手間がかかった。基本的にMsTimer2ライブラリを使用した、汎用タイマとloop()内でdelay()の代わりに使える周期起動用カウントダウンタイマとして動作する。Arduinoをいじっていて「?」と悩んだのが、MsTimer2ライブラリが不正な動作をすること。なぜか設定値の2倍強の時間がかかったり、スイッチを押すと設定値より早くタイムアウトしたり。なんでじゃー!と半日ほど悩んでいたのですが、delay()やtone()を使っていることが影響しているとはたと気がついたのでした。delay()やtone()はお手軽工作には便利なのですが、まともなタイマーを実装しようとしたら使ってはいけないようで(MsTimer2ライブラリをいじればいいんだろうが)、それじゃあと、delay()やtone()は使わないで済むよう汎用タイマライブラリを作ったのでした。

 こういったガラクタをまとめて状態遷移処理テーブルなどで処理の追加を容易にした(つもりの)雛形を作ってみた。20年ぐらい前に組込み機器のS/Wを作っていたので、思い出しながらやってみただが、けっこう覚えているもんですね。当時は嫌なことやつらいことがいっぱいで思い出したくないことが多いはずなのだが、自分の頭に当時の知識や経験がちゃんと残っていることはけっこういい気分で、楽しく作業に集中できた。

 

 さて、Arduinoでやりたいことはいろいろあるのだが、とりあえずは使い勝手のいいキッチンタイマーを作ろうかと思っている。市販のキッチンタイマーは安くて手軽でいいのですが、いまいちなんですよね。

 気に入らないのは主に二点。まずひとつ目、タイマーのピピピ音が長すぎる。1回鳴らせば分かるんだから、しつこく鳴らさないでくれ。止めるまで鳴り止まないのはなんで?ふたつ目、タイマー作動中に「START/STOP」を押すと一時停止するところまではOK、だがなぜそこから時間の修正(追加)ができないの?そこで「分」「秒」を押してタイマの残り時間を増やすだけの簡単なことだろうに。この二つの不満点を解消したものを作る。しかし、世の料理人の方々はこういう仕様を不満に思わないのでしょうかね?

 

そこそこ形になったら公開しようと思う。GitHubとかよくわからんから、これも覚えなきゃね。やることいっぱいなのはいいことだ。