>らずらいと姫の挑戦日記(第57回)~モータを動かそう3~らずらいと姫の挑戦日記(第57回)~モータを動かそう3~2019-05-2955回と56回の2回にわたりモータを動かすことを行ってきました。おさらいにはなりますがモータを動かすまで1.ボリュームの変化を読み取る2.ボリュームの値をモータの角度に使用する3.2.で使用したプログラムに複数の仕事をさせるとおかしくなる...の3回の流れになります。今回は複数の仕事をさせるとおかしくなることを見てみたいと思います。プログラムに複数の仕事をさせるとおかしくなることを確認する初めになぜ複数の仕事をさせてみようと思ったのかというと、前回のプログラムには弱点があり、もう一仕事させると動かしていないときに勝手に動くということが起こります。その時の動画がありますのでこちらをご覧ください。無線処理を行うと誤動作する原因モータの処理を行いながら、無線の受信処理を行うと、このようにサーボモータへの信号の時間がずれてしまう可能性があります。パソコンなどでも良くありますが、裏で何か仕事があると操作の時の反応が悪くなってしまうというのは皆さんも経験があるはずです。今回はこれと同じようなことが起こっています。サーボモータのように確実に正確なパルス幅を出してあげる必要があるサーボモータの処理をソフトウエアだけで行ってしまったのが原因です。今回使用したプログラムは以下になります。repeatedly:}このプログラムを実行すると無線の処理と角度を調整するパルス波を作る動作が重なったとき、無線処理が優先されて、うまく角度調整を行えない時間がたびたび発生し、動画の最初のような動きを行ってしまうようです。無線の処理に邪魔をされて希望通りに毎回ちゃんとパルス波形をつくってあげられないことが安定して動かない原因ですね。(-“-)無線処理を行っていても誤動作させない対策では誤動作を起こさないようにするにはどうすればよいでしょうか?今回のサーボモータの場合、パルス幅をしっかりと出して上げれば良いのです。この解決策として、今回はハードウエアによるモータ制御ができる専用のライブラリを使用します。ハードウエアはあらかじめ決められた動作しかすることができないのですが、設定したとおり確実にお仕事をしてくれます。サーボモータの制御はハードウエアを利用したほうが安定して駆動できるというわけです。ソフトウエアは周りの状況を見ながら動くことができる「人間」、ハードウエアは決まった仕事なら正確で早くこなす「ロボット」と言ったところでしょう。ここで書いたプログラムは以下になります。volt;volt=analogRead(A0);hsv.write(0,map(volt,0,1023,900,2400));//タイマーで900μsから2400μsまでの間の時間の電圧を出力hsv.update();//時間を反映させるための関数delayMicroseconds(40000);}このプログラムを読み込んで動かすと最初の動画の後半のように誤動作しなくなります。Semiconductor。