前回は、二つのマイクロビットを使って無線機能を使ってみた。「リモコン」のマイクロビットを使って、「プロペラ」のマイクロビットを動かしましたね。今回はもう少し踏み込んで、チャンネル指定と双方向通信を行ってみようと思う。?????行ってみよ~ゥ!目次チャンネル指定とは?プロペラのプログラムにチャンネル機能を組み込む。radio.config()関数とは?リモコンのプロペラの状態を表示する。残念ながら、テレビの操作はできない。とういうことですか?マイクロビットがたくさんあった時に、通信する相手の組み合わせを決める機能なのだ。チャンネル1の「リモコン」の「Aボタン」を押すと、チャンネル1の飛行機のプロペラが回るのだ。チャンネル2の飛行機では何も起こらない。なんかわかったような気がしますが、これができるとどんないいことがあるのですか?そうだね、例えば飛行機の代わりに戦車をリモコンで動かすとしよう。二つのリモコンと二台の戦車を用意して、チャンネルを分けておけば二台を別々に走らせることができる。二人で競争させて遊ぶこともできるようになるのだ。おぉ、これは楽しそうですね!プロペラのプログラムにチャンネル機能を組み込む。組み込んだものを見てみよう。「リモコン」のプログラムの修正箇所から見よう。赤い文字の部分を追加したのだ。修正したのは、1行だけですか?ウム。この1行により、チャンネルを指定したのだ。して、プロペラ側も1行修正しただけとかですか?鋭いな。True:radio.config()関数とは?ちなみに、この「radio.config()」という関数を使うと、チャンネルのほかにもいろいろと無線の設定を変更することができる。radio.RATE_1MBIT特に指定しなければ、「初期値」が使われるようになっている。「address」とか、[group」とか、よくわからない奴がありますが・・・?今回のところは、「色々変えられるんだな」ぐらいに覚えておいてくれたまえ。documentation」を見て下サ~イ。REFERENCE」の「Radio」には「config()」関数などの詳しい解説が載っていますね。リモコンのプロペラの状態を表示する。これまでは、「リモコン」から「プロペラ」に、一方的に通信を送っていただけだったが、次は、「プロペラ」のマイクロビットからも送ってみようと思う。してこれが「双方向通信」っていうやつですか?ィエ~ス!双方向に通信を行うので、「双方向通信」なのだね。なんだか「そのまんま」ですね。「プロペラ」からは何を送るのですか?「プロペラ」のマイクロビットからは、プロペラの回転状態を送ることにした。:これを「リモコン」が受けて、LEDに表示するのですね?その通り!電池切れなどで「リモコン」の電源を入れ直した時にも「プロペラ」の状態がきちんと表示されるようにしたのだ。おお、なんか便利そうな予感!(でも、プロペラそのものを見ればいいのか。)そのためには、一定周期でプロペラの状態を送信する必要がある。いつ「リモコン」の電池が切れるか分からないですからね。ここで使うのが、「utime」というライブラリなのデ~ス!「プロペラ」側のプログラム今回は、「プロペラ」側から見ていこう。*「utime」を使うため、プログラムの先頭でインポートしたのですね。この「utime」って、どんなライブラリなのですか?これは、時間を扱うためのライブラリなのだ。この中から三つの関数を使ってみたョ。現在をミリ秒であらわす値を取得する。時間を表す値の足し算を行う。時間を表す値の引き算を行う。これらの三つの関数を使って、一定間隔でプロペラの状態を送るようにしたのだ。いう感じではなさそうですね。実際にプログラムで見てみよう。「停止状態」の部分を見てみるよ。「停止状態」の動きを行わせる関数ですね。nextState34行目でさっそく「utime.ticks_ms()」が出てきましたね。これは何をしているのですか?これは「deadline」という変数に、現在の時刻を取り込んでいるのだ。utime.ticks_ms()現在の時刻をメモしているようなものですね。変数「deadline」がメモ帳ってことですね。35行目以降のループの中の40行目で、「deadline」にメモしておいた時刻と、その時点での現在時刻を比べて、現在時刻の方が後ならばプロペラの状態を送信する。SEND_TS)42行目は、次の送信タイミングを決めるための処理だ。言いますと・・・メモ帳の「deadline」に、現在の時刻から少し後の時刻をメモするのだ。「SEND_TS」が「少し後」を示す変数だ。プログラムの上の方で用意してあるのだョ。これらの処理はループの中にあるので、繰り返し実行される。いうことか!プロペラの状態を送信した後、少し後の時刻をメモしておいて、その時間になったら次の送信を行って、また少し後の時刻をメモして、というのを繰り返すのですね。その通りだ!理解できたようだね。初めはプロペラが止まっているので、「リモコン」に「S」が表示されましたね!「Aボタン」を押すと・・・プロペラが回って、「C」が表示された。一回「Aボタン」を押すと、プロペラが高速回転して「E」が表示された。止まった!成功です、青木鳥隊長!tick_ms()とticks_us()があるようなのですが・・・ところで赤トマト君、現在の時刻を取得するためには、「ticks_ms()」のほかに「ticks_us()」も使うことができる。ムムムムム、何が違うのですか?「ticks_ms()」はミリ秒、「ticks_us()」はマイクロ秒の値が得られるのだ。それで、それで?この先は、次回のお楽しみだ!ギャホーン!まとめ今回のまとめデ~スチャンネルを指定することで、無線で通信する相手を指定することができる。関数「radio.config()」により、チャンネルなどの無線機能の設定を行うことができる。ライブラリ「utime」を組み込むことで、時間を扱うことができるようになる。今回のプログラムの全文はこちらをご覧ください。(新しいタブで開きます。次は「utime」について、もう少し踏み込んでみます。関連記事マイクロビット【マイクロビット入門】(1)マイコンのプログラムを作ろう!普段マイコン用ソフトを作っている青木鳥が、我が子とともに教育用マイコン:マイクロビットに挑みます。パソコン初心者向けに基礎から分かりやすくマイクロビットのプログラミングを解説します。使用する言語はPython(パイソン)です。大人も子供も見に来てね。マイクロビット【マイクロビット】保存したプログラムを整理しよう。マイクロビットのパイソンエディターでSaveを実行すると、ダウンロードフォルダーに番号付きでファイルが保存されていきます。このままでは、どのファイルがどういう内容化が分からなくなってしまいます。パソコン初心者の方向けに、別にフォルダーを用意して移動し、ファイル名を変更する方法を解説しました。マイクロビット【マイクロビット入門】(9)ボタンで動きを変えてみよう。教育用マイコンボード「マイクロビット」のプログラミングを解説します。使用言語はパイソンです。今回は、ボタンを押された場合の処理の作り方です。関数の戻り値についても説明しています。プラモの飛行機のプロペラのプログラム:最初のバージョンマイクロビット、パイソンのプログラミング応用編で作成したプログラムのソースです。プラモの飛行機のプロペラを回すプログラムの最初のバージョンです。セルモーターによるゆっくりの回転、エンジン始動後の高速回転、停止の動作を行わせることができます。プラモの飛行機のプロペラ(3)回転が徐々に遅くなって止まるように改造マイクロビット、パイソンのプログラミング応用編です。飛行機のプロペラのプログラムを改造しました。高速回転から停止するときに、プロペラが徐々に減速して止まるようにしてみました。プログラムを「状態を切り替える」方式で作成したので、簡単に改造することができます。プロペラの動きがよりリアルになりました。マイクロビット【マイクロビット入門】(14)配列の要素とインデックス教育用マイコンボード「マイクロビット」のプログラミングを解説します。使用言語はパイソンです。前回に引き続き、今回も配列について説明します。配列を用いてマイクロビットのLED表示部で時計の針を一回転させます。配列をより深く理解しよう。コメントをキャンセルメールアドレスが公開されることはありません。※サイト上に表示された文字を入力してください。チャンネル指定とは?プロペラのプログラムにチャンネル機能を組み込む。radio.config()関数とは?リモコンのプロペラの状態を表示する。映画などを見て、登場する乗り物をプラモで作ります。マイクロビットという教育用マイコンを使ったプログラミング入門の記事も書いていきます。青木鳥をフォローする無断転載を禁止します。道具ホーム検索トップサイドバータイトルとURLをコピーしました。