<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" version="2.0">
  <channel>
    <title>記</title>
    <link>https://shirusu.asablo.jp/blog/</link>
    <description/>
    <language>ja</language>
    <generator>mc 0.0</generator>
    <pubDate>Fri, 19 Dec 2025 15:03:21 +0900</pubDate>
    <item>
      <title>R36S レトロゲーム機</title>
      <link>https://shirusu.asablo.jp/blog/2025/12/13/9823581</link>
      <guid>https://shirusu.asablo.jp/blog/2025/12/13/9823581</guid>
      <pubDate>Sat, 13 Dec 2025 09:59:24 +0900</pubDate>
      <dcterms:modified>2025-12-19T15:03:21+09:00</dcterms:modified>
      <dcterms:created>2025-12-13T10:01:53+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;Linux のゲームエミュレータが入ってて安いということで買ってみました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Raspberry Pi３でもBatceraとかでできましたが、ちょっとパワー不足で、かといってRaspberry Pi５&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;とかは高いので中華レトロゲーム機に興味が出ました。&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;調べるとオリジナルではないものがあるとのことで、アリエクの BOYHOM Store で購入。¥4100&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;ここにオリジナルかクローンの見分け方があります。&lt;/DIV&gt;&lt;DIV&gt;https://handhelds.wiki/R36S_Clones#Avoid_buying_a_clone&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;箱からはなんか違うような。。。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/13/721f30.jpg" style="width: 300px; height: 479px; border: none;"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;一応ArkOSが搭載されていました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/13/721f31.jpg" style="width: 300px; height: 454px; border: none;"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;裏面の&amp;quot;Consola Retro&amp;quot;がさらに怪しい&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/13/721f2f.jpg" style="width: 300px; height: 425px; border: none;"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;電池の蓋をあけて基板のバージョンを確認。V22で今のところ一番新しいものらしい&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/12/14/72212e.jpg" onclick="return asablo.expandimage(this,1280,720,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/12/14/72212e.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/14/72212d.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;ここのサイトでパネルの確認をしたら、Panel4と出ました&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;https://aeolusux.github.io/ArkOS-R3XS/tools/dtbIdentify.htm&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;オリジナルらしい。&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;●SDカードの品質が悪いとのことで、すかさずイメージバックアップ＆EASYROMSをバックアップ&lt;/DIV&gt;&lt;DIV&gt;怪しげなSDカードです&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/14/722128.jpg" style="width: 300px; height: 230px; border: none;"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Fedora PCでイメージバックアップ&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;”ディスク”アプリでSDカードを選択&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/14/722123.png" style="width: 300px; height: 205px; border: none;"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;右にあるメニュー（・が三つの）”ディスクイメージを作成”を選択&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/12/14/722125.png" onclick="return asablo.expandimage(this,1904,1304,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/12/14/722125.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/14/722124.png" style="width: 300px; height: 205px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;適当に名前を付けて作成開始&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/12/14/722127.png" onclick="return asablo.expandimage(this,1348,562,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/12/14/722127.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/14/722126.png" style="width: 300px; height: 125px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;xxx.imgファイルができます。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;このイメージファイルを使って、新しい同容量のSDカードにイメージを書き込み&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;イメージファイルを右クリックして、イメージライターを選択&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;”なし”のところで新しいSDカードを選択→リストア開始&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/12/14/72212a.png" onclick="return asablo.expandimage(this,1826,1106,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/12/14/72212a.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/14/722129.png" style="width: 300px; height: 181px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;これで気兼ねなく遊べます。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;●WIFIでアップデート&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Raspberry Pi で使っていたWIFIドングルが使えないか試してみました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;だいぶ前に買ったGW-USNano2というものです。これをセリアで買ったUSB変換アダプターでつけてみたところ、問題なく接続できました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ダイソーで売ってる変換アダプターや￥５５０のType-CのUSBハブでも使えました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/12/15/722445.jpg" onclick="return asablo.expandimage(this,1602,1795,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/12/15/722445.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/15/722444.jpg" style="width: 300px; height: 336px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;WIFIの設定はOPTIONのWIFIで。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;UPDATEもここから&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/12/15/72244e.jpg" onclick="return asablo.expandimage(this,2250,4000,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/12/15/72244e.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/15/72244d.jpg" style="width: 300px; height: 533px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;WIFIが使えるようになると　WIFI:up になります。&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/12/15/72244c.jpg" onclick="return asablo.expandimage(this,2250,4000,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/12/15/72244c.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/15/72244b.jpg" style="width: 300px; height: 533px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;以前、DSの脳トレを散々やってDS本体が壊れてしまって放置していたのですが、これでやってみたのですが、マウスで文字を書くのは至難の業です。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ダイソーのハブにWIFI、マウスを繋いで動作することは確認できました。USB DACも使えました。&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/15/722447.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;●ARKOSを最初からインストール&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ゲームを入れるSDカードとOSを入れるカードは分けたほうが良いと聞いたので、新しいSDカードにArkOSをインストール。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;おすすめの microSD カード&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;https://handhelds.wiki/R36S_Compatibility_Lists&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ですが、試しに￥５５０のダイソー32GBmicroSDで作成&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ARKOSダウンロード&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;https://github.com/AeolusUX/ArkOS-R3XS?tab=readme-ov-file&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;imgファイルをFedora のディスクアプリでSDカードに書き込んで、R36Sに戻して起動&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;WindowsではRaspberry Pi imager を使ってみました&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;今回はRaspberryPiのイメージは作らないので　&amp;quot;No Filterig&amp;quot; を選択して次に　&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/12/16/722607.png" onclick="return asablo.expandimage(this,1024,722,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/12/16/722607.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/16/722606.png" style="width: 300px; height: 211px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&amp;quot;カスタムイメージを使う&amp;quot;　を選択して書き込むimgファイルを選択して次に&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/12/16/722609.png" onclick="return asablo.expandimage(this,1024,722,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/12/16/722609.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/16/722608.png" style="width: 300px; height: 211px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;書き込むSDカードを選択して次に、Writingに進むので書き込み&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/12/16/72260b.png" onclick="return asablo.expandimage(this,1024,722,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/12/16/72260b.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/16/72260a.png" style="width: 300px; height: 211px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;本体に戻して起動するとインストールされます。といってもSDカード内に展開されるので、SDカードを変えればいろいろ試せます。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/19/722ba7.jpg" style="width: 300px; height: 533px; border: none;"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;OPTIONSでデバイスを選択&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;※V22ボードは以下からdtbファイルを入れ替えないとUSB OTGが動かない問題がありました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;以下の対処でWIFIなどの機器が動作するようになりました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;https://handhelds.wiki/R36S_Overview#R36S-V22_2024-12-18&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;dtb files&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;https://github.com/AeolusUX/R36S-DTB/tree/main/R36S/Panel%204%20-%20V22&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;別のSDカードにゲームを入れる&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;新しいSDカードをexFATでフォーマットして、EASYROMSフォルダの中身（元のゲームが入っているSDカードのフォルダ）をコピーします。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;これをR36SのTF2-GAMEスロットに挿して、OPTIONS→ADVANCED→SWITCH TO MAIN SD FOR ROMSを選択して切り替え。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;●portmaster install&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;https://portmaster.games/installation.html&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Downloadから以下をゲット&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Install.Full.PortMaster.sh&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;SDカードのtoolsフォルダにコピーする&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ネットから必要ファイルがダウンロードされるので、WIFIドングルを繋ぐ&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;本体に戻してOPTIONS-&amp;gt;Tools-&amp;gt;INSTALL.FULL.PORTMASTER　インストール&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;PORTMASTER起動　OPTIONS-&amp;gt;Tools-&amp;gt;PORTMASTER&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Optionで日本語も選べます&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;●kodi install&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;この記事にKODIに関するものがあったので試してみました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;https://www.reddit.com/r/R36S/comments/1c1mzz4/kodi_on_r36s/?tl=ja&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;kodi-Installer.rar を取ってきて解凍。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;中身の&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;kodi Installer.sh&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;kodi.tar.gz&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;２つのファイルをゲームを入れてあるSDカードにコピー。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;コピー先フォルダ: ports&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;(この2つのファイルはインストール後に消える)&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;R36Sを起動してメニューのPORTからKODI Installを実行するとインストールが開始される。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;結構時間がかかる。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;再起動するとKODIの項目がメニューにできる。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;KODIを起動するとスペイン語なので設定を変更。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;まずスペイン語が分からないので、なんとか英語にする。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;左の三つあるアイコンの真ん中が設定（画像はもうすでに英語になってます）&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/12/15/72245c.jpg" onclick="return asablo.expandimage(this,2250,4000,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/12/15/72245c.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/15/72245b.jpg" style="width: 300px; height: 533px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;Interface選択&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/12/15/72245e.jpg" onclick="return asablo.expandimage(this,2250,4000,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/12/15/72245e.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/15/72245d.jpg" style="width: 300px; height: 533px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;Interface Langage -&amp;gt; English&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/12/15/72245a.jpg" onclick="return asablo.expandimage(this,2250,4000,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/12/15/72245a.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/15/722459.jpg" style="width: 300px; height: 533px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;いきなり日本語にしない理由は以前Raspberry PiでKODIを使っていた時にフォントを”Arial”にしておかないと文字が豆腐になってなんだかわからなくなったので、念のためSkinからFontsをArial にします。&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/12/15/722460.jpg" onclick="return asablo.expandimage(this,2250,4000,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/12/15/722460.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/15/72245f.jpg" style="width: 300px; height: 533px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Interface Langageが英語のままでもフォントをArialにすると日本語が表示できます。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/12/15/722478.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;DACを繋げばより良い音で聴けます。メディアプレイヤーとしても使えるかも。。。&lt;/DIV&gt;
</description>
      <dc:subject>Linux</dc:subject>
    </item>
    <item>
      <title>YouTube埋め込みテスト</title>
      <link>https://shirusu.asablo.jp/blog/2025/12/05/9821717</link>
      <guid>https://shirusu.asablo.jp/blog/2025/12/05/9821717</guid>
      <pubDate>Fri, 05 Dec 2025 11:31:05 +0900</pubDate>
      <dcterms:modified>2025-12-07T09:04:20+09:00</dcterms:modified>
      <dcterms:created>2025-12-05T11:35:52+09:00</dcterms:created>
      <description>&lt;center&gt;&#13;
&lt;p&gt;&#13;
YouTubeの埋め込みのテストです。&#13;
ブログをHTMLで書かないといけないのは面倒ですね。&#13;
&lt;/p&gt;&#13;
&#13;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/Mhgs6f3DoSQ?si=0scniJgLQU4bq7Ph" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt;&#13;
&#13;
&lt;p&gt;&#13;
画像&#13;
&lt;/p&gt;&#13;
&#13;
&lt;div class="msg-pict"&gt;&lt;a href="https://shirusu.asablo.jp/blog/imgview/2025/10/31/71bc86.jpg.html"&#13;
 target="_blank"&#13;
 onClick="return asablo.expandimage(this,768,1365,'https://shirusu.asablo.jp/blog/img/2025/10/31/71bc86.jpg')"&gt;&lt;img src="https://shirusu.asablo.jp/blog/img/2025/10/31/71bc85.jpg" alt="" title="" width="300" height="533"&gt;&lt;/a&gt;&lt;/div&gt;&#13;
&#13;
&lt;p&gt;&#13;
２０２３年のゴールデンウィークの前後に松之山温泉でおてつたびをして、休日観光した際に撮った動画&#13;
おてつたび先の”ひなの宿ちとせ”はとても良い人たちと出会えていい経験をしました。&#13;
&lt;/p&gt;&#13;
&#13;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/1EZO4Svv2Ew?si=TxgilzGNlgQNiGwg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt;&#13;
&#13;
&lt;/center&gt;&#13;
&#13;
&lt;/body&gt;
</description>
      <dc:subject>arduino</dc:subject>
    </item>
    <item>
      <title>Spotpear ESP32C3-1.44</title>
      <link>https://shirusu.asablo.jp/blog/2025/11/11/9816470</link>
      <guid>https://shirusu.asablo.jp/blog/2025/11/11/9816470</guid>
      <pubDate>Wed, 12 Nov 2025 11:29:26 +0900</pubDate>
      <dcterms:modified>2025-11-19T15:41:41+09:00</dcterms:modified>
      <dcterms:created>2025-11-11T14:34:35+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;Spotpear ESP32C3-1.44&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;カラーLCDの使い方を調べるのに”Spotpear ESP32C3-1.44inch”　をアリエクで買ってみました。￥１０００くらい。 &lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/11/12/71d6ac.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;とりあえず買ったままの状態で起動すると説明が出てくるので、&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;スマホでテザリング設定で&amp;quot;Spotpear&amp;quot; , password &amp;quot;12345678&amp;quot;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;でWifiに接続して一応通常画面が出る。が、時間は合わないし、天気情報もでませんでした。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;●Demo  CodeをArduino IDEでコンパイルする。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;コンパイル方法&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;A href="https://spotpear.com/index/study/detail/id/1152.html" target="_blank"&gt;ESP32C3-1.44 User Guide ESP32C3-1.44 configuration tutorial&lt;/A&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;コードの在処&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;https://github.com/Spotpear/ESP32C3_1.44inch&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;1】以下のライブラリをインストール&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt; TFT_eSPI&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt; TJpg_ Decoder&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt; ArduinoJson&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt; Time&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt; HTTPClient&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt; lvgl&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;2】ライブラリ内のTFT_eSPIフォルダのUser_Setup.h を編集する&lt;/DIV&gt;&lt;DIV&gt;以下の設定にする&lt;/DIV&gt;&lt;DIV&gt;-------------------------------------------------------------------------------------------------------&lt;/DIV&gt;&lt;DIV&gt;#define ST7735_DRIVER&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;#define TFT_WIDTH  128&lt;/DIV&gt;&lt;DIV&gt;#define TFT_HEIGHT 128&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;#define ST7735_GREENTAB3&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;#define TFT_RGB_ORDER TFT_BGR  // Colour order Blue-Green-Red&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;#define TFT_INVERSION_ON&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;#define TFT_MOSI  4&lt;/DIV&gt;&lt;DIV&gt;#define TFT_SCLK  3&lt;/DIV&gt;&lt;DIV&gt;#define TFT_CS    2  // Chip select control pin&lt;/DIV&gt;&lt;DIV&gt;#define TFT_DC    0  // Data Command control pin&lt;/DIV&gt;&lt;DIV&gt;#define TFT_RST   5  // Reset pin (could connect to RST pin)&lt;/DIV&gt;&lt;DIV&gt;#define TFT_MISO -2&lt;SPAN style="white-space: pre;"&gt;	&lt;/SPAN&gt;//dummy これ追加（重要）&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;#define SPI_FREQUENCY  40000000&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;-------------------------------------------------------------------------------------------------------&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Webのspotpearの説明にはありませんが、TFT_MISO に値を入れないとTFT_INITが失敗します。&lt;/DIV&gt;&lt;DIV&gt;TFT_eSPI_ESP32_C3.h に不具合があります。TFT_eSPIのバージョンは2.5.43。&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV class="asahi_editor_line"&gt;出所&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;https://github.com/Bodmer/TFT_eSPI/issues/3772&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;・TFT_eSPIのバグ&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;１，User_Setup.hでTFT_MISOを定義しない、または-1を設定すると　TFT_MISI == TFT_MISO となって初期化できない。画面白いまま。&lt;/DIV&gt;&lt;DIV&gt;２，TFT_eSPI/Processors/TFT_eSPI_ESP32_C3.h　で&lt;/DIV&gt;&lt;DIV&gt;#define SPI_PORT_SPI2_HOST&lt;/DIV&gt;&lt;DIV&gt;を&lt;/DIV&gt;&lt;DIV&gt; #define SPI_PORT 2&lt;/DIV&gt;&lt;DIV&gt;にしないとCore Dumpが出ます。&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;TFT_MISO　に-2を入れてますが、-1ではなく、存在しないPin番号にしたかったので適当に設定しました。これが良いか不明。&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;--------------------------------------------------------------------------------------------------------------------------------------------&lt;/DIV&gt;&lt;DIV&gt;User_Setup.h&lt;/DIV&gt;&lt;DIV&gt;//                            USER DEFINED SETTINGS&lt;/DIV&gt;&lt;DIV&gt;//   Set driver type, fonts to be loaded, pins used and SPI control method etc.&lt;/DIV&gt;&lt;DIV&gt;//&lt;/DIV&gt;&lt;DIV&gt;//   See the User_Setup_Select.h file if you wish to be able to define multiple&lt;/DIV&gt;&lt;DIV&gt;//   setups and then easily select which setup file is used by the compiler.&lt;/DIV&gt;&lt;DIV&gt;//&lt;/DIV&gt;&lt;DIV&gt;//   If this file is edited correctly then all the library example sketches should&lt;/DIV&gt;&lt;DIV&gt;//   run without the need to make any more changes for a particular hardware setup!&lt;/DIV&gt;&lt;DIV&gt;//   Note that some sketches are designed for a particular TFT pixel width/height&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;// User defined information reported by &amp;quot;Read_User_Setup&amp;quot; test &amp;amp; diagnostics example&lt;/DIV&gt;&lt;DIV&gt;#define USER_SETUP_INFO &amp;quot;User_Setup&amp;quot;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;// Config for two ST7735 128 x 128 displays for Animated_Eyes example&lt;/DIV&gt;&lt;DIV&gt;#define USER_SETUP_ID 47&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;#define ST7735_DRIVER     // Configure all registers&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;#define TFT_WIDTH  128&lt;/DIV&gt;&lt;DIV&gt;#define TFT_HEIGHT 128&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;// #define ST7735_INITB&lt;/DIV&gt;&lt;DIV&gt;// #define ST7735_GREENTAB&lt;/DIV&gt;&lt;DIV&gt;// #define ST7735_GREENTAB2&lt;/DIV&gt;&lt;DIV&gt; #define ST7735_GREENTAB3&lt;/DIV&gt;&lt;DIV&gt;// #define ST7735_GREENTAB128    // For 128 x 128 display&lt;/DIV&gt;&lt;DIV&gt;// #define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 offset)&lt;/DIV&gt;&lt;DIV&gt;// #define ST7735_REDTAB&lt;/DIV&gt;&lt;DIV&gt;//#define ST7735_BLACKTAB&lt;/DIV&gt;&lt;DIV&gt;// #define ST7735_REDTAB160x80   // For 160 x 80 display with 24 pixel offset&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;//#define TFT_RGB_ORDER TFT_RGB  // Colour order Red-Green-Blue&lt;/DIV&gt;&lt;DIV&gt;#define TFT_RGB_ORDER TFT_BGR  // Colour order Blue-Green-Red&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;#define TFT_INVERSION_ON&lt;/DIV&gt;&lt;DIV&gt;//#define TFT_INVERSION_OFF&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;// Generic ESP32 setup&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;//add for spotpear esp32-c3 1.44&lt;/DIV&gt;&lt;DIV&gt;#define TFT_MOSI  4&lt;/DIV&gt;&lt;DIV&gt;#define TFT_SCLK  3&lt;/DIV&gt;&lt;DIV&gt;#define TFT_CS    2  // Chip select control pin&lt;/DIV&gt;&lt;DIV&gt;#define TFT_DC    0  // Data Command control pin&lt;/DIV&gt;&lt;DIV&gt;#define TFT_RST   5  // Reset pin (could connect to RST pin)&lt;/DIV&gt;&lt;DIV&gt;#define TFT_MISO -2&lt;SPAN style="white-space: pre;"&gt;	&lt;/SPAN&gt;//dummy&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;//#define TFT_MISO 19&lt;/DIV&gt;&lt;DIV&gt;//#define TFT_MOSI 23&lt;/DIV&gt;&lt;DIV&gt;//#define TFT_SCLK 18&lt;/DIV&gt;&lt;DIV&gt;////#define TFT_CS    21 // Not defined here, chip select is managed by sketch&lt;/DIV&gt;&lt;DIV&gt;//#define TFT_DC    2&lt;/DIV&gt;&lt;DIV&gt;//#define TFT_RST   4  // Connect reset to ensure display initialises&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;#define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH&lt;/DIV&gt;&lt;DIV&gt;#define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters&lt;/DIV&gt;&lt;DIV&gt;#define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters&lt;/DIV&gt;&lt;DIV&gt;#define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm&lt;/DIV&gt;&lt;DIV&gt;#define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:.&lt;/DIV&gt;&lt;DIV&gt;#define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.&lt;/DIV&gt;&lt;DIV&gt;//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT&lt;/DIV&gt;&lt;DIV&gt;#define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;#define SMOOTH_FONT&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;//#define SPI_FREQUENCY  27000000&lt;/DIV&gt;&lt;DIV&gt;#define SPI_FREQUENCY  40000000&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;#define SPI_READ_FREQUENCY  20000000&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;#define SPI_TOUCH_FREQUENCY  2500000&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;// #define SUPPORT_TRANSACTIONS&lt;/DIV&gt;&lt;DIV&gt;--------------------------------------------------------------------------------------------------------------------------------------------&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;3】lvglライブラリの　lv_conf.h　の作成&lt;/DIV&gt;&lt;DIV&gt; lvglライブラリは9.4.0（現時点で最新）から8.4.0にダウングレードした。lv_conf.h がだいぶ違う。9.x.xはエラーがたくさんでて面倒なので。&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;lv_conf_template.h をコピーして名前をlv_conf.hにしてlibrariesフォルダーに入れる&lt;/DIV&gt;&lt;DIV&gt;lv_conf.hを編集する&lt;/DIV&gt;&lt;DIV&gt;（編集されたものがDemo codeに入ってるのでそのまま使える）&lt;/DIV&gt;&lt;DIV&gt;●---Modify the parameter to change 0 to 1 here&lt;/DIV&gt;&lt;DIV&gt;/* clang-format off */&lt;/DIV&gt;&lt;DIV&gt;#if 1 /*Set it to &amp;quot;1&amp;quot; to enable content*/&lt;SPAN style="white-space: pre;"&gt;									&lt;/SPAN&gt;&amp;lt;-　1に &lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;#ifndef LV_CONF_H&lt;/DIV&gt;&lt;DIV&gt;#define LV_CONF_H&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;#include &amp;lt;stdint.h&amp;gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;/*====================&lt;/DIV&gt;&lt;DIV&gt;   COLOR SETTINGS&lt;/DIV&gt;&lt;DIV&gt; *====================*/&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/&lt;/DIV&gt;&lt;DIV&gt;#define LV_COLOR_DEPTH 16&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;/*Swap the 2 bytes of RGB565 color. Useful if the display has an 8-bit interface (e.g. SPI)*/&lt;/DIV&gt;&lt;DIV&gt;#define LV_COLOR_16_SWAP 0&lt;SPAN style="white-space: pre;"&gt;											&lt;/SPAN&gt;&amp;lt;-　付属のヘッダーファイルは０だが、Webの説明では1 &lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;●--- Change 30 to 16 and 0 to 1 here&lt;/DIV&gt;&lt;DIV&gt;/*====================&lt;/DIV&gt;&lt;DIV&gt;   HAL SETTINGS&lt;/DIV&gt;&lt;DIV&gt; *====================*/&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;/*Default display refresh period. LVG will redraw changed areas with this period time*/&lt;/DIV&gt;&lt;DIV&gt;#define LV_DISP_DEF_REFR_PERIOD 16      /*[ms]*/&lt;SPAN style="white-space: pre;"&gt;								&lt;/SPAN&gt;&amp;lt;-　16に&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;/*Input device read period in milliseconds*/&lt;/DIV&gt;&lt;DIV&gt;#define LV_INDEV_DEF_READ_PERIOD 30     /*[ms]*/&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;/*Use a custom tick source that tells the elapsed time in milliseconds.&lt;/DIV&gt;&lt;DIV&gt; *It removes the need to manually update the tick with `lv_tick_inc()`)*/&lt;/DIV&gt;&lt;DIV&gt;#define LV_TICK_CUSTOM 1&lt;SPAN style="white-space: pre;"&gt;											&lt;/SPAN&gt;&amp;lt;-　1に&lt;/DIV&gt;&lt;DIV&gt;#if LV_TICK_CUSTOM&lt;/DIV&gt;&lt;DIV&gt;    #define LV_TICK_CUSTOM_INCLUDE &amp;quot;Arduino.h&amp;quot;         /*Header for the system time function*/&lt;/DIV&gt;&lt;DIV&gt;    #define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis())    /*Expression evaluating to current system time in ms*/&lt;/DIV&gt;&lt;DIV&gt;#endif   /*LV_TICK_CUSTOM*/&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;/*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings.&lt;/DIV&gt;&lt;DIV&gt; *(Not so important, you can adjust it to modify default sizes and spaces)*/&lt;/DIV&gt;&lt;DIV&gt;#define LV_DPI_DEF 130     /*[px/inch]*/&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;※ライブラリのバグにたどり着くまで、１日あまり費やしました。githubの皆さんに感謝。&lt;/DIV&gt;&lt;DIV&gt;これでTFT_eSPIライブラリが使えるようになりました。&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
</description>
      <dc:subject>arduino</dc:subject>
    </item>
    <item>
      <title>Freenove Arduino用六脚ロボットキット</title>
      <link>https://shirusu.asablo.jp/blog/2025/10/31/9813817</link>
      <guid>https://shirusu.asablo.jp/blog/2025/10/31/9813817</guid>
      <pubDate>Fri, 31 Oct 2025 14:54:51 +0900</pubDate>
      <dcterms:modified>2025-11-05T09:41:12+09:00</dcterms:modified>
      <dcterms:created>2025-10-31T14:58:57+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;アリエクで Freenove  6脚ロボットキットを買って組み立てました。(￥&lt;SPAN class="es--char--RqgnKC9" data-spm-anchor-id="a2g0o.order_detail.0.i4.7eab16919MNjKE" style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; outline: 0px; margin: 0px; padding: 0px; display: inline; font-size: 14px; color: rgb(34, 34, 34); font-family: &amp;quot;TT Norms Pro&amp;quot;, &amp;quot;Open Sans&amp;quot;, Roboto, Arial, Helvetica, sans-serif, SimSun; font-weight: 700;"&gt;1&lt;/SPAN&gt;&lt;SPAN class="es--char--RqgnKC9" style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; outline: 0px; margin: 0px; padding: 0px; display: inline; font-size: 14px; color: rgb(34, 34, 34); font-family: &amp;quot;TT Norms Pro&amp;quot;, &amp;quot;Open Sans&amp;quot;, Roboto, Arial, Helvetica, sans-serif, SimSun; font-weight: 700;"&gt;2&lt;/SPAN&gt;&lt;SPAN class="es--char--RqgnKC9" style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; outline: 0px; margin: 0px; padding: 0px; display: inline; font-size: 14px; color: rgb(34, 34, 34); font-family: &amp;quot;TT Norms Pro&amp;quot;, &amp;quot;Open Sans&amp;quot;, Roboto, Arial, Helvetica, sans-serif, SimSun; font-weight: 700;"&gt;,&lt;/SPAN&gt;&lt;SPAN class="es--char--RqgnKC9" style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; outline: 0px; margin: 0px; padding: 0px; display: inline; font-size: 14px; color: rgb(34, 34, 34); font-family: &amp;quot;TT Norms Pro&amp;quot;, &amp;quot;Open Sans&amp;quot;, Roboto, Arial, Helvetica, sans-serif, SimSun; font-weight: 700;"&gt;6&lt;/SPAN&gt;&lt;SPAN class="es--char--RqgnKC9" style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; outline: 0px; margin: 0px; padding: 0px; display: inline; font-size: 14px; color: rgb(34, 34, 34); font-family: &amp;quot;TT Norms Pro&amp;quot;, &amp;quot;Open Sans&amp;quot;, Roboto, Arial, Helvetica, sans-serif, SimSun; font-weight: 700;"&gt;3&lt;/SPAN&gt;&lt;SPAN class="es--char--RqgnKC9" style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; outline: 0px; margin: 0px; padding: 0px; display: inline; font-size: 14px; color: rgb(34, 34, 34); font-family: &amp;quot;TT Norms Pro&amp;quot;, &amp;quot;Open Sans&amp;quot;, Roboto, Arial, Helvetica, sans-serif, SimSun; font-weight: 700;"&gt;8コントローラ付き&lt;/SPAN&gt;)&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;箱が結構つぶれていましたが、中身は大丈夫でした。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/10/31/71bc7c.jpg" onclick="return asablo.expandimage(this,4000,2250,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/10/31/71bc7c.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/10/31/71bc7b.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/10/31/71bc86.jpg" onclick="return asablo.expandimage(this,768,1365,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/10/31/71bc86.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/10/31/71bc85.jpg" style="width: 300px; height: 533px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;A target="_blank" class="style-scope ytcp-video-info" href="https://youtu.be/Mhgs6f3DoSQ" style="scrollbar-width: thin; scrollbar-color: rgb(96, 96, 96) rgba(0, 0, 0, 0); --big-bar-height: 19px; --medium-bar-height: 14px; --small-bar-height: 10px; text-decoration-line: none; color: rgb(62, 166, 255); font-family: Roboto, Noto, sans-serif; font-size: 15px; text-wrap-mode: nowrap; background-color: rgb(31, 31, 31);"&gt;https://youtu.be/Mhgs6f3DoSQ&lt;/A&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;とりあえず動きました。動画では超音波センサーがついていますが、キットには含まれません。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Wifi経由でスマホアプリやパソコン用のProcessingというアプリでコントロールできます。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/11/01/71be1d.jpg" onclick="return asablo.expandimage(this,1365,768,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/11/01/71be1d.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/11/01/71be1c.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV&gt;ロボット本体のCPUは ATNEGA2560-16AU &lt;/DIV&gt;&lt;DIV&gt;GPIOのヘッダーがあるのでセンサーなどが取り付けられます。&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;写真にあるヘッダーに超音波センサーを付けて、障害物をよけるようにしました。&lt;/DIV&gt;&lt;DIV&gt;●配線&lt;/DIV&gt;&lt;DIV&gt;HC-SR04 -&amp;gt; Header pin&lt;/DIV&gt;&lt;DIV&gt;Trig -&amp;gt; 2pin&lt;/DIV&gt;&lt;DIV&gt;Echo -&amp;gt; 3pin&lt;/DIV&gt;&lt;DIV&gt;Vcc -&amp;gt; 3.3V&lt;/DIV&gt;&lt;DIV&gt;Gnd -&amp;gt; GND&lt;/DIV&gt;&lt;DIV&gt;●動作&lt;/DIV&gt;&lt;DIV&gt;１，前足右を２回振る&lt;/DIV&gt;&lt;DIV&gt;２，前進&lt;/DIV&gt;&lt;DIV&gt;３，物が２０ｃｍ以内なら左に回転&lt;/DIV&gt;&lt;DIV&gt;４，５回左に回転しても物がある場合、スリープ&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;謎な点&lt;/DIV&gt;&lt;DIV&gt;センサープログラムをロボットに組み込んでみたら、１回目に値がおかしい場合がある。ワークアラウンド：とりあえず２回読む。&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;●スケッチ&lt;/DIV&gt;&lt;DIV&gt;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV style="color: rgb(78, 91, 97); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;"&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#ifndef&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;ARDUINO_AVR_MEGA2560&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#error&lt;/SPAN&gt; Wrong board. Please choose &amp;quot;Arduino/Genuino Mega or Mega 2560&amp;quot;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#endif&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// Include FNHR (Freenove Hexapod Robot) library&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;lt;FNHR.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// ====================== 設定 ======================&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; TRIG_PIN = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;2&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   // 出力 (TRIG)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; ECHO_PIN = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;3&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   // 入力 (ECHO)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//#define DEBUG_SERIAL&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;FNHR robot;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;setup&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Custom setup code start&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#ifdef&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;DEBUG_SERIAL&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;begin&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;9600&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#endif&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // 測距センサー&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;pinMode&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;TRIG_PIN, OUTPUT&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;pinMode&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;ECHO_PIN, INPUT&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;digitalWrite&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;TRIG_PIN, LOW&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;          // まず LOW にしておく&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Custom setup code end&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Start Freenove Hexapod Robot&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;robot&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;Start&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  //前足を振る&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;leg_move&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;leg_move&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;loop&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Custom loop code start&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(0, 151, 157);"&gt;static&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; count = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(0, 151, 157);"&gt;long&lt;/SPAN&gt; distance = &lt;SPAN style="color: rgb(211, 84, 0);"&gt;measureDistance&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;delay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;5&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  distance = &lt;SPAN style="color: rgb(211, 84, 0);"&gt;measureDistance&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#ifdef&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;DEBUG_SERIAL&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;distance &amp;gt;= &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;                 // -1 はエラー&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Distance: &amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;distance&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot; cm&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;else&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Out of range / timeout&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#endif&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;distance &amp;gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;20&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;  &lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Crawl forward&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;crowl_forward&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  count = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;else&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    // Turn left&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;turn_left&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;delay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1000&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;    ++count;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;count &amp;gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;robot&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;SleepMode&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      count = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(114, 142, 0);"&gt;while&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;true&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; //stop&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//動作&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;leg_move&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Active mode&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;robot&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;ActiveMode&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;delay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;500&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;robot&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;LegMoveToRelatively&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;10&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;60&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;50&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;delay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;200&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;robot&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;LegMoveToRelatively&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;, -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;20&lt;/SPAN&gt;, -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;10&lt;/SPAN&gt;, -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;10&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;delay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;100&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;robot&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;LegMoveToRelatively&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;40&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;10&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;10&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;delay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;100&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;robot&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;LegMoveToRelatively&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;, -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;40&lt;/SPAN&gt;, -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;10&lt;/SPAN&gt;, -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;10&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;delay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;100&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;robot&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;LegMoveToRelatively&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;20&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;10&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;10&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;delay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;200&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;robot&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;LegMoveToRelatively&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;, -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;10&lt;/SPAN&gt;, -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;60&lt;/SPAN&gt;, -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;50&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;crowl_forward&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;count)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;for&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; i = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;i &amp;lt; count;i++&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    // Crawl forward&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;robot&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;CrawlForward&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;crowl_backward&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;count)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;for&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; i = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;i &amp;lt; count;i++&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    // Crawl Backward&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;robot&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;CrawlBackward&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;crowl_left&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;count)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;for&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; i = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;i &amp;lt; count;i++&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    // Crawl Backward&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;robot&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;CrawlLeft&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;crowl_right&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;count)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;for&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; i = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;i &amp;lt; count;i++&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    // Crawl Backward&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;robot&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;CrawlRight&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;turn_left&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;count)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;for&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; i = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;i &amp;lt; count;i++&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;robot&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;TurnLeft&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// ====================== 測定関数 ======================&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;long&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;measureDistance&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // 1. TRIG を 10µs HIGH にする&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;digitalWrite&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;TRIG_PIN, HIGH&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;delayMicroseconds&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;10&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;digitalWrite&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;TRIG_PIN, LOW&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // 2. ECHO パルス幅を取得（max 30 ms = 30000 µs）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  //    timeout_ms を設定して無限待ちにならないように&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint32_t&lt;/SPAN&gt; timeout_us = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;30000&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   // 30 ms&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint32_t&lt;/SPAN&gt; pulse = &lt;SPAN style="color: rgb(211, 84, 0);"&gt;pulseIn&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;ECHO_PIN, HIGH, timeout_us&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;pulse == &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;return&lt;/SPAN&gt; -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;           // タイムアウト&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // 3. 距離を cm に変換&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(0, 151, 157);"&gt;long&lt;/SPAN&gt; distance_cm = pulse / &lt;SPAN style="color: rgb(0, 92, 95);"&gt;58&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;       // 1cm ≈ 58µs（往復）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;return&lt;/SPAN&gt; distance_cm;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;
</description>
      <dc:subject>arduino</dc:subject>
    </item>
    <item>
      <title>LM Studioでスケッチの改善</title>
      <link>https://shirusu.asablo.jp/blog/2025/08/29/9799335</link>
      <guid>https://shirusu.asablo.jp/blog/2025/08/29/9799335</guid>
      <pubDate>Fri, 29 Aug 2025 12:57:44 +0900</pubDate>
      <dcterms:modified>2025-08-30T08:32:40+09:00</dcterms:modified>
      <dcterms:created>2025-08-29T13:21:41+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;前回作成した　Web Radio　のスケッチで、局名と曲名を2段、&lt;SPAN style="background-color: initial;"&gt;横&lt;/SPAN&gt;&lt;SPAN style="background-color: initial;"&gt;スクロールするのに同じコードを２つ書いていて無駄だなと思っておりました。C++でかっこよく複数使える関数にしたいと思い、LM Studio というローカルで使えるAIに聞いてみました。LLMは gpt-oss-20b を使いました。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/08/29/71246c.jpg" onclick="return asablo.expandimage(this,1547,1629,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/08/29/71246c.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/08/29/71246b.jpg" style="width: 300px; height: 315px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;意図が分かってもらえたようで、良さそうな回答が得られました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ただグラフィックまわりは変だったので直してこんな感じでできました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ボードはESP32-C3 &amp;amp; 128x32 SSD1306 Display&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/08/29/712488.jpg" onclick="return asablo.expandimage(this,2037,3054,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/08/29/712488.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/08/29/712487.jpg" style="width: 300px; height: 449px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;できたスケッチはこちら&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ScrollText.h&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV style="color: rgb(78, 91, 97); background-color: rgb(255, 255, 255); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;"&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;/*********************************************************************&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; *  ScrollText.h&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; *********************************************************************/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#pragma&lt;/SPAN&gt; once&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;lt;Adafruit_GFX.h&amp;gt;&lt;/SPAN&gt;          &lt;SPAN style="color: rgb(149, 165, 166);"&gt;// 既存の画面描画ライブラリ&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;lt;U8g2_for_Adafruit_GFX.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// ------------------------------------------------------------------&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// 一行分をスクロールさせる構造体&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;struct&lt;/SPAN&gt; ScrollItem &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    String text;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;          // 表示したい文字列&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt;   x;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;              // 現在のX座標（左端）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt;   y;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;              // Y座標（固定で1行ごとにずらす）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt;   speed;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;          // 1フレームあたりのスクロール量 (px)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt;   minX;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;           // テキストが画面外に完全に出る位置&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; *font;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // フォントポインタ（U8g2フォント）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// ------------------------------------------------------------------&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// 複数行を管理するクラス&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;class&lt;/SPAN&gt; Scroller &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;public:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Scroller&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;U8G2_FOR_ADAFRUIT_GFX &lt;SPAN style="color: rgb(0, 151, 157);"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;gfx&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;displayW)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        : &lt;SPAN style="color: rgb(211, 84, 0);"&gt;gfx&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;gfx&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;width&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;displayW&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    // 1行追加。y は任意に決めるか、内部で自動計算する。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;addText&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; String&lt;SPAN style="color: rgb(0, 151, 157);"&gt;&amp;amp;&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;txt&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;                 &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;y&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;                 &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;speed&lt;/SPAN&gt; = -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;2&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;                 &lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;*&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;font&lt;/SPAN&gt; = u8g2_font_unifont_t_japanese1&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        ScrollItem itm;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;itm&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;text&lt;/SPAN&gt;  = txt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;itm&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;y&lt;/SPAN&gt;     = y;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;itm&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;speed&lt;/SPAN&gt; = speed;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;itm&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;font&lt;/SPAN&gt;  = font;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;        // 初期位置: 画面右端&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;itm&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;x&lt;/SPAN&gt; = width;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;        // 最小X（テキストが完全に左側へ消える）＝文字数 * 6(px) + 1px余白&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;        //   ※ 6 px はフォントの幅。必要なら変更。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;itm&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;minX&lt;/SPAN&gt; = - &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;txt&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;length&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; * &lt;SPAN style="color: rgb(0, 92, 95);"&gt;6&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;items&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;push_back&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;itm&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    // 1フレーム分更新＋描画&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;update&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;for&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;auto&lt;/SPAN&gt; &amp;amp;itm : items&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;            // フォント設定&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;            &lt;SPAN style="color: rgb(211, 84, 0);"&gt;gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setFontMode&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;          // 透明背景&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;            &lt;SPAN style="color: rgb(211, 84, 0);"&gt;gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setFont&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;itm&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;font&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;            // 描画位置を設定&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;            &lt;SPAN style="color: rgb(211, 84, 0);"&gt;gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setCursor&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;itm&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;x&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;itm&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;y&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;            &lt;SPAN style="color: rgb(211, 84, 0);"&gt;gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;itm&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;text&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;            // スクロール処理&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;            &lt;SPAN style="color: rgb(211, 84, 0);"&gt;itm&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;x&lt;/SPAN&gt; += &lt;SPAN style="color: rgb(211, 84, 0);"&gt;itm&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;speed&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   // speed は負数で左へ&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;            // 画面外に完全に出たら右側へ戻す（ループ再表示）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;            &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;itm&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;x&lt;/SPAN&gt; &amp;lt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;itm&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;minX&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;                &lt;SPAN style="color: rgb(211, 84, 0);"&gt;itm&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;x&lt;/SPAN&gt; = width;&lt;/DIV&gt;&lt;DIV&gt;            &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;private:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    U8G2_FOR_ADAFRUIT_GFX &amp;amp;gfx;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;          // 画面描画オブジェクト&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt;                     width;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;       // 画面幅（px）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    std::vector&amp;lt;ScrollItem&amp;gt; items;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;       // 複数行管理&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;本体&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV style="color: rgb(78, 91, 97); background-color: rgb(255, 255, 255); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;"&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;lt;Adafruit_SSD1306.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;lt;U8g2_for_Adafruit_GFX.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;ScrollText.h&amp;quot;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; I2C_SDA = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   //   for C3mini&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; I2C_SCL = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   // &lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;SCREEN_WIDTH&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;128&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//#define SCREEN_HEIGHT 64&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;SCREEN_HEIGHT&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;32&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;OLED_RESET&lt;/SPAN&gt;     -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;SCREEN_ADDRESS&lt;/SPAN&gt;      (0x3C)&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;Adafruit_SSD1306 &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;SCREEN_WIDTH, SCREEN_HEIGHT, &amp;amp;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;Wire&lt;/SPAN&gt;, OLED_RESET&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;U8G2_FOR_ADAFRUIT_GFX u8g2_for_adafruit_gfx;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;Scroller &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;u8g2_for_adafruit_gfx, SCREEN_WIDTH&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;setup&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;begin&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;115200&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Wire&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;begin&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;I2C_SDA, I2C_SCL&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;; &lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;!&lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;begin&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS&lt;SPAN style="color: rgb(67, 79, 84);"&gt;))&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; // I²Cアドレス&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;F&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;SSD1306 allocation failed&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;))&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;for&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;;;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; // 無限ループ&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;u8g2_for_adafruit_gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;begin&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;display&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;                 // connect u8g2 procedures to Adafruit GFX&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;clearDisplay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    // 例: 2 行スクロール&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;addText&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;F&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Hello World! This is line 1.&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;16&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;addText&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;F&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Second line scrolling left.&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;32&lt;/SPAN&gt;, -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;3&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;addText&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;F&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Hello World! This is line 1.&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;16&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;addText&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;F&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;日本語テスト&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;32&lt;/SPAN&gt;-&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;, -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;3&lt;/SPAN&gt;, u8g2_font_unifont_t_japanese1&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#endif&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    // 任意にフォント変更したい場合は第4引数で指定&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    // scroller.addText(F(&amp;quot;日本語テスト&amp;quot;), 48, -2,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    //                  u8g2_font_unifont_t_japanese1);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;loop&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;F&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;loop&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;))&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;clearDisplay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;update&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   // 1フレーム分を描画&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;delay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;50&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;           // ~20fps&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;短時間でなかなかよいものができたと思いました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ＡＩ恐るべし。。。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;2025/8/30 更新&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;組み込んで使ってみたら、addしたtextが変更できないことがわかりました。追加しかできない。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;それで変更しました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV style="color: rgb(78, 91, 97); background-color: rgb(255, 255, 255); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;"&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;/*********************************************************************&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; *  ScrollText.h&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; *********************************************************************/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#pragma&lt;/SPAN&gt; once&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;lt;Adafruit_GFX.h&amp;gt;&lt;/SPAN&gt;          &lt;SPAN style="color: rgb(149, 165, 166);"&gt;// 既存の画面描画ライブラリ&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;lt;U8g2_for_Adafruit_GFX.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// ------------------------------------------------------------------&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;class&lt;/SPAN&gt; ScrollingText &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;public:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    // コンストラクタ: 描画オブジェクトと初期Y座標を受け取る&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;ScrollingText&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;U8G2_FOR_ADAFRUIT_GFX &lt;SPAN style="color: rgb(0, 151, 157);"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;gfx&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;displayW&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;y&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;                  &lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;*&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;font&lt;/SPAN&gt; = u8g2_font_unifont_t_japanese1,&lt;/DIV&gt;&lt;DIV&gt;                  &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;speed&lt;/SPAN&gt; = -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;2&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        : &lt;SPAN style="color: rgb(211, 84, 0);"&gt;gfx&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;gfx&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;width&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;displayW&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;y&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;y&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;font&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;font&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;speed&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;speed&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        x    = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;          // 初期位置は任意（ここでは画面右端に設定する）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        minX = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;          // 以降 setText() で更新&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    // テキストをセットすると、minX と初期 X を計算&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;setText&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; String &lt;SPAN style="color: rgb(0, 151, 157);"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;message)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        msg   = message;&lt;/DIV&gt;&lt;DIV&gt;        minX  = -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;6&lt;/SPAN&gt; * &lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;length&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;     // 6px × 2(フォントサイズ?) = 12px&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        x     = width;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    // 1フレーム分更新＋描画（呼び出し側で loop() 内に入れる）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;update&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;isEmpty&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;())&lt;/SPAN&gt; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;return&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;      // テキストが設定されていなければ何もしない&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;        // フォント設定&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setFontMode&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;          // 透明背景&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setFont&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;font&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;        // 描画位置を設定&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setCursor&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;x, y&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;msg&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;        // スクロール処理&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        x += speed;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   // speed は負数で左へ&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;        // 画面外に完全に出たら右側へ戻す（ループ再表示）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;x &amp;lt; minX&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;            x = width;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;private:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    U8G2_FOR_ADAFRUIT_GFX &amp;amp;gfx;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt;      width;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;       // 画面幅（px）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    String msg;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;          // 現在表示中の文字列&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt;   x, y, minX;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; *font;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt;   speed;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;本体&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV style="color: rgb(78, 91, 97); background-color: rgb(255, 255, 255); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;"&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;lt;Adafruit_SSD1306.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;lt;U8g2_for_Adafruit_GFX.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;ScrollText.h&amp;quot;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; I2C_SDA = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   //   for C3mini&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; I2C_SCL = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   // &lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;SCREEN_WIDTH&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;128&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//#define SCREEN_HEIGHT 64&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;SCREEN_HEIGHT&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;32&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;OLED_RESET&lt;/SPAN&gt;     -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;SCREEN_ADDRESS&lt;/SPAN&gt;      (0x3C)&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;Adafruit_SSD1306 &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;SCREEN_WIDTH, SCREEN_HEIGHT, &amp;amp;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;Wire&lt;/SPAN&gt;, OLED_RESET&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;U8G2_FOR_ADAFRUIT_GFX u8g2_for_adafruit_gfx;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;ScrollingText &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller1&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;u8g2_for_adafruit_gfx, SCREEN_WIDTH, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;16&lt;/SPAN&gt;, u8g2_font_unifont_t_japanese1, -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;2&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; // Y=16px&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;ScrollingText &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller2&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;u8g2_for_adafruit_gfx, SCREEN_WIDTH, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;32&lt;/SPAN&gt;-&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;, u8g2_font_unifont_t_japanese1, -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; // Y=31px&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;setup&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;begin&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;115200&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Wire&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;begin&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;I2C_SDA, I2C_SCL&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;; &lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;!&lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;begin&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS&lt;SPAN style="color: rgb(67, 79, 84);"&gt;))&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt; &lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;F&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;SSD1306 allocation failed&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;))&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;for&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;;;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;u8g2_for_adafruit_gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;begin&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;display&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;                 // connect u8g2 procedures to Adafruit GFX&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;clearDisplay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller1&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setText&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;F&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;長い文字列をスクロール表示します。&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;))&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; // 任意の文字列&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller2&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setText&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;F&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;日本語表示。&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;))&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; // 任意の文字列&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;loop&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;clearDisplay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller1&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;update&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   // 1フレーム分描画＆スクロール&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller2&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;update&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   // 1フレーム分描画＆スクロール&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;delay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;50&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;           // 約20fps&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;WebRadio に組み込み&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV style="color: rgb(78, 91, 97); background-color: rgb(255, 255, 255); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;"&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;lt;Wire.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//#include &amp;lt;Adafruit_GFX.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;lt;Adafruit_SSD1306.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;lt;U8g2_for_Adafruit_GFX.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;lt;WiFiMulti.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;WiFi.h&amp;quot;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Audio.h&amp;quot;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Rotary.h&amp;quot;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;ScrollText.h&amp;quot;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;enum&lt;/SPAN&gt; STATE &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;NORMAL&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;MENU&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;VOLUME&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;FUNCTION&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;STATE state = NORMAL;  &lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// Enconder PINs&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;ENCODER_PIN_A&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;ENCODER_PIN_B&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;2&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;PUSH_SW&lt;/SPAN&gt;      &lt;SPAN style="color: rgb(0, 92, 95);"&gt;21&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// The pins for I2C are defined by the Wire-library. &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; I2C_SDA = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;18&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   // &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; I2C_SCL = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;17&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   // &lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;SCREEN_WIDTH&lt;/SPAN&gt;        (128)&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;SCREEN_HEIGHT&lt;/SPAN&gt;       (64)&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//#define SCREEN_HEIGHT       (32)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;VUPOS_X&lt;/SPAN&gt;     (96)&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;VUPOS_Y&lt;/SPAN&gt;     (1)&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;VOLPOS_X&lt;/SPAN&gt;     (8)&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;VOLPOS_Y&lt;/SPAN&gt;     (22)&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// 8×8 のビットマップ（例：笑顔アイコン）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;smiley&lt;/SPAN&gt;[&lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;] PROGMEM = &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00111100&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;01000010&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;10100101&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;10000001&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;10100101&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;10011001&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;01000010&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00111100&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// 8×8 のビットマップ（例：アンテナアイコン）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;antena&lt;/SPAN&gt;[&lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;] PROGMEM = &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;11111110&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;01010100&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00111000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00010000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00010000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00010000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00010000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// 8×8 のビットマップ（例：アンテナアイコン）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;antenaNG&lt;/SPAN&gt;[&lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;] PROGMEM = &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;11111110&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;11010110&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00111000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;01010000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00111000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;01010100&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;10010010&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;antena0&lt;/SPAN&gt;[&lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;] PROGMEM = &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;antena1&lt;/SPAN&gt;[&lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;] PROGMEM = &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;01000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;antena2&lt;/SPAN&gt;[&lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;] PROGMEM = &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00010000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00010000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;01010000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;antena3&lt;/SPAN&gt;[&lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;] PROGMEM = &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000100&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000100&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00010100&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00010100&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;01010100&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;antena4&lt;/SPAN&gt;[&lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;] PROGMEM = &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000001&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000001&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000101&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000101&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00010101&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00010101&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;01010101&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// 8×8 のビットマップ（例：アンテナアイコン）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;wifi_ant&lt;/SPAN&gt;[&lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;] PROGMEM = &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;01111100&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;10000010&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00111000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;01000100&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00010000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00101000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00010000&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;  0b&lt;SPAN style="color: rgb(0, 92, 95);"&gt;00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;OLED_RESET&lt;/SPAN&gt;          (-1)&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;SCREEN_ADDRESS&lt;/SPAN&gt;      (0x3C)&lt;/DIV&gt;&lt;DIV&gt;Adafruit_SSD1306 &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;SCREEN_WIDTH, SCREEN_HEIGHT, &amp;amp;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;Wire&lt;/SPAN&gt;, OLED_RESET&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;U8G2_FOR_ADAFRUIT_GFX u8g2_for_adafruit_gfx;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//for scroll text&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;ScrollingText &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller1&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;u8g2_for_adafruit_gfx, SCREEN_WIDTH, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;32&lt;/SPAN&gt;, u8g2_font_unifont_t_japanese1, -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;2&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;ScrollingText &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller2&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;u8g2_for_adafruit_gfx, SCREEN_WIDTH, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;48&lt;/SPAN&gt;, u8g2_font_unifont_t_japanese1, -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;3&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// Digital I/O used&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;# define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;I2S_DOUT&lt;/SPAN&gt;      &lt;SPAN style="color: rgb(0, 92, 95);"&gt;11&lt;/SPAN&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // DIN connection&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;# define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;I2S_BCLK&lt;/SPAN&gt;      &lt;SPAN style="color: rgb(0, 92, 95);"&gt;13&lt;/SPAN&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Bit clock&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;# define&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;I2S_LRC&lt;/SPAN&gt;       &lt;SPAN style="color: rgb(0, 92, 95);"&gt;12&lt;/SPAN&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Left Right Clock&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;Audio audio;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV&gt;String stations[] =&lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;radio-stream.nhk.jp/hls/live/2023229/nhkradiruakr1/master.m3u8&amp;quot;&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   //NHK 1&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;radio-stream.nhk.jp/hls/live/2023501/nhkradiruakr2/master.m3u8&amp;quot;&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   //NHK 2&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;radio-stream.nhk.jp/hls/live/2023507/nhkradiruakfm/master.m3u8&amp;quot;&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   //NHK FM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;stream.laut.fm/animefm&amp;quot;&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;cast1.torontocast.com:2120/;.mp3&amp;quot;&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;cast1.torontocast.com:2170/;.mp3&amp;quot;&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//        &amp;quot;cast1.torontocast.com/JapanHits&amp;quot;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//        &amp;quot;cast1.torontocast.com:2120/stream&amp;quot;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;s3.radio.co/sc8d895604/listen&amp;quot;&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;kathy.torontocast.com:3060/;?shoutcast&amp;quot;&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;vrx.piro.moe:8000/stream-256&amp;quot;&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;vocaloid.radioca.st/stream&amp;quot;&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(149, 165, 166);"&gt;                                       //Vocaloid Radio&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;mtist.as.smartstream.ne.jp/30043/livestream/chunklist.m3u8&amp;quot;&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(149, 165, 166);"&gt;       //MWave&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;mtist.as.smartstream.ne.jp/30081/livestream/chunklist.m3u8&amp;quot;&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(149, 165, 166);"&gt;       // &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;ice1.somafm.com/illstreet-128-mp3&amp;quot;&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(149, 165, 166);"&gt;                                // SomaFM / Illinois Street Lounge&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;ais-sa2.cdnstream1.com/b22139_128mp3&amp;quot;&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(149, 165, 166);"&gt;                             // 101 SMOOTH JAZZ&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;relax.stream.publicradio.org/relax.mp3&amp;quot;&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(149, 165, 166);"&gt;                           // Your Classical - Relax&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;ice1.somafm.com/secretagent-128-mp3&amp;quot;&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(149, 165, 166);"&gt;                              // SomaFM / Secret Agent&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;ice1.somafm.com/seventies-128-mp3&amp;quot;&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(149, 165, 166);"&gt;                                // SomaFM / Left Coast 70s&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;ice1.somafm.com/bootliquor-128-mp3&amp;quot;&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(149, 165, 166);"&gt;                               // SomaFM / Boot Liquor&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;shonanbeachfm.out.airtime.pro:8000/shonanbeachfm_a&amp;quot;&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(149, 165, 166);"&gt;               // FM Blue Shonan (FM・ブルー湘南 , JOZZ3AD-FM, 78.5 MHz, Y...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;0n-80s.radionetz.de:8000/0n-70s.mp3&amp;quot;&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;mediaserv30.live-streams.nl:8000/stream&amp;quot;&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;mp3.ffh.de/radioffh/hqlivestream.aac&amp;quot;&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(149, 165, 166);"&gt;                             //  128k aac&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;listen.rusongs.ru/ru-mp3-128&amp;quot;&lt;/SPAN&gt;,&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; cur_station  = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;         // current station No.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; num_elements = sizeof&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;stations&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; / sizeof&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;stations&lt;/SPAN&gt;[&lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;]&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;volatile&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; encoderCount = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// Encoder control&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;Rotary encoder = &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Rotary&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;ENCODER_PIN_A, ENCODER_PIN_B&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//Wifi&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;WiFiMulti wifiMulti;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;/*&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    Reads encoder via interrupt&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    Use Rotary.h and  Rotary.cpp implementation to process encoder via interrupt&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;rotaryEncoder&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; // rotary encoder events&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; encoderStatus = &lt;SPAN style="color: rgb(211, 84, 0);"&gt;encoder&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;process&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;encoderStatus&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    encoderCount = &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;encoderStatus == DIR_CW&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; ? &lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt; : -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// callbacks&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;my_audio_info&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;Audio::&lt;SPAN style="color: rgb(0, 151, 157);"&gt;msg_t&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;m)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;printf&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;%s: %s\n&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;s&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;// detailed cb output&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;my_audio_info&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;Audio::&lt;SPAN style="color: rgb(0, 151, 157);"&gt;msg_t&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;m)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(114, 142, 0);"&gt;switch&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;e&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;){&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;case&lt;/SPAN&gt; Audio::evt_info:           &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;printf&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;info: ....... %s\n&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;case&lt;/SPAN&gt; Audio::evt_eof:            &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;printf&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;end of file:  %s\n&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;case&lt;/SPAN&gt; Audio::evt_bitrate:        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;printf&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;bitrate: .... %s\n&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; // icy-bitrate or bitrate from metadata&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;case&lt;/SPAN&gt; Audio::evt_icyurl:         &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;printf&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;icy URL: .... %s\n&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;case&lt;/SPAN&gt; Audio::evt_id3data:        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;printf&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;ID3 data: ... %s\n&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; // id3-data or metadata&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;case&lt;/SPAN&gt; Audio::evt_lasthost:       &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;printf&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;last URL: ... %s\n&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;case&lt;/SPAN&gt; Audio::evt_name:           &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;printf&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;station name: %s\n&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller1&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setText&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; // station name or icy-name&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;case&lt;/SPAN&gt; Audio::evt_streamtitle:    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;printf&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;stream title: %s\n&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller2&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setText&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;case&lt;/SPAN&gt; Audio::evt_icylogo:        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;printf&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;icy logo: ... %s\n&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;case&lt;/SPAN&gt; Audio::evt_icydescription: &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;printf&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;icy descr: .. %s\n&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;case&lt;/SPAN&gt; Audio::evt_image: &lt;SPAN style="color: rgb(114, 142, 0);"&gt;for&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; i = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;; i &amp;lt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;vec&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;size&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;; i += &lt;SPAN style="color: rgb(0, 92, 95);"&gt;2&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;){&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;                                        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;printf&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;cover image:  segment %02i, pos %07lu, len %05lu\n&amp;quot;&lt;/SPAN&gt;, i / &lt;SPAN style="color: rgb(0, 92, 95);"&gt;2&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;vec&lt;/SPAN&gt;[i], &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;vec&lt;/SPAN&gt;[i + &lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;]&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; // APIC&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;case&lt;/SPAN&gt; Audio::evt_lyrics:         &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;printf&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;sync lyrics:  %s\n&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;case&lt;/SPAN&gt; Audio::evt_log   :         &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;printf&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;audio_logs:   %s\n&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;default&lt;/SPAN&gt;:                        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;printf&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;message:..... %s\n&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;m&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;msg&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#endif&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;setup&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  Audio::audio_info_callback = my_audio_info;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; // optional&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;rgbLedWrite&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;RGB_BUILTIN, RGB_BRIGHTNESS, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Red&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;pinMode&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;ENCODER_PIN_A, INPUT_PULLUP&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;pinMode&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;ENCODER_PIN_B, INPUT_PULLUP&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;pinMode&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;PUSH_SW, INPUT_PULLUP&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;begin&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;115200&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//  while (!Serial);               // シリアルモニタが開くまで待つ&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;delay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;10&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  //setup I2C&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Wire&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;begin&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;I2C_SDA, I2C_SCL&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  //setup SSD1306&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;!&lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;begin&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS&lt;SPAN style="color: rgb(67, 79, 84);"&gt;))&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(114, 142, 0);"&gt;for&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;;;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;u8g2_for_adafruit_gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;begin&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;display&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;                 // connect u8g2 procedures to Adafruit GFX&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;clearDisplay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;u8g2_for_adafruit_gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setFontDirection&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;            // left to right (this is default)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;u8g2_for_adafruit_gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setForegroundColor&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;WHITE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;      // apply Adafruit GFX color&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;u8g2_for_adafruit_gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setFont&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;u8g2_font_7x13_te&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // icon font&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;u8g2_for_adafruit_gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setFontMode&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;                 // use u8g2 transparent mode (this is default)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;u8g2_for_adafruit_gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setCursor&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;32&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(0, 92, 95);"&gt;16&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;                // start writing at this position&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;u8g2_for_adafruit_gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;F&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot; ESP32-S3&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;))&lt;/SPAN&gt;; &lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//  u8g2_for_adafruit_gfx.setFont(u8g2_font_siji_t_6x10);  // icon font&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//  u8g2_for_adafruit_gfx.setFontMode(1);                 // use u8g2 transparent mode (this is default)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;u8g2_for_adafruit_gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setCursor&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;,&lt;SPAN style="color: rgb(0, 92, 95);"&gt;32&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;                // start writing at this position&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;u8g2_for_adafruit_gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;F&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;  WebRadio V3.0&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;))&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;u8g2_for_adafruit_gfx&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;F&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;    2025/8/29&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;))&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;SSD1306 OK&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;disconnect&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;mode&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;WIFI_STA&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;begin&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;ssid&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;c_str&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(211, 84, 0);"&gt;password&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;c_str&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;())&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;while&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;status&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; != WL_CONNECTED&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;delay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1500&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;WiFi start&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;disconnect&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;mode&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;WIFI_STA&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  /*Type all known SSID and their passwords*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;wifiMulti&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;addAP&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;xxxxxxxx&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;xxxxxxx&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  /*Network 1 we want to connect*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;wifiMulti&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;addAP&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;xxxxxxxx&amp;quot;&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;xxxxxxx&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  /*Network 2 we want to connect*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // WiFi.scanNetworks will give total networks&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; n = &lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;scanNetworks&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  /*Scan for available network*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;scan done&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;  &lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;n == &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;No Available Networks&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  /*Prints if no network found*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt; &lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;else&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;n&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot; Networks found&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  /*Prints if network found*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(114, 142, 0);"&gt;for&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; i = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;; i &amp;lt; n; ++i&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;i + &lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  /*Print the SSID and RSSI of available network*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;: &amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;SSID&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;i&lt;SPAN style="color: rgb(67, 79, 84);"&gt;))&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot; (&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;RSSI&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;i&lt;SPAN style="color: rgb(67, 79, 84);"&gt;))&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;)&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;((&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;encryptionType&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;i&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; == WIFI_AUTH_OPEN&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;?&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot; &amp;quot;&lt;/SPAN&gt;:&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;*&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;delay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;10&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; /*Connects to strongest available defined network with SSID and Password available*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;   &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Connecting to Wifi...&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;wifiMulti&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;run&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; == WL_CONNECTED&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Connected to WIFI Network: &amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;SSID&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;())&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;IP address of Connected Network: &amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;localIP&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;())&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    /*Prints IP address of connected network*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;rgbLedWrite&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;RGB_BUILTIN, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, RGB_BRIGHTNESS, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Green&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;while&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;status&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; != WL_CONNECTED&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;wifiMulti&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;run&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//    delay(1000);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;status&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; == WL_CONNECTED&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Connected to WIFI Network: &amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;SSID&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;())&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;IP address of Connected Network: &amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;localIP&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;())&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    /*Prints IP address of connected network*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;rgbLedWrite&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;RGB_BUILTIN, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, RGB_BRIGHTNESS, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Green&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(114, 142, 0);"&gt;else&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Wi-Fi Nothing!\nRetry!!&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#endif&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#endif&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  //Audio&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;audio&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setPinout&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;I2S_BCLK, I2S_LRC, I2S_DOUT&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;audio&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setVolume&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;12&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; // 0...21&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;rgbLedWrite&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;RGB_BUILTIN, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, RGB_BRIGHTNESS&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Blue&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;audio start&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  //set first station&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;audio&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;connecttohost&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;stations&lt;/SPAN&gt;[cur_station].&lt;SPAN style="color: rgb(211, 84, 0);"&gt;c_str&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;())&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;stations&lt;/SPAN&gt;[cur_station].&lt;SPAN style="color: rgb(211, 84, 0);"&gt;c_str&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;())&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  //display station&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller1&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setText&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;F&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;stations&lt;/SPAN&gt;[cur_station].&lt;SPAN style="color: rgb(211, 84, 0);"&gt;c_str&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()))&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  /* ---------- スクロール設定 ---------- */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setTextSize&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;2&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setTextColor&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;WHITE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setTextWrap&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;false&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Encoder interrupt&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;attachInterrupt&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;digitalPinToInterrupt&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;ENCODER_PIN_A&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;, rotaryEncoder, CHANGE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;attachInterrupt&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;digitalPinToInterrupt&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;ENCODER_PIN_B&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;, rotaryEncoder, CHANGE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;void&lt;/SPAN&gt; &lt;SPAN style="color: rgb(211, 84, 0);"&gt;loop&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(0, 151, 157);"&gt;static&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;long&lt;/SPAN&gt; lastUpdate = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(0, 151, 157);"&gt;const&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint32_t&lt;/SPAN&gt; UPDATE_MS = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;10000&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   //&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;millis&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; - lastUpdate &amp;lt; UPDATE_MS&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    ;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;else&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    lastUpdate = &lt;SPAN style="color: rgb(211, 84, 0);"&gt;millis&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    state = NORMAL;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//    Serial.println(lastUpdate);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  //audio&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;audio&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;loop&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  //display wifi rssi&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;status&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt; != WL_CONNECTED&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;WiFi not connected!&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;drawBitmap&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, antenaNG, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, SSD1306_WHITE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;clearDisplay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;drawBitmap&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, antena, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, SSD1306_WHITE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; rssi = &lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;RSSI&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;rssi &amp;gt; -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;55&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;drawBitmap&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, antena4, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, SSD1306_WHITE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;else&lt;/SPAN&gt; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;rssi &amp;gt; -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;67&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;){&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;drawBitmap&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, antena3, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, SSD1306_WHITE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;else&lt;/SPAN&gt; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;rssi &amp;gt; -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;70&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;){&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;drawBitmap&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, antena2, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, SSD1306_WHITE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;else&lt;/SPAN&gt; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;rssi &amp;gt; -&lt;SPAN style="color: rgb(0, 92, 95);"&gt;80&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;){&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;drawBitmap&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, antena1, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, SSD1306_WHITE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;else&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;drawBitmap&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, antena0, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, SSD1306_WHITE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;drawBitmap&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, wifi_ant, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, SSD1306_WHITE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setTextSize&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setCursor&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;WiFi&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;RSSI&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;())&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;dBm &amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(114, 142, 0);"&gt;#endif&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  //display volume&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setTextSize&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setCursor&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;80&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;audio&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;getVolume&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;())&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  //displsy audio level&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Convert to bar width (0..32)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; barWidth = &lt;SPAN style="color: rgb(211, 84, 0);"&gt;constrain&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;((&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint16_t&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;audio&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;getVUlevel&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;/&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1024&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, SCREEN_WIDTH / &lt;SPAN style="color: rgb(0, 92, 95);"&gt;4&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(0, 151, 157);"&gt;uint8_t&lt;/SPAN&gt; barHeight = SCREEN_HEIGHT / &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt; - &lt;SPAN style="color: rgb(0, 92, 95);"&gt;2&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;      //level meter hight&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;fillRect&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;VUPOS_X, VUPOS_Y, barWidth, barHeight, WHITE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Optional: draw border&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;drawRect&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;VUPOS_X-&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;, VUPOS_Y-&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;32&lt;/SPAN&gt;+&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;, barHeight+&lt;SPAN style="color: rgb(0, 92, 95);"&gt;2&lt;/SPAN&gt;, WHITE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(114, 142, 0);"&gt;switch&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;state&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(114, 142, 0);"&gt;case&lt;/SPAN&gt; NORMAL:&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;      // Check if the encoder has moved.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;encoderCount != &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;encoderCount == &lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(211, 84, 0);"&gt;rgbLedWrite&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;RGB_BUILTIN, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, RGB_BRIGHTNESS, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Green&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Encoder up&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;          cur_station = &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;cur_station == num_elements - &lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; ? &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt; : &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;++cur_station&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(211, 84, 0);"&gt;rgbLedWrite&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;RGB_BUILTIN, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, RGB_BRIGHTNESS, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Green&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Encoder down&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;          cur_station = &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;cur_station == &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; ? &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;num_elements - &lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; : &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;--cur_station&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        encoderCount = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;audio&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;connecttohost&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;stations&lt;/SPAN&gt;[cur_station].&lt;SPAN style="color: rgb(211, 84, 0);"&gt;c_str&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;())&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;stations&lt;/SPAN&gt;[cur_station].&lt;SPAN style="color: rgb(211, 84, 0);"&gt;c_str&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;())&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller1&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setText&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;F&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;stations&lt;/SPAN&gt;[cur_station].&lt;SPAN style="color: rgb(211, 84, 0);"&gt;c_str&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()))&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller2&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setText&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;rgbLedWrite&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;RGB_BUILTIN, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, RGB_BRIGHTNESS&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;  // Blue&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(114, 142, 0);"&gt;else&lt;/SPAN&gt; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;digitalRead&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;PUSH_SW&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; == LOW&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Push&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;vTaskDelay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;500&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        state = VOLUME;&lt;/DIV&gt;&lt;DIV&gt;        lastUpdate = &lt;SPAN style="color: rgb(211, 84, 0);"&gt;millis&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;      //display codec &amp;amp; bitrate&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setTextSize&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setCursor&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;CH:&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;cur_station&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot; &amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;audio&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;getCodecname&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;())&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;:&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;audio&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;getBitRate&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;false&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;))&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;bps&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller1&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;update&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   // 1フレーム分を描画&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;scroller2&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;update&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;   // 1フレーム分を描画&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;      //display station url&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;      &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;    &lt;SPAN style="color: rgb(114, 142, 0);"&gt;case&lt;/SPAN&gt; VOLUME:&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//      Serial.println(&amp;quot;volume&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(0, 151, 157);"&gt;int&lt;/SPAN&gt; vol = &lt;SPAN style="color: rgb(211, 84, 0);"&gt;audio&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;getVolume&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;        //display volume control&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setTextSize&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setCursor&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;32&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;print&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Volume&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;fillRect&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;VOLPOS_X, VOLPOS_Y, vol * &lt;SPAN style="color: rgb(0, 92, 95);"&gt;4&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt;, WHITE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;        // Optional: draw border&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;drawRect&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;VOLPOS_X-&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;, VOLPOS_Y-&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;21&lt;/SPAN&gt; * &lt;SPAN style="color: rgb(0, 92, 95);"&gt;4&lt;/SPAN&gt; + &lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;, &lt;SPAN style="color: rgb(0, 92, 95);"&gt;8&lt;/SPAN&gt; + &lt;SPAN style="color: rgb(0, 92, 95);"&gt;2&lt;/SPAN&gt;, WHITE&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;BR&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;        // Check if the encoder has moved.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;encoderCount != &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;encoderCount == &lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;            &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Encoder up&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;            &lt;SPAN style="color: rgb(211, 84, 0);"&gt;audio&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setVolume&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;((&lt;/SPAN&gt;vol &amp;lt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;21&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; ? ++vol : &lt;SPAN style="color: rgb(0, 92, 95);"&gt;21&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; // 0...21&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(114, 142, 0);"&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;            &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Encoder down&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;            &lt;SPAN style="color: rgb(211, 84, 0);"&gt;audio&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;setVolume&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;((&lt;/SPAN&gt;vol &amp;gt; &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; ? --vol : &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt; // 0...21&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;          lastUpdate = &lt;SPAN style="color: rgb(211, 84, 0);"&gt;millis&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;else&lt;/SPAN&gt; &lt;SPAN style="color: rgb(114, 142, 0);"&gt;if&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(211, 84, 0);"&gt;digitalRead&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;PUSH_SW&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; == LOW&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt; &lt;SPAN style="color: rgb(67, 79, 84);"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(211, 84, 0);"&gt;Serial&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;println&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;&amp;quot;Push&amp;quot;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;          state = NORMAL;&lt;/DIV&gt;&lt;DIV&gt;          &lt;SPAN style="color: rgb(211, 84, 0);"&gt;vTaskDelay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;500&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;    //チャタリング対策&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;        encoderCount = &lt;SPAN style="color: rgb(0, 92, 95);"&gt;0&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;.&lt;SPAN style="color: rgb(211, 84, 0);"&gt;display&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;()&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;        &lt;SPAN style="color: rgb(114, 142, 0);"&gt;break&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//    default:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(149, 165, 166);"&gt;//      break;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;  &lt;SPAN style="color: rgb(211, 84, 0);"&gt;vTaskDelay&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: rgb(0, 92, 95);"&gt;1&lt;/SPAN&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;)&lt;/SPAN&gt;;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="color: rgb(67, 79, 84);"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;
</description>
      <dc:subject>arduino</dc:subject>
    </item>
    <item>
      <title>ESP32-S3 + PCM5102でWeb Radio 情報表示</title>
      <link>https://shirusu.asablo.jp/blog/2025/08/28/9799100</link>
      <guid>https://shirusu.asablo.jp/blog/2025/08/28/9799100</guid>
      <pubDate>Thu, 28 Aug 2025 12:54:56 +0900</pubDate>
      <dcterms:modified>2025-08-28T13:32:06+09:00</dcterms:modified>
      <dcterms:created>2025-08-28T13:14:54+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;局名や流れている曲名を表示できないかと探していたら、ライブラリの出所&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;https://github.com/schreibfaul1/ESP32-audioI2S/blob/master/README.md&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;に、コールバック関数を登録すると、適時得られた情報をとってきてくれる機能がありました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;PRE style="box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin-bottom: 0px; tab-size: 4; overflow-wrap: normal; padding: 16px; overflow: auto; line-height: 1.45; color: rgb(240, 246, 252); background-color: rgb(21, 27, 35); border-radius: 6px; word-break: normal; min-height: 52px;"&gt;Audio::audio_info_callback = my_audio_info; &lt;SPAN class="pl-c" style="box-sizing: border-box; color: rgb(145, 152, 161);"&gt;&lt;SPAN class="pl-c" style="box-sizing: border-box;"&gt;//&lt;/SPAN&gt; optional&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;呼ばれる関数は&lt;BR&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;PRE style="box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; margin-bottom: 0px; tab-size: 4; overflow-wrap: normal; padding: 16px; overflow: auto; line-height: 1.45; color: rgb(240, 246, 252); background-color: rgb(21, 27, 35); border-radius: 6px; word-break: normal; min-height: 52px;"&gt;&lt;SPAN class="pl-c" style="box-sizing: border-box; color: rgb(145, 152, 161);"&gt;&lt;SPAN class="pl-c" style="box-sizing: border-box;"&gt;//&lt;/SPAN&gt; callbacks&lt;/SPAN&gt;&#13;
&lt;SPAN class="pl-k" style="box-sizing: border-box; color: rgb(255, 123, 114);"&gt;void&lt;/SPAN&gt; &lt;SPAN class="pl-en" style="box-sizing: border-box; color: rgb(210, 168, 255);"&gt;my_audio_info&lt;/SPAN&gt;(Audio::&lt;SPAN class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);"&gt;msg_t&lt;/SPAN&gt; m) {&#13;
    Serial.&lt;SPAN class="pl-c1" style="box-sizing: border-box; color: rgb(121, 192, 255);"&gt;printf&lt;/SPAN&gt;(&lt;SPAN class="pl-s" style="box-sizing: border-box; color: rgb(165, 214, 255);"&gt;&lt;SPAN class="pl-pds" style="box-sizing: border-box;"&gt;&amp;quot;&lt;/SPAN&gt;%s: %s&lt;SPAN class="pl-cce" style="box-sizing: border-box;"&gt;\n&lt;/SPAN&gt;&lt;SPAN class="pl-pds" style="box-sizing: border-box;"&gt;&amp;quot;&lt;/SPAN&gt;&lt;/SPAN&gt;, m.&lt;SPAN class="pl-smi" style="box-sizing: border-box;"&gt;s&lt;/SPAN&gt;, m.&lt;SPAN class="pl-smi" style="box-sizing: border-box;"&gt;msg&lt;/SPAN&gt;);&#13;
}&lt;/PRE&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;この中身を変えれば欲しいものがとれそうです。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;下のほうにdetailed cb というのがあるので、これを使うと、シリアルモニタに&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;info: ....... connect to: &amp;quot;stream.laut.fm&amp;quot; on port 80 path &amp;quot;/animefm&amp;quot;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;info: ....... Connection has been established in 329 ms&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;last URL: ... stream.laut.fm/animefm&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;stream.laut.fm/animefm&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;info: ....... redirect to new host &amp;quot;http://animefm.stream.laut.fm/animefm?t302=2025-08-28_04-10-32&amp;amp;uuid=929bcae0-518f-486b-8b6a-bc4eca79ef00&amp;quot;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;info: ....... next URL: &amp;quot;http://animefm.stream.laut.fm/animefm?t302=2025-08-28_04-10-32&amp;amp;uuid=929bcae0-518f-486b-8b6a-bc4eca79ef00&amp;quot;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;station name: Anime FM&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;icy URL: .... http://laut.fm/animefm&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;icy descr: .. Anime Openings, J/K-Pop, JRock...&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;info: ....... icy-genre:  Ending&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;bitrate: .... 128000&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;info: ....... MP3Decoder has been initialized&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;info: ....... stream ready&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;info: ....... syncword found at pos 0&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;info: ....... MPEG-1 Layer III&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;info: ....... Channels: 2&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;info: ....... SampleRate: 44100&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;info: ....... BitsPerSample: 16&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;info: ....... BitRate: 128000&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;info: ....... Stream URL; StreamUrl=&amp;#x27;252593&amp;#x27;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;stream title: Toyasaki Aki, Hisaka Youko, Satou Satomi, Kotobuki Minako - Happy!? Sorry!!&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;と、情報が来るたび表示されます。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;見てると日本語のタイトルも来る場合もあります。&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;日本語表示できるように　U8g2_for_Adafruit_GFX　を組み込んで、アップデートしました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/08/28/712267.jpg" onclick="return asablo.expandimage(this,4000,2250,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/08/28/712267.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/08/28/712266.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;無い漢字が多々あるようです。。。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;スケッチはごちゃごちゃになったので、整理中です。&lt;/DIV&gt;
</description>
      <dc:subject>arduino</dc:subject>
    </item>
    <item>
      <title>ESP32-S3 + PCM5102 でWeb Radio 続き</title>
      <link>https://shirusu.asablo.jp/blog/2025/08/24/9798123</link>
      <guid>https://shirusu.asablo.jp/blog/2025/08/24/9798123</guid>
      <pubDate>Sun, 24 Aug 2025 13:23:44 +0900</pubDate>
      <dcterms:modified>2025-08-24T13:41:53+09:00</dcterms:modified>
      <dcterms:created>2025-08-24T13:41:53+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;SSD1306をつないで、アップデートしました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ネットや&lt;SPAN style="background-color: initial;"&gt; LM Stadio に教えてもらったコードを使いました。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ネットラジオのURLはfoobar2000で検索して、聴けるものを入れてみました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ビットレートが１２８Kを超えると、音が途切れます。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/08/24/7118bf.jpg" onclick="return asablo.expandimage(this,4000,2250,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/08/24/7118bf.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/08/24/7118be.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;●スケッチ&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#include &amp;lt;Wire.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#include &amp;lt;Adafruit_GFX.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#include &amp;lt;Adafruit_SSD1306.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;#include &amp;lt;WiFiMulti.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#include &amp;quot;WiFi.h&amp;quot;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#include &amp;quot;Audio.h&amp;quot;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#include &amp;quot;Rotary.h&amp;quot;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;enum STATE { NORMAL, MENU, VOLUME, FUNCTION };&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;STATE state = NORMAL;  &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;// Enconder PINs&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#define ENCODER_PIN_A 1&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#define ENCODER_PIN_B 2&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#define PUSH_SW      21&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;// The pins for I2C are defined by the Wire-library. &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;const uint8_t I2C_SDA = 18;   // &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;const uint8_t I2C_SCL = 17;   // &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#define SCREEN_WIDTH        (128)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;//#define SCREEN_HEIGHT       (64)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#define SCREEN_HEIGHT       (32)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#define VUPOS_X     (96)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#define VUPOS_Y     (1)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#define VOLPOS_X     (8)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#define VOLPOS_Y     (22)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;// 8×8 のビットマップ（例：アンテナアイコン）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;const uint8_t antena[8] PROGMEM = {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b11111110,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b01010100,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00111000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00010000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00010000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00010000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00010000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;const uint8_t antenaNG[8] PROGMEM = {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b11111110,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b11010110,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00111000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b01010000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00111000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b01010100,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b10010010,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;const uint8_t antena0[8] PROGMEM = {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;const uint8_t antena1[8] PROGMEM = {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b01000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;const uint8_t antena2[8] PROGMEM = {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00010000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00010000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b01010000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;const uint8_t antena3[8] PROGMEM = {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000100,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000100,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00010100,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00010100,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b01010100,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;const uint8_t antena4[8] PROGMEM = {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000001,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000001,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000101,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000101,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00010101,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00010101,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b01010101,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;// 8×8 のビットマップ（例：アンテナアイコン）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;const uint8_t wifi_ant[8] PROGMEM = {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b01111100,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b10000010,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00111000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b01000100,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00010000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00101000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00010000,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  0b00000000&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#define OLED_RESET          (-1)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#define SCREEN_ADDRESS      (0x3C)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &amp;amp;Wire, OLED_RESET);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;// Digital I/O used&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;# define I2S_DOUT      11  // DIN connection&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;# define I2S_BCLK      13  // Bit clock&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;# define I2S_LRC       12  // Left Right Clock&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;Audio audio;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;String ssid =     &amp;quot;xxxxxxxxxxxxxxxx&amp;quot;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;String password = &amp;quot;xxxxxxxxxxxxxxxx&amp;quot;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;String stations[] ={&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;radio-stream.nhk.jp/hls/live/2023229/nhkradiruakr1/master.m3u8&amp;quot;,   //NHK 1&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;radio-stream.nhk.jp/hls/live/2023501/nhkradiruakr2/master.m3u8&amp;quot;,   //NHK 2&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;radio-stream.nhk.jp/hls/live/2023507/nhkradiruakfm/master.m3u8&amp;quot;,   //NHK FM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;stream.laut.fm/animefm&amp;quot;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;cast1.torontocast.com:2120/;.mp3&amp;quot;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;cast1.torontocast.com:2170/;.mp3&amp;quot;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;//        &amp;quot;cast1.torontocast.com/JapanHits&amp;quot;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;cast1.torontocast.com:2120/stream&amp;quot;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;s3.radio.co/sc8d895604/listen&amp;quot;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;kathy.torontocast.com:3060/;?shoutcast&amp;quot;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;vrx.piro.moe:8000/stream-256&amp;quot;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;vocaloid.radioca.st/stream&amp;quot;,                                       //Vocaloid Radio&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;mtist.as.smartstream.ne.jp/30043/livestream/chunklist.m3u8&amp;quot;,       //MWave&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;mtist.as.smartstream.ne.jp/30081/livestream/chunklist.m3u8&amp;quot;,       // &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;ice1.somafm.com/illstreet-128-mp3&amp;quot;,                                // SomaFM / Illinois Street Lounge&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;ais-sa2.cdnstream1.com/b22139_128mp3&amp;quot;,                             // 101 SMOOTH JAZZ&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;relax.stream.publicradio.org/relax.mp3&amp;quot;,                           // Your Classical - Relax&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;ice1.somafm.com/secretagent-128-mp3&amp;quot;,                              // SomaFM / Secret Agent&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;ice1.somafm.com/seventies-128-mp3&amp;quot;,                                // SomaFM / Left Coast 70s&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;ice1.somafm.com/bootliquor-128-mp3&amp;quot;,                               // SomaFM / Boot Liquor&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;shonanbeachfm.out.airtime.pro:8000/shonanbeachfm_a&amp;quot;,               // FM Blue Shonan (FM・ブルー湘南 , JOZZ3AD-FM, 78.5 MHz, Y...&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;0n-80s.radionetz.de:8000/0n-70s.mp3&amp;quot;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;mediaserv30.live-streams.nl:8000/stream&amp;quot;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;mp3.ffh.de/radioffh/hqlivestream.aac&amp;quot;,                             //  128k aac&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;listen.rusongs.ru/ru-mp3-128&amp;quot;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;uint8_t cur_station  = 0;         // current station No.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;uint8_t num_elements = sizeof(stations) / sizeof(stations[0]);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;volatile int encoderCount = 0;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;// Encoder control&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;Rotary encoder = Rotary(ENCODER_PIN_A, ENCODER_PIN_B);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;//Wifi&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;WiFiMulti wifiMulti;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;/*&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    Reads encoder via interrupt&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    Use Rotary.h and  Rotary.cpp implementation to process encoder via interrupt&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;void rotaryEncoder()&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;{ // rotary encoder events&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  uint8_t encoderStatus = encoder.process();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  if (encoderStatus)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    encoderCount = (encoderStatus == DIR_CW) ? 1 : -1;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;//&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;//scroll text&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;//&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;int x, minX;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;void scrollText(String message) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;  minX = -12 * message.length(); //12 = 6 pixels/character * text size 2&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;  display.setTextSize(2);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;  display.setCursor(x,15);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.print(message);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.display();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;//  x = x - 2; // scroll speed&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  x = x - 1; // scroll speed slow&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  if (x &amp;lt; minX) x = display.width();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;void setup() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  rgbLedWrite(RGB_BUILTIN, RGB_BRIGHTNESS, 0, 0);  // Red&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  pinMode(ENCODER_PIN_A, INPUT_PULLUP);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  pinMode(ENCODER_PIN_B, INPUT_PULLUP);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  pinMode(PUSH_SW, INPUT_PULLUP);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  Serial.begin(115200);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;//  while (!Serial);               // シリアルモニタが開くまで待つ&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  delay(10);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  //setup I2C&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  Wire.begin(I2C_SDA, I2C_SCL);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  //setup SSD1306&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    for(;;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.clearDisplay();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;  display.setTextColor(SSD1306_WHITE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.setTextSize(2);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.setCursor(0, 0);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.print(F(&amp;quot; ESP32-S3 &amp;quot;));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.setTextSize(1);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.setCursor(0, 15);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.println(F(&amp;quot;  WebRadio V1.0&amp;quot;));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.print(F(&amp;quot;   2025/8/24&amp;quot;));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.display();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  Serial.println(&amp;quot;SSD1306 OK&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#if 0&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  WiFi.disconnect();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  WiFi.mode(WIFI_STA);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  WiFi.begin(ssid.c_str(), password.c_str());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  while (WiFi.status() != WL_CONNECTED) delay(1500);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  Serial.println(&amp;quot;WiFi start&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  WiFi.disconnect();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  WiFi.mode(WIFI_STA);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  /*Type all known SSID and their passwords*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  wifiMulti.addAP(&amp;quot;xxxxxxxxxxx&amp;quot;, &amp;quot;xxxxxxxxxxxxx&amp;quot;);  /*Network 1 we want to connect*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  wifiMulti.addAP(&amp;quot;xxxxxxxxxxx&amp;quot;,&amp;quot;xxxxxxxxxxxxxx&amp;quot;);  /*Network 2 we want to connect*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  // WiFi.scanNetworks will give total networks&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  int n = WiFi.scanNetworks();  /*Scan for available network*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  Serial.println(&amp;quot;scan done&amp;quot;);  &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  if (n == 0) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      Serial.println(&amp;quot;No Available Networks&amp;quot;);  /*Prints if no network found*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  } &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  else {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    Serial.print(n);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    Serial.println(&amp;quot; Networks found&amp;quot;);  /*Prints if network found*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    for (int i = 0; i &amp;lt; n; ++i) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      Serial.print(i + 1);  /*Print the SSID and RSSI of available network*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      Serial.print(&amp;quot;: &amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      Serial.print(WiFi.SSID(i));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      Serial.print(&amp;quot; (&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      Serial.print(WiFi.RSSI(i));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      Serial.print(&amp;quot;)&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?&amp;quot; &amp;quot;:&amp;quot;*&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      delay(10);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt; /*Connects to strongest available defined network with SSID and Password available*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;   Serial.println(&amp;quot;Connecting to Wifi...&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#if 0&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  if(wifiMulti.run() == WL_CONNECTED) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    Serial.println(&amp;quot;&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    Serial.print(&amp;quot;Connected to WIFI Network: &amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    Serial.println(WiFi.SSID());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    Serial.print(&amp;quot;IP address of Connected Network: &amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    Serial.println(WiFi.localIP());    /*Prints IP address of connected network*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    rgbLedWrite(RGB_BUILTIN, 0, RGB_BRIGHTNESS, 0);  // Green&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  while (WiFi.status() != WL_CONNECTED) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    wifiMulti.run();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;//    delay(1000);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    if (WiFi.status() == WL_CONNECTED) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      Serial.println(&amp;quot;&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      Serial.print(&amp;quot;Connected to WIFI Network: &amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      Serial.println(WiFi.SSID());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      Serial.print(&amp;quot;IP address of Connected Network: &amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      Serial.println(WiFi.localIP());    /*Prints IP address of connected network*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      rgbLedWrite(RGB_BUILTIN, 0, RGB_BRIGHTNESS, 0);  // Green&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    else {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      Serial.println(&amp;quot;Wi-Fi Nothing!\nRetry!!&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#endif&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#endif&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  //Audio&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  audio.setVolume(12); // 0...21&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  rgbLedWrite(RGB_BUILTIN, 0, 0, RGB_BRIGHTNESS);  // Blue&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  Serial.println(&amp;quot;audio start&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  //set first station&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  audio.connecttohost(stations[cur_station].c_str());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  Serial.println(stations[cur_station].c_str());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  //display station&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  /* ---------- スクロール設定 ---------- */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.setTextSize(2);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.setTextColor(WHITE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.setTextWrap(false);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  x = display.width();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  // Encoder interrupt&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  attachInterrupt(digitalPinToInterrupt(ENCODER_PIN_A), rotaryEncoder, CHANGE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  attachInterrupt(digitalPinToInterrupt(ENCODER_PIN_B), rotaryEncoder, CHANGE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;void loop() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  // put your main code here, to run repeatedly:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;//  static int push_key = 0;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#if 1&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  static unsigned long lastUpdate = 0;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  const uint32_t UPDATE_MS = 10000;   //&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  if (millis() - lastUpdate &amp;lt; UPDATE_MS) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    ;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  else {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    lastUpdate = millis();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    state = NORMAL;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;//    Serial.println(lastUpdate);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#endif&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  //audio&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  audio.loop();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  //display wifi rssi&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  if (WiFi.status() != WL_CONNECTED) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    Serial.println(&amp;quot;WiFi not connected!&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    display.drawBitmap(0, 0, antenaNG, 8, 8, SSD1306_WHITE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.clearDisplay();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#if 1&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.drawBitmap(0, 0, antena, 8, 8, SSD1306_WHITE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  int rssi = WiFi.RSSI();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  if (rssi &amp;gt; -55) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    display.drawBitmap(8, 0, antena4, 8, 8, SSD1306_WHITE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  else if (rssi &amp;gt; -67){&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    display.drawBitmap(8, 0, antena3, 8, 8, SSD1306_WHITE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  else if (rssi &amp;gt; -70){&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    display.drawBitmap(8, 0, antena2, 8, 8, SSD1306_WHITE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  else if (rssi &amp;gt; -80){&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    display.drawBitmap(8, 0, antena1, 8, 8, SSD1306_WHITE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  else {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    display.drawBitmap(8, 0, antena0, 8, 8, SSD1306_WHITE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.drawBitmap(0, 0, wifi_ant, 8, 8, SSD1306_WHITE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.setTextSize(1);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.setCursor(8, 0);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.print(WiFi.RSSI());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.print(&amp;quot;dBm &amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#endif&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt; &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  //display volume&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.setTextSize(1);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.setCursor(80, 0);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.print(audio.getVolume());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  //displsy audio level&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  // Convert to bar width (0..32)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  uint8_t barWidth = constrain((uint16_t)(audio.getVUlevel()/1024), 0, SCREEN_WIDTH / 4);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  uint8_t barHeight = SCREEN_HEIGHT / 8;      //level meter hight&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.fillRect(VUPOS_X, VUPOS_Y, barWidth, barHeight, WHITE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  // Optional: draw border&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  display.drawRect(VUPOS_X-1, VUPOS_Y-1, 32+1, barHeight+2, WHITE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  switch (state) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    case NORMAL:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      // Check if the encoder has moved.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      if (encoderCount != 0)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        if (encoderCount == 1)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          rgbLedWrite(RGB_BUILTIN, 0, RGB_BRIGHTNESS, 0);  // Green&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          Serial.println(&amp;quot;Encoder up&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          cur_station = (cur_station == num_elements - 1) ? 0 : (++cur_station);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          rgbLedWrite(RGB_BUILTIN, 0, RGB_BRIGHTNESS, 0);  // Green&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          Serial.println(&amp;quot;Encoder down&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          cur_station = (cur_station == 0) ? (num_elements - 1) : (--cur_station);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        encoderCount = 0;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        audio.connecttohost(stations[cur_station].c_str());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        Serial.println(stations[cur_station].c_str());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        x = display.width();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        rgbLedWrite(RGB_BUILTIN, 0, 0, RGB_BRIGHTNESS);  // Blue&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      else if (digitalRead(PUSH_SW) == LOW) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        Serial.println(&amp;quot;Push&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        vTaskDelay(500);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        state = VOLUME;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        lastUpdate = millis();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      //display codec &amp;amp; bit ratio&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      display.setTextSize(1);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      display.setCursor(0, 8);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      display.print(audio.getCodecname());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      display.print(&amp;quot;:&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      display.print(audio.getBitRate(false));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      display.print(&amp;quot;bps&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      //display station&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      scrollText(F(stations[cur_station].c_str()));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;      break;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;    case VOLUME:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;        int vol = audio.getVolume();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        //display volume control&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        display.setTextSize(1);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        display.setCursor(32, 8);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        display.print(&amp;quot;Volume&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        display.fillRect(VOLPOS_X, VOLPOS_Y, vol * 4, 8, WHITE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        // Optional: draw border&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        display.drawRect(VOLPOS_X-1, VOLPOS_Y-1, 21 * 4 + 1, 8 + 2, WHITE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        // Check if the encoder has moved.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        if (encoderCount != 0)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          if (encoderCount == 1)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;            Serial.println(&amp;quot;Encoder up&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;            audio.setVolume((vol &amp;lt; 21) ? ++vol : 21); // 0...21&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;            Serial.println(&amp;quot;Encoder down&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;            audio.setVolume((vol &amp;gt; 0) ? --vol : 0); // 0...21&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          lastUpdate = millis();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        else if (digitalRead(PUSH_SW) == LOW) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          Serial.println(&amp;quot;Push&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          state = NORMAL;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;          vTaskDelay(500);    //チャタリング対策&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        encoderCount = 0;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        display.display();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        break;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  vTaskDelay(1);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;※適当に作成しているので、間違い、不具合があるかもしれません。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;
</description>
      <dc:subject>arduino</dc:subject>
    </item>
    <item>
      <title>ESP32-S3 + PCM5102 でWeb Radio</title>
      <link>https://shirusu.asablo.jp/blog/2025/08/16/9796434</link>
      <guid>https://shirusu.asablo.jp/blog/2025/08/16/9796434</guid>
      <pubDate>Sat, 16 Aug 2025 15:18:04 +0900</pubDate>
      <dcterms:modified>2025-08-20T16:36:29+09:00</dcterms:modified>
      <dcterms:created>2025-08-16T15:25:56+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;電子部品がアリエクで安いので、いろいろと買ってみました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;で、インターネットラジオを作ってみました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;ESP32-S3-N16R8　\560&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;PCM5102A DAC デコーダ GY-PCM5102 \340&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ESP32-S3-N16R8&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/08/20/71102c.jpg" onclick="return asablo.expandimage(this,4000,2250,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/08/20/71102c.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/08/20/71102b.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;PCM5102A DAC デコーダボードの設定&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;●はんだブリッジ&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;H1L → L&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;H2L&lt;SPAN style="background-color: initial;"&gt; &lt;/SPAN&gt;&lt;SPAN style="background-color: initial;"&gt;→ L&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;H3L&lt;SPAN style="background-color: initial;"&gt; &lt;/SPAN&gt;&lt;SPAN style="background-color: initial;"&gt;→ H&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;H4L&lt;SPAN style="background-color: initial;"&gt; &lt;/SPAN&gt;&lt;SPAN style="background-color: initial;"&gt;→ L&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/08/20/710fa0.jpg" onclick="return asablo.expandimage(this,2041,1223,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/08/20/710fa0.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/08/20/710f9f.jpg" style="width: 300px; height: 179px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;●SCK　はんだブリッジ&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;左上にあるパターン。GNDに落としているのでSCKをGNDにつないでもOK&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/08/20/710f9e.jpg" onclick="return asablo.expandimage(this,1503,914,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/08/20/710f9e.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/08/20/710f9d.jpg" style="width: 300px; height: 182px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;配線（I2S接続）&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;PCM5102&lt;SPAN style="background-color: initial;"&gt;　→　ESP32-S3（基板に書いてある番号）&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;VIN&lt;SPAN style="background-color: initial;"&gt;　→　3.3V&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;GND&lt;/SPAN&gt;&lt;SPAN style="background-color: initial;"&gt;　→　GND&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;LCK&lt;/SPAN&gt;&lt;SPAN style="background-color: initial;"&gt;　→　12&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;DIN&lt;/SPAN&gt;&lt;SPAN style="background-color: initial;"&gt;　→　11&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;BCK&lt;/SPAN&gt;&lt;SPAN style="background-color: initial;"&gt;　→　13&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;SCK&lt;/SPAN&gt;&lt;SPAN style="background-color: initial;"&gt;　→　GND　または、はんだブリッジしていれば　OPEN&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;LCK,DIN,BCK は適当に好きなところにつないだだけで、ほかでもいいのかも。。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;arduino ide の設定&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;最初、ボードの設定を気にせずいたらいろいろとエラーが出ました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;（I2Sの配線の場所が悪いのかと思い、いろいろかえたりしましたが、これが原因ではなくメモリが足りないだけでした。）&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;●フラッシュの容量が足りないエラー　→　フラッシュの容量を増やすには、ツールの　Partition Scheme: を　Huge APP　に&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;●実行すると、シリアルモニタにOOM: failed to allocate xxxxx bytes エラー（バッファーアロケーションメモリ足りない）が出る&lt;SPAN style="background-color: initial;"&gt;　→　&lt;/SPAN&gt;&lt;SPAN style="background-color: initial;"&gt;Tools-&amp;gt;PSRAM-&amp;gt;OPI PSRAM に設定&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/08/18/710b81.jpg" onclick="return asablo.expandimage(this,2706,1585,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/08/18/710b81.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/08/18/710b80.jpg" style="width: 300px; height: 175px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;スケッチ&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ネットにあったものを参考にしました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;SSID &amp;amp; Password　自宅のWifiに&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;とりあえず放送局は、NHK&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ここから&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#include &amp;lt;Wire.h&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#include &amp;quot;WiFi.h&amp;quot;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;#include &amp;quot;Audio.h&amp;quot;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;// PCM5102A&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;# define I2S_DOUT      11  // DIN connection&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;# define I2S_BCLK      13  // Bit clock&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;# define I2S_LRC       12  // Left Right Clock&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;Audio audio;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;//SSID &amp;amp; Password&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;String ssid =     &amp;quot;xxxxxxxx&amp;quot;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;String password = &amp;quot;xxxxxxxx&amp;quot;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;String stations[] ={&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;https://radio-stream.nhk.jp/hls/live/2023229/nhkradiruakr1/master.m3u8&amp;quot;,   //NHK 1&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;https://radio-stream.nhk.jp/hls/live/2023501/nhkradiruakr2/master.m3u8&amp;quot;,   //NHK 2&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;        &amp;quot;https://radio-stream.nhk.jp/hls/live/2023507/nhkradiruakfm/master.m3u8&amp;quot;,   //NHK FM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;uint8_t cur_station  = 0;         // current station No.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;uint8_t num_elements = sizeof(stations) / sizeof(stations[0]);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;void setup() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  //setup serial&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  Serial.begin(115200);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  //setup Wifi&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  WiFi.disconnect();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  WiFi.mode(WIFI_STA);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  WiFi.begin(ssid.c_str(), password.c_str());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  while (WiFi.status() != WL_CONNECTED) delay(1500);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  Serial.println(&amp;quot;WiFi start&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  //setup audio&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  audio.setVolume(12); // 0...21&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  Serial.println(&amp;quot;audio start&amp;quot;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  //set Radio Station&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  audio.connecttohost(stations[cur_station].c_str());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  Serial.println(stations[cur_station].c_str());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;void loop() {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  vTaskDelay(1);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;  audio.loop();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ここまで&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/08/20/710fad.jpg" onclick="return asablo.expandimage(this,4000,2250,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/08/20/710fad.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/08/20/710fac.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;
</description>
      <dc:subject>arduino</dc:subject>
    </item>
    <item>
      <title>GnuRadio</title>
      <link>https://shirusu.asablo.jp/blog/2025/07/20/9790158</link>
      <guid>https://shirusu.asablo.jp/blog/2025/07/20/9790158</guid>
      <pubDate>Sun, 20 Jul 2025 08:06:57 +0900</pubDate>
      <dcterms:modified>2025-07-20T08:47:19+09:00</dcterms:modified>
      <dcterms:created>2025-07-20T08:33:50+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;SDR++でラジオが聴けるようになったので、信号処理のブロックを並べてラジオが作れるというGnuRadioを使ってみました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;GnuRadioのサイト（&lt;A href="https://www.gnuradio.org/" target="_blank" style="background-color: initial;"&gt;GNU Radio&lt;/A&gt;&lt;SPAN style="background-color: initial;"&gt;）ではWindowsは　&lt;/SPAN&gt;&lt;SPAN style="background-color: initial; font-size: 12px;"&gt;Radioconda　をインストールせよとあったので、&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;radioconda-Windows-x86_64.exe　をインストールしました。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/07/20/70bb3f.png" onclick="return asablo.expandimage(this,749,582,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/07/20/70bb3f.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/07/20/70bb3e.png" style="width: 300px; height: 233px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;↑この画面で結構待たされました。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/07/20/70bb40.png" style="width: 300px; height: 233px; border: none;"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/07/20/70bb37.png" onclick="return asablo.expandimage(this,749,582,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/07/20/70bb37.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/07/20/70bb36.png" style="width: 300px; height: 233px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;&lt;DIV class="asahi_editor_line"&gt;Radiocondaを使うと以下のものがインストールされるようです。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;・Digital RF&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;・GNU Radio (including an increasing list of out-of-tree modules)&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;・gqrx&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;・inspectrum&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&#13;
&#13;
&lt;DIV class="asahi_editor_line"&gt;これだけで使えるようになりました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ネットの情報を色々見て作ってみました。ネット情報だと最初のrtl-sdr sourceが、osmosdrを使っていることが多いのですが、最初FedoraでGnuRadioを使って動かしたら、なぜかosmoではエラーになってしまったので、soapysdrを使いました。これをそのままWindowsで動かしました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Windowsではosmosdrも問題ないです。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/07/20/70bb3d.png" onclick="return asablo.expandimage(this,3840,2160,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/07/20/70bb3d.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/07/20/70bb3c.png" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;
</description>
      <dc:subject>ラジオ</dc:subject>
      <dc:subject>ウインドウズ</dc:subject>
    </item>
    <item>
      <title>SDR ラジオ</title>
      <link>https://shirusu.asablo.jp/blog/2025/07/18/9789738</link>
      <guid>https://shirusu.asablo.jp/blog/2025/07/18/9789738</guid>
      <pubDate>Fri, 18 Jul 2025 14:30:43 +0900</pubDate>
      <dcterms:modified>2025-07-19T21:34:18+09:00</dcterms:modified>
      <dcterms:created>2025-07-18T15:04:02+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;以前に仕事でTV信号の復調処理のDSPプログラムをやったことがあって、ソフトウエアラジオに興味を持ちました。でアマゾンで　&lt;SPAN style="background-color: initial;"&gt;Nooelec RTL-SDR v5 SDR - NESDR SMArt　を￥６６９５で買ってみました。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/07/18/70b6a0.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ドライバーのインストールは製品のサイトにある通り行いました。が、説明とちょっと違って、optionでall devideを選択しなくてもNooelec SMArt v5が出てきました。画像はインストール後です。最初は左のDriverが&amp;quot;none&amp;quot;でした。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/07/18/70b6a3.png" onclick="return asablo.expandimage(this,862,381,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/07/18/70b6a3.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/07/18/70b6a2.png" style="width: 300px; height: 132px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;最初デバイスマネージャーは&amp;quot;!&amp;quot;でした。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/07/18/70b6a6.png" onclick="return asablo.expandimage(this,1171,858,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/07/18/70b6a6.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/07/18/70b6a5.png" style="width: 300px; height: 219px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;試しにSDR＋＋を動かしてみました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;サイトからZipファイルをダウンロードして解凍EXEファイルをつつくだけで起動しました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ですが、適当な場所からだと周波数の文字が小さくなってしまったので、サイトにあったマニュアル通りに C:\SDRPPフォルダを作ってすべてのファイルをここに入れました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;FMを聞くには&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;source:RTL-SDR&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;direct sampling:disable&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;あとゲインの設定やら、ラジオにはあまり詳しくないので、適当に画像のような設定でなんとか聞くことができました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/07/18/70b6a8.jpg" onclick="return asablo.expandimage(this,3840,2160,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/07/18/70b6a8.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/07/18/70b6a7.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;パソコンに近いとノイズが乗るようなので、100均で買ったUSB延長ケーブルでつなぎました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;最初問題があるかと思いましたが、今のところ受信状態は良好です。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;アンテナはアリエクスプレスで買ったYouLoopというもののまがい品です。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2025/07/18/70b6d5.jpg" onclick="return asablo.expandimage(this,3840,2160,&amp;#x27;http://shirusu.asablo.jp/blog/img/2025/07/18/70b6d5.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2025/07/18/70b6d4.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;動作環境&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;OS:Windows11&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;パソコン:GMKtec K8 Plus&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;N100搭載のミニPCでも動きましたが、ウインドウを切り替えたりすると音が途切れました。&lt;/DIV&gt;
</description>
      <dc:subject>ラジオ</dc:subject>
      <dc:subject>ウインドウズ</dc:subject>
    </item>
    <item>
      <title>foobar2000 V2 でDSD アップサンプリング （続き）</title>
      <link>https://shirusu.asablo.jp/blog/2023/11/11/9633345</link>
      <guid>https://shirusu.asablo.jp/blog/2023/11/11/9633345</guid>
      <pubDate>Sat, 11 Nov 2023 15:05:33 +0900</pubDate>
      <dcterms:modified>2023-11-17T09:58:01+09:00</dcterms:modified>
      <dcterms:created>2023-11-11T15:20:20+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;PCMからDSDにアップサンプリングする&lt;/SPAN&gt;&lt;SPAN style="background-color: initial;"&gt;DSD Processor がV1.3.0 になっていたので、入れてみたところ、以前とは機能と役割が違うということで、設定の変更が必要でした。Helpにあるcheck for  updated components では更新されなかったので、最近新しいのがあることに気が付きました。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;以前はToolsの中にあったのがDSP ManagerでDSPのカテゴリに入りました。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;ただ問題があります。チリチリとノイズが入ります。私の環境だけかもしれませんが。。あまり使う気がしませんが、良い点も。以前はブラウザ見たりといろいろ操作すると、音が途切れたりしていましたが、このバージョンは大丈夫なようです。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;とりあえず設定。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Tools-&amp;gt;SACD 前と同じにType-&amp;gt;DSD,DSD Processor-&amp;gt;DSD Processor&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/11/12/69d970.png" onclick="return asablo.expandimage(this,1110,798,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/11/12/69d970.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/11/12/69d96f.png" style="width: 300px; height: 215px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;DSP Manager でDSD Processer を　＋。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/11/12/69d978.png" onclick="return asablo.expandimage(this,1110,798,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/11/12/69d978.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/11/12/69d977.png" style="width: 300px; height: 215px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;...を押してOutput-&amp;gt;DSD256,SDM TypeをAに、どれがいいかはわかりませんが、何か設定しないと変換されませんでした。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/11/12/69d97a.png" onclick="return asablo.expandimage(this,904,593,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/11/12/69d97a.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/11/12/69d979.png" style="width: 300px; height: 196px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;変なノイズが直ればいいんですが、他にいろいろ試したいと思っています。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN class="asahi_editor_styling" style="color: rgb(255, 0, 0);"&gt;&lt;SPAN class="asahi_editor_styling" style="font-weight: bold;"&gt;&lt;SPAN class="asahi_editor_styling" style="color: rgb(0, 0, 255);"&gt;追伸：Super Audio CD Decoder 1.5.10 (foo_input_sacd) (2023-11-15)、DSD Processor 1.3.2 (foo_dsd_processor) (2023-11-15)にアップデートしたところ、チリチリノイズはなくなったようです。2023/11/16&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;---------------------------------------------------&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;仕様PC　Spec&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;beelink U59&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;プロセッサ：&lt;/SPAN&gt;&lt;SPAN style="background-color: initial;"&gt;Intel(R) Celeron(R) N5095 @ 2.00GHz   2.00 GHz&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;実装 RAM&lt;/SPAN&gt;&lt;SPAN style="background-color: initial; white-space: pre;"&gt;	&lt;/SPAN&gt;：&lt;SPAN style="background-color: initial;"&gt;16.0 GB&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;OS:Windows 11 Pro 23H2&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="font-size: 12px;"&gt;DAC:SMSL C200&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;---------------------------------------------------&lt;/DIV&gt;&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
</description>
      <dc:subject>オーディオ</dc:subject>
      <dc:subject>foobar2000</dc:subject>
      <dc:subject>ウインドウズ</dc:subject>
    </item>
    <item>
      <title>foobar2000 V2 でDSD native再生</title>
      <link>https://shirusu.asablo.jp/blog/2023/06/18/9595337</link>
      <guid>https://shirusu.asablo.jp/blog/2023/06/18/9595337</guid>
      <pubDate>Sun, 18 Jun 2023 13:39:41 +0900</pubDate>
      <dcterms:modified>2023-11-17T09:57:36+09:00</dcterms:modified>
      <dcterms:created>2023-06-18T14:06:51+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;気になっていたfoobar2000 のバージョン２を試してみました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;今までのバージョンは壊したくなかったので　portable　でインストールしました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;これだと任意の場所にインストールされるので、今までのものに影響しないそうです。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;DSD再生には&lt;SPAN style="background-color: initial;"&gt;以前のバージョン同様の方法でコンポーネントをインストールしました。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;SACDのコンポーネントのバージョンは以前入れたのと同じでした。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;foo_dsd_processor&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;foo_input_sacd&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/06/18/682301.png" onclick="return asablo.expandimage(this,1111,798,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/06/18/682301.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/06/18/682300.png" style="width: 300px; height: 215px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;SACDの項目を以前と同じくDSDに&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/06/18/68230b.png" onclick="return asablo.expandimage(this,1111,798,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/06/18/68230b.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/06/18/68230a.png" style="width: 300px; height: 215px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Outputですが、以前はASIOコンポーネントを入れたのですが、foobar2000 Wiki for japanese user には排他モードを使うことを推奨しているようなので、ASIOコンポーネントを入れずに　exclusive を選びました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ちなみにDACはSMSL C200 で　SMSL USB DAC [exclusive] を選択。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/06/18/682319.png" onclick="return asablo.expandimage(this,1111,798,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/06/18/682319.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/06/18/682318.png" style="width: 300px; height: 215px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;これでDSDファイルが再生しました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;C200はDSD２５６再生で”２５６”と表示されます。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/06/18/68231d.jpg" onclick="return asablo.expandimage(this,4000,2250,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/06/18/68231d.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/06/18/68231c.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;SMSL XMOS DAC Driver のステータス&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/06/18/68231b.png" onclick="return asablo.expandimage(this,661,480,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/06/18/68231b.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/06/18/68231a.png" style="width: 300px; height: 217px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;DSDアップサンプリングも以前の設定でできるようです。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ですが、以前の見た目を変えるスペアナやカバーフロー風なコンポーネントは使えないようです。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;２０２３年６月２０日　追伸&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;64bit用のコンポーネントにいろいろありました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/06/20/68294e.png" onclick="return asablo.expandimage(this,2562,1599,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/06/20/68294e.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/06/20/68294d.png" style="width: 300px; height: 187px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;
</description>
      <dc:subject>オーディオ</dc:subject>
      <dc:subject>foobar2000</dc:subject>
      <dc:subject>ウインドウズ</dc:subject>
    </item>
    <item>
      <title>foobar2000でDSD アップサンプリング</title>
      <link>https://shirusu.asablo.jp/blog/2023/06/08/9592853</link>
      <guid>https://shirusu.asablo.jp/blog/2023/06/08/9592853</guid>
      <pubDate>Thu, 08 Jun 2023 08:45:39 +0900</pubDate>
      <dcterms:modified>2023-11-17T09:56:44+09:00</dcterms:modified>
      <dcterms:created>2023-06-08T09:05:12+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;スマホで音楽聞くときはOnkyo HF Playerを使っていて、DACにつなぐときは、DSDアップサンプリングを使っています。この機能をfoobarでもできないか調べたところ、設定変更でできることがわかりました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;また最近SMSL C200というDACを買ったので、これを使って設定してみました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ドライバは　SMSL IQ の時に入れたものをそのまま使用しました。そもそもC200のWebページからドライバを取ってきました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/06/08/68037e.jpg" onclick="return asablo.expandimage(this,3625,2035,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/06/08/68037e.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/06/08/68037d.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;SMSL　C200　アマゾンでセールの時に\23199で買いました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;DSDアップサンプリングの設定　foobarはまだV2にはしていません。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/06/08/680345.png" onclick="return asablo.expandimage(this,1258,805,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/06/08/680345.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/06/08/680344.png" style="width: 300px; height: 191px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;Preference SACDの設定でDSD Processorの項目をNONEからDSD Processorに変更。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/06/08/680347.png" onclick="return asablo.expandimage(this,1111,798,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/06/08/680347.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/06/08/680346.png" style="width: 300px; height: 215px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Use DSD Processor チェックボックスをチェック。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;変換したい周波数(Input)のOutputの項目を変換したいフォーマットに変更。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;SDM type をA-Dの中から選択。SDMはシグマデルタ変調ですかね？A-Dはフィルタの種類らしいですが、不明なのでAを選んでおきました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/06/08/68037c.png" onclick="return asablo.expandimage(this,1111,798,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/06/08/68037c.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/06/08/68037b.png" style="width: 300px; height: 215px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;とりあえず使いそうなところ変換設定。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;DACによってはサンプリング周波数が切り替わるとミュートがかかって、曲の冒頭が欠けることがありますが、これで全部を統一すれば連続再生時は問題なさそうです。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;DSD512も試しましたがエラーと表示されました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;とりあえず音跡切れもなく使えそうです。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ただC200ではDSDだと停止やポーズ、選曲で一旦周波数が切り替わってしまうので頭が欠けます。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;その周波数で無音を頭に入れれば問題解決できそうですが、そのうち調べようかと。。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;追伸&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;とよく見たら改善しそうなオプションがありました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/06/08/6803d5.png" onclick="return asablo.expandimage(this,1111,798,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/06/08/6803d5.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/06/08/6803d4.png" style="width: 300px; height: 215px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;これにしたら曲飛ばしたときの頭欠けが気にならなくなりましたが、完全ではないです。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;※　音楽ファイルをネットワークストレージに入れていたため、ネットアクセスで音が途切れることがありました。特にDSDファイルは大きいので注意。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;
</description>
      <dc:subject>オーディオ</dc:subject>
      <dc:subject>foobar2000</dc:subject>
      <dc:subject>ウインドウズ</dc:subject>
    </item>
    <item>
      <title>foober2000でDSD native再生</title>
      <link>https://shirusu.asablo.jp/blog/2023/02/27/9565810</link>
      <guid>https://shirusu.asablo.jp/blog/2023/02/27/9565810</guid>
      <pubDate>Mon, 27 Feb 2023 14:56:06 +0900</pubDate>
      <dcterms:modified>2023-11-17T09:55:50+09:00</dcterms:modified>
      <dcterms:created>2023-02-27T15:35:29+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/02/27/66b966.jpg" onclick="return asablo.expandimage(this,4000,2250,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/02/27/66b966.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/02/27/66b965.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;最近家にあるパソコンがどれも10年以上経って、新しいものが欲しいけど、Macは高いのでMiniPCとやらを買ってみました。Beelink U59というCeleronN5095搭載の\25000の安物です。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;今まで使っていたものが相当古いし、ゲームもあまりしないので動作も遅いと感じません。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;省電力で最近買ったモバイルモニター（モバイルと言ってもバッテリーは内臓してないタダのモニターです）ともUSB-Cケーブル一本で繋がるのでとても便利です。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;OSはWindows11 Proが入ってました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;WindowsでもSMSL　IQ　ポータブルDACでDSD再生してみたくなり、トライしてみました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ネットで調べたらfoober2000でできるとあったので早速インストール。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;バージョンは　1.6.16 コンポーネントのインストールが過去のものと変わってたりするので注意。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;1,ASIO supportコンポーネントのインストール&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;http://www.foobar2000.org/components/view/foo_out_asio&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ここから　foo_out_asio.fb2k-component　をGet。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;foober2000を立ち上げてFile-&amp;gt;Preferences&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/02/27/66b937.jpg" onclick="return asablo.expandimage(this,333,485,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/02/27/66b937.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/02/27/66b936.jpg" style="width: 300px; height: 436px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Components-&amp;gt;Install でさっきとってきた&lt;SPAN style="background-color: initial;"&gt;foo_out_asio.fb2k-componentを開いてApply.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;いったん再起動。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/02/27/66b939.jpg" onclick="return asablo.expandimage(this,1112,798,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/02/27/66b939.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/02/27/66b938.jpg" style="width: 300px; height: 215px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;2,Super Audio CD Decoderコンポーネントのインストール&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;http://sourceforge.net/projects/sacddecoder/files/foo_input_sacd/&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ここからfoo_input_sacd-*.*.*.zip をゲットして展開。この時点では1.5.4が最新でした。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;先ほどと同様の手順で foo_input_sacd.fb2k-component と foo_dsd_processor.fb2k-component をインストール。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Components-&amp;gt;SACD でPCMをDSDに変更。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ちなみに、&lt;SPAN style="background-color: initial;"&gt;これをPCMのままDSDファイルを再生するとPCMに変換され再生されます。DSD256ファイルを変換再生してみましたが、パソコンの能力が足りないせいか、バリバリノイズだらけの音でした。DSD64は何とか聞けました。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/02/27/66b952.jpg" onclick="return asablo.expandimage(this,1112,798,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/02/27/66b952.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/02/27/66b951.jpg" style="width: 300px; height: 215px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Output Device は　ASIO:に、ちなみにSMSL IQのドライバはSMSLのサイトからゲットしたXMOSドライバーを入れてあります。この時点では　XMOS_USBAudio_v5.50.0_2022-09-08_setup.exe でした。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/02/27/66b956.jpg" onclick="return asablo.expandimage(this,1112,798,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/02/27/66b956.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/02/27/66b955.jpg" style="width: 300px; height: 215px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;たまにパソコン操作で再生が止まったりします。パソコンがのろいからかも？一応DSD256は再生するようです。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;ASIO dirvers にあるリストの　所望のdriverをダブルクリックするとステータスが見られます。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd4a.jpg" onclick="return asablo.expandimage(this,1112,798,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/03/06/66cd4a.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd49.jpg" style="width: 300px; height: 215px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Cyberdrive ASIO Driver : Cyberdrive Feather DAC&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;UMC ASIO Driver : behringer UMC204HD&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;USB DAC ASIO : SMSL IQ DAC&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;それぞれつつくと固有のステータスが見られます。（機器が接続されている場合）&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;DSD64　の場合　176400Hz&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd26.jpg" onclick="return asablo.expandimage(this,442,319,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/03/06/66cd26.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd25.jpg" style="width: 300px; height: 216px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;DSD128&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd28.jpg" onclick="return asablo.expandimage(this,442,319,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/03/06/66cd28.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd27.jpg" style="width: 300px; height: 216px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;D&lt;SPAN style="background-color: initial;"&gt;SD256&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd2a.jpg" onclick="return asablo.expandimage(this,442,319,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/03/06/66cd2a.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd29.jpg" style="width: 300px; height: 216px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;FLAC 96KHz&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd2c.jpg" onclick="return asablo.expandimage(this,442,319,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/03/06/66cd2c.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd2b.jpg" style="width: 300px; height: 216px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;昔買った　CyberDrive FeatherDAC　もつないでみました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;SMSL と同じ　XMOS使ってるのでドライバー同じのでいいかと思ったら、ダメでした。製品名識別してるんでしょうか。ネットで取ってきてインストールしました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;Driver は　Cyberdrive_DriverSetup_v3.12.0　&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;DSD64&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd4c.jpg" onclick="return asablo.expandimage(this,441,308,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/03/06/66cd4c.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd4b.jpg" style="width: 300px; height: 209px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;DSD128&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd4e.jpg" onclick="return asablo.expandimage(this,441,308,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/03/06/66cd4e.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd4d.jpg" style="width: 300px; height: 209px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;DSD&lt;SPAN style="background-color: initial;"&gt;256 エラーになりました&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd50.jpg" onclick="return asablo.expandimage(this,795,459,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/03/06/66cd50.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/03/06/66cd4f.jpg" style="width: 300px; height: 173px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;foobar200の見た目が悪いのでネットで調べていろいろカスタマイズしました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2023/04/21/675fac.png" onclick="return asablo.expandimage(this,2562,1599,&amp;#x27;http://shirusu.asablo.jp/blog/img/2023/04/21/675fac.png&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2023/04/21/675fab.png" style="width: 300px; height: 187px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;
</description>
      <dc:subject>オーディオ</dc:subject>
      <dc:subject>foobar2000</dc:subject>
      <dc:subject>ウインドウズ</dc:subject>
    </item>
    <item>
      <title>MX-500 マウス 分解掃除</title>
      <link>https://shirusu.asablo.jp/blog/2021/11/23/9442555</link>
      <guid>https://shirusu.asablo.jp/blog/2021/11/23/9442555</guid>
      <pubDate>Tue, 23 Nov 2021 12:22:31 +0900</pubDate>
      <dcterms:modified>2021-12-07T14:03:27+09:00</dcterms:modified>
      <dcterms:created>2021-11-23T12:56:30+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;永年使っているロジクールのMX-500の左ボタンが反応悪くなったので分解してみました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2021/11/23/611437.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;見た目はだいぶ汚いのですが、使い心地がいいので愛用しています。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;最初ラバーがついていたのですが、ベタベタになったので剥がしました。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2021/11/23/61143e.jpg" onclick="return asablo.expandimage(this,4000,2250,&amp;#x27;http://shirusu.asablo.jp/blog/img/2021/11/23/61143e.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2021/11/23/61143d.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;分解するには裏のシールを剥がして、３本のネジを外します。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2021/11/23/611448.jpg" onclick="return asablo.expandimage(this,4000,2250,&amp;#x27;http://shirusu.asablo.jp/blog/img/2021/11/23/611448.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2021/11/23/611447.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;ケースを外す際マウスを上に向けて外したほうがいいです。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;ホイールの部分が固定されていないので、バラバラになる可能性があります。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;自分はバラバラにしてしまって最初の状態がわからなくなり、焦りました。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;とりあえず推測で組み立てて動くことを確認しましたが、これ以降の写真は最初の状態と同じかはわかりません。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2021/11/23/61144c.jpg" onclick="return asablo.expandimage(this,4000,2250,&amp;#x27;http://shirusu.asablo.jp/blog/img/2021/11/23/61144c.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2021/11/23/61144b.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2021/11/23/611453.jpg" onclick="return asablo.expandimage(this,2799,1578,&amp;#x27;http://shirusu.asablo.jp/blog/img/2021/11/23/611453.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2021/11/23/611452.jpg" style="width: 300px; height: 169px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2021/11/23/611455.jpg" onclick="return asablo.expandimage(this,3305,2247,&amp;#x27;http://shirusu.asablo.jp/blog/img/2021/11/23/611455.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2021/11/23/611454.jpg" style="width: 300px; height: 203px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;ホイール部ですが、台座とホイールとホイールにクリック感をだすバネとホイールを押したとき作用するバネがあり、簡単にバラバラになります。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;スイッチは　OMRONの　&lt;/SPAN&gt;&lt;SPAN style="background-color: initial;"&gt;D2FC-F-7N　ネットの記事によると　&lt;/SPAN&gt;&lt;SPAN style="background-color: initial;"&gt;D2F-01F　と互換があるようです。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;ゴミを掃除したら症状は良くなりましたが、機会があったらスイッチ交換しようと思います。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;追伸：2021/12/7&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;チャタリングでダブルクリックしたりドラッグ中SWを離したような状況があるので、やっぱり取り替えました。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;スルーホールを傷めないように、少しずつハンダゴテを当てながら、SWを取りました。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2021/12/07/614418.jpg" onclick="return asablo.expandimage(this,4000,2250,&amp;#x27;http://shirusu.asablo.jp/blog/img/2021/12/07/614418.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2021/12/07/614417.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;秋月電子で１個¥１００。送料¥５００なので他のものと一緒に買いました。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="background-color: initial;"&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2021/12/07/614414.jpg" onclick="return asablo.expandimage(this,4000,2250,&amp;#x27;http://shirusu.asablo.jp/blog/img/2021/12/07/614414.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2021/12/07/614413.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV&gt;&lt;SPAN style="background-color: initial;"&gt;　　　　　　　　　　　　　　　　D2FC-F-7N　　&lt;/SPAN&gt;&lt;SPAN style="background-color: initial;"&gt;D2F-01F&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2021/12/07/61441a.jpg" onclick="return asablo.expandimage(this,3500,1968,&amp;#x27;http://shirusu.asablo.jp/blog/img/2021/12/07/61441a.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2021/12/07/614419.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://shirusu.asablo.jp/blog/img/2021/12/07/614416.jpg" onclick="return asablo.expandimage(this,4000,2250,&amp;#x27;http://shirusu.asablo.jp/blog/img/2021/12/07/614416.jpg&amp;#x27;)"&gt;&lt;IMG src="http://shirusu.asablo.jp/blog/img/2021/12/07/614415.jpg" style="width: 300px; height: 168px; border: none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;SPAN style="background-color: initial;"&gt;D2F-01Fにしたら、クリック音が静かになり押し心地がしっとりしました。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="asahi_editor_line"&gt;予備も買ったので当分の間使えそうです。&lt;/DIV&gt;&lt;/DIV&gt;
</description>
      <dc:subject>Linux</dc:subject>
    </item>
  </channel>
</rss>
