マウスの秋ですよ
こんにちは、広報DTP担当のサナエです。
このブログは技術畑ではない広報がアールティの新製品Pi:Co V2と仲良くなり、その魅力をアピールする体験記です。
前回はPi:Coシリーズについて思い出を書きました。今回はまたサンプルスケッチとの格闘に戻ってがんばってみようと思います。
Pi:Co V2のおさらい
Pi:Co V2(ピーコブイツー)は、アールティの教育や研究開発用小型移動ロボットのプラットフォームであるPi:Co Classic3同様、ソフトウェア開発の基礎を学びたい方に手に取っていただきたいロボットです。Pi:Co Classic3の機能やデザインイメージをそのままに、半分のマイクロマウスサイズになりました。
マイクロマウス競技に準拠しているのでもちろん大会参加もできます。
Pi:Co V2はESP32-S3マイコンを搭載しており、Arduinoで開発できます。
移動型ロボットのビギナーや、研究者、開発者まで幅広い方々にご利用いただけるロボットです。
Arduinoサンプルスケッチと解説書が付属するので、プログラミング初心者にもおすすめです。
音!鳴らしたい!
さて今回はサンプルスケッチSTEP3のブザーを使って音を出します。
サンプルスケッチではドレミの音が鳴るようになっていますが、その先は入っていません。マニュアルをのんびり眺めていると知らない言葉が出てきました。ナニコレコワイ!!
FREQて何?ふれきゅー?ふれっく?調べたり聞いたりしたら周波数の「Frequency」でフリークと聞きました。周波数とかすごく音関係って感じ!!ということは周波数が523でドの音ってことなのね。へぇえええなるほどなるほど…
で、ですよ。FREQ_CはどうしてCから始まるの なんで1とかAじゃないの?どこかにあるの?と思ってたらコードだった!あああ!そういえばドはCだった!ドミソ~のCなのか!Aはラですわ!
実は小さいころ音楽教室に通っていたワタクシですが、ピンとこないほどに忘れていました。倒れそうなほどショッキンです。数分立ち直れませんでした。
今回のお題
最初から落ち着かなかったのですが自分なりに解決したので心安らかに今回のお題を確認します。
【製作者からの課題3】ブザーを鳴らすモードを15までふやしてください。 モード4ではファを、モード5ではソを鳴らします。モード8では1オクターブ上のドを、モード15では2オクターブ上のドを鳴らしてください。
ヨシ!モードを増やすのはきっとできるはず!
Pi:Coシリーズはモード表示用のLEDが4つ付いていて、全部点灯すれば15になります。全部点くまでぽちぽち増やしていきますよ!
…ンッッ!! 1オクターブあがったドはどうやって書けばいいかな?自分で決めていいとこのはずなので、1オクターブ上だからC1とか…
でもこれだとどの「ド」のことかわからないなと思ったら、弊社新人のO君にピアノで基本となる高さが5であると教えてもらったので、彼と同じく1オクターブ上のドをC6の表記にさせてもらいました。そうかぁー知らなかった…新しいことを知った!
まずは#defineのところを増やします。コードの部分と周波数を入れますよ。自分の耳でファはこれくらいかな?などとやる自信はまるでないので検索しました。小数点以下もかけるなら、と3桁まで入れて…。
とりあえず全部の音の準備はできました。ちょっとずつサンプルスケッチの先を見ていきます。
いまさらだけど普通に数えたい!
void setLED(char data)はLEDのオンオフをHIGHとLOWで書いてるんだな、と眺めていると
if (data & 0x01){ という記述が出てきました。 次の行にdigitalwrite(LED1, HIGH)等書いてあるからLEDのこととはわかるけど、0に01をかけても0じゃないの?って大混乱
O君にナニコレ!と聞いてみたら16進数の書き方と教えてもらいました。ゼロエックスなのか!かけるじゃないのかハワワワ!じゃぁここは素直に一番右のLED0のことを書いていて、何か新しいことをさせようとしてるわけじゃないのね慌てた!!16進数もよくわかってないのに触ってるのがバレた!
そしていまさらながら二進数の数え方も01で教えてもらいました。ずっと機体のLEDで1~15までは点灯させてなんとなくで触ってはいたけど、01を並べてみたらわかりやすかったです。スケッチにあるif (data & 0x04){ がどうして次に if (data & 0x08){ になるのかもなんとなく納得できました。
全部点灯させるよ!
次はお待ちかねのcase4からどんどん追加していきます。
case4のファから2オクターブ上のドのcase15まで!case1の上にswitch (mode) { とあるからきっとスイッチを押したらそのまま動いてくれるはず…音はならないけど押すとちゃんとLEDは光ってるからこれで良いはず…
検証してー書き込んでー
全部鳴ったぁあああ!!!やったー!
ドレミファソラシドレミファソラシどや顔!!
今回はO君にいまそれ?というものをいろいろ聞けて大変助かりました。ありがとう!また色々質問させてくださいまし!
それにしても最後の「ラシド」の音が小さく聞こえるんですが…もしかして加齢で高い音が聞こえづらいとかのアレ?ちょっとドキドキします…
!!!?ledc関数というと、 ledcwriteTone(BUZZER, FREQ_C); のとこですよね。FREQ_C のところに#defineで作ったアレが入る…だけじゃないの?unit32_t…ッ検索ポチー!
「4バイトの符号なし整数」というのを見つけました。全ビットを2進数の各桁に対応付けて数を表すとかナンダソレハ…もしかして小数点以下はいらない?あれっ
そうか、だからサンプルスケッチではFREQ_Cが523と小数点なしで書いてあったんですね。せっかく表にあるからとウキウキ入れちゃった…ちゃんと音が鳴ったからいいと思ったけど、せっかくあるからともったいない精神で入れてしまいました。蛇足…ッ!!
ちゃんと意味があっての数字だったのでもう少し気を付けてみようと思います。
改めて#defineを直して鳴らしてみたらちゃんと行けました!
Pi:CO V2発売中!
Pi:Co V2は2024年6月25日に販売開始しました。
組込みや自律制御の基本要素を学ぶ方々はぜひ本製品をご利用ください。
Web shopにて、定価60,000円(税込)で絶賛発売中です。ご利用をお待ちしております!