船、車、家、たまには旅行のこと等 備忘録も兼ねて気ままに書いています。

2024/01/26

マイコンプログラミング たかがスイッチ処理、でも難しい 2024-02/02 アップしていた動画が間違っていたので変更しました

event_note1月 26, 2024 editBy Noriyuki Tomimatsu forumNo comments
ここんとこ荒れた天気が続いて船への足が遠のいています。
いままでお天気が悪いときにはあまりやることも無くぼ~っとしていることが多かったんですが新しいおもちゃのおかげで退屈することは無くなりました。

前回のLEDのピコピコの次にやってみたのはスイッチ入力でLEDの点灯モードを切り替えるというもの。

点灯ON/OFFと点灯モードを1つの押しボタンスイッチだけでやってみようというものです。
やりたいことは

    1,短くスイッチを押すたびにON/OFFが切り替わる。
    2,LEDがONの状態で長押しすると点灯モードが切り替わり
    3,次の短押しでは切り替わったモードのままON/OFF
    4,再度ONの状態を長押しすると元のモードに戻る。

と言葉で書けば簡単なんですが使うスイッチが押されたときだけ導通状態になるタクトスィッチなのでチャタリングの問題などもあり結構面倒くさい処理が必要です。

ここでちょっとだけ解説、チャタリングと言うのはスイッチの接点が付いたり離れたりする瞬間に短い周期でON/OFFが切り替わる現象です。
ただ短いと言ってもマイコンの処理速度はこれよりもはるかに速いのでこのON/OFFで切り替わってしまいこちらが意図した動作になってくれません。

ということでまずやったのはチャタリングの影響を回避することから、スイッチが押されたときに時間を置いて2度読みして両方とも押された状態であれば本当の押されたという判断をするプログラムから。
「Arduino チャタリング防止」で検索すると沢山の記事が出ていますが丸のみしても身に着かないので自分なりの言葉で書いてみました。

次は押されるたびにON/OFF反転させる部分、最初はスイッチを押し続けるとON/OFF反転を繰り返したりしてうまく切り替わってくれませんでした。
初めて押されたか?等いろいろ判断情報を追加してやっと動いてくれるようになりました。
ただ同じ判断でもプログラムのどの位置に書くかで動作が変わってしまいますので時間の流れとプログラムの流れをよ~く考えないとうまくいきません。

最後は長押し判断、内部時計を見ながら一定時間以上押され続けた時にモードを切り替えるものですがここでも必要以上にスイッチが押されたときにぱたぱたモードが切り替わらないように初めての切り替えかどうかの記憶が必要になってきます。

プログラムを書き換えては動作確認、「あら動かない」、「あら、勝手に切り替わる」、などトラブル続きでそのたびに考え込むこともしばしば、やっとのことで思った通りに動くプログラムが出来ました。

書いたプログラムの間違いや問題点を探すことをデバッグ(debug)日本語で言えば虫だしと言いますがこの時に活躍してくれるのがArduino IDEが持っているシリアル通信でプログラムの中の情報を覗ける道具。
あ、Aruduino IEDについて説明していませんでしたね。 Aruduinoのプログラミングを支援してくれるソフトでこのソフトを使ってプログラムを書いています。
このソフトも「てにをは」の間違いだとか使われている固有名詞の間違いなど文法的な間違いは指摘してくれますがやろうとしていることに対しての文脈などはチェックしてくれません。
ただシリアルモニターと言う機能があってプログラムの中にこのデーターをパソコンに送りなさいというコマンドを書いておくと今どうなっているのかを知ることが出来ます。
昔、長い紙に打ち出したアセンブラーのプログラムを見ながら首を捻っていたのに比べると格段にソフトウェア開発がやり易くなっていますね。

ちょっと途中が長くなってしまいましたが出来上がったのがこれ、チョン押しでLEDの点灯消灯、長押しで白色、赤色のモードが切り替わっています。


「な~んだ」なんて言わないでくださいね。これでも結構苦労したんですから。
ま、入学したての小学一年生から冬休み明けの小学一年生くらいにはなりましたかね。

0 comments:

コメントを投稿