<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Teensy &#8211; Macな暮らし</title>
	<atom:link href="https://polo-web.com/category/teensy/feed/" rel="self" type="application/rss+xml" />
	<link>https://polo-web.com</link>
	<description></description>
	<lastBuildDate>Tue, 09 Jun 2026 22:56:49 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://polo-web.com/wp-content/uploads/2025/03/site-icon-150x150.png</url>
	<title>Teensy &#8211; Macな暮らし</title>
	<link>https://polo-web.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>TeensyをX-Planeで使用するためのインストール項目｜Mac版</title>
		<link>https://polo-web.com/installation-instructions-for-using-teensy-with-x-plane-mac-version/</link>
		
		<dc:creator><![CDATA[polo-web]]></dc:creator>
		<pubDate>Mon, 17 Nov 2025 05:16:18 +0000</pubDate>
				<category><![CDATA[Teensy]]></category>
		<guid isPermaLink="false">https://polo-web.com/?p=17760</guid>

					<description><![CDATA[Teensyを使用するためにに必要な項目  Arduino IDE （プログラミングをするために必要） TeensyControls X-Plane Plu …]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Teensyを使用するためにに必要な項目</p>



<ol class="wp-block-list">
<li> <a href="https://www.arduino.cc/en/software/">Arduino</a> IDE （プログラミングをするために必要）</li>



<li><a href="https://www.pjrc.com/teensy/td_flightsim.html">TeensyControls X-Plane Plugin</a>（X-PlaneとTeensyを繋ぐプラグイン）</li>



<li><a href="https://www.pjrc.com/teensy/teensyduino.html">Teensyduino</a>（TeensyでX-Planeを動かすためのライブラリ等をArduino IDEにインストール）</li>
</ol>



<h2 class="wp-block-heading">① Mac用 &#8211; Arduino IDEのインストール</h2>



<p class="wp-block-paragraph">M1 Macを使用しているので、「macOS Apple Silicon 11 Big Suri以降」を選択。<br>現在「Sequoia 15.7」を使用しているが、これで大丈夫。</p>



<p class="wp-block-paragraph"><strong>Arduino IDE</strong>：<a href="https://www.arduino.cc/en/software">ここからダウンロード</a></p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="571" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-25-1024x571.png" alt="" class="wp-image-17761" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-25-1024x571.png 1024w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-25-300x167.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-25-768x428.png 768w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-25.png 1033w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">② TeensyControls X-Plane Pluginのインストール</h2>



<p class="wp-block-paragraph"><strong>TeensyControls</strong>：<a href="https://www.pjrc.com/teensy/td_flightsim.html">ここからダウンロード</a></p>



<p class="wp-block-paragraph">これはX-PlaneとTeensyを繋ぐプラグインで、X-planeのpluginsフォルダに入れる。<br>上のリンクからアクセスすると下のような画面からダウンロードすることが出来る。<br>殆どの人は64bitを選択することになる。</p>



<p class="wp-block-paragraph">ダウンロードするファイルは：<br><strong>TeensyControls X-Plane Plugin 1.0</strong>（32 &amp; 64 bit, X-Plane 10.20 or greater）<br>以下のところにある。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="926" height="461" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-24.png" alt="" class="wp-image-17762" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-24.png 926w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-24-300x149.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-24-768x382.png 768w" sizes="(max-width: 926px) 100vw, 926px" /></figure>



<p class="wp-block-paragraph">ダウンロードし解凍すると、このフォルダが出来る。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="105" height="111" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-23.png" alt="" class="wp-image-17764"/></figure>



<p class="wp-block-paragraph">これをX-planeのpluginsに入れる。<br>Teensyチップが簡単にX-Planeと通信できるのはこのプラグインのおかげ。<br>Teensyの動作状況をこのプラグインで確認することもできるようになる。</p>



<h2 class="wp-block-heading">Teensyduino、バージョン1.59のインストール</h2>



<p class="wp-block-paragraph"><strong>Teensyduino</strong>：<a href="https://www.pjrc.com/teensy/td_download.html">ここからダウンロード</a></p>



<p class="wp-block-paragraph">Teensyduinoは、Arduinoのソフトウェアアドオン。<br>Teensyを使ってX-Planeを動かすためのライブラリ等をArduino IDEにインストールする。</p>



<h3 class="wp-block-heading">Arduino 2.x.x をインストールした場合は以下のところから</h3>



<p class="wp-block-paragraph">最初のタイトルに「Arduino 2.x.x 」となっているところをスクロースして、一番下に以下のような画面がある。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="658" height="130" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-2.png" alt="" class="wp-image-17794" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-2.png 658w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-2-300x59.png 300w" sizes="auto, (max-width: 658px) 100vw, 658px" /></figure>



<p class="wp-block-paragraph">この「Teensy Loaser」をクリックすると以下の様なページに移動する。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="823" height="282" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-1.png" alt="" class="wp-image-17795" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-1.png 823w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-1-300x103.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-1-768x263.png 768w" sizes="auto, (max-width: 823px) 100vw, 823px" /></figure>



<p class="wp-block-paragraph">上の画像で「Macintosh」クリックすると更にリンクページが開く。<br>ここの「Teensy Loader Disk Image（4.4 megabytes, Mac OS X 10.10 and later）」からダウンロードすることができる。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="572" height="86" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760.png" alt="" class="wp-image-17796" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760.png 572w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-300x45.png 300w" sizes="auto, (max-width: 572px) 100vw, 572px" /></figure>



<p class="wp-block-paragraph">ダウンロードされたファイルはteensy.dmgなのでダブルクリックして開く。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="115" height="111" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-22.png" alt="" class="wp-image-17770"/></figure>



<p class="wp-block-paragraph">以下の様なアプリが開くので、これをわかりやすいところに移動する。どこでも良い。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="120" height="109" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-21.png" alt="" class="wp-image-17771"/></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="257" height="283" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-20.png" alt="" class="wp-image-17772"/></figure>



<p class="wp-block-paragraph">アプリとして開いた状態。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="310" height="270" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-19.png" alt="" class="wp-image-17773" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-19.png 310w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-19-300x261.png 300w" sizes="auto, (max-width: 310px) 100vw, 310px" /></figure>



<p class="wp-block-paragraph">Teensy Loaderは小さなウィンドウとして表示されるはずです。Teensy ボードが LED が点滅している場合、または接続されていない場合は、このウィンドウが表示されます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://www.pjrc.com/teensy/mac_loader_3.png" alt=""/></figure>



<p class="wp-block-paragraph">HalfKayが実行されている場合は、これが表示されるはずです。そうでない場合は、Teensyボードが接続されていることを確認し、プッシュボタンを押してHalfKayを実行してください。Teensy Loaderはすぐにそれを認識します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://www.pjrc.com/teensy/mac_loader_4.png" alt=""/></figure>



<p class="wp-block-paragraph">ファイル名から「HEXファイルを開く」を選択し、このページの上部にあるリンクからダウンロードしたblink_fast.hexを開きます。ツールバーのボタンを使用してファイルを開くか、ウィンドウの上部にドラッグ&amp;ドロップを使用してファイルを開くこともできます。ファイルを開くと、ファイル名とティーンジーのメモリ使用量の割合が表示されます。</p>



<p class="wp-block-paragraph">「オペレーション」メニューから「プログラム」を選択するか、ツールバーの「プログラム」ボタンをクリックします。ダウンロードは非常に高速で、おそらく速すぎて小さな進行状況バーが表示されませんが、「ダウンロード完了」というメッセージが表示されるはずです。</p>



<figure class="wp-block-image"><img decoding="async" src="https://www.pjrc.com/teensy/mac_loader_5.png" alt=""/></figure>



<p class="wp-block-paragraph">「操作」メニューから「再起動」を選択するか、ツールバーの「再起動」ボタンをクリックします。あなたのTeensyボードは、すぐに高速LED点滅プログラムの実行を開始する必要があります！</p>



<figure class="wp-block-image"><img decoding="async" src="https://www.pjrc.com/teensy/mac_loader_6.png" alt=""/></figure>



<p class="wp-block-paragraph">自動モードを試すには、「自動」ボタンをクリックするか、「操作」メニューから「自動モード」を選択します。オートボタンは明るい緑色に点灯します。次に、遅いLED点滅HEXファイルを開きます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://www.pjrc.com/teensy/mac_loader_7.png" alt=""/></figure>



<p class="wp-block-paragraph">Teensyボードのボタンを押すと、自動モードがボードをすばやくプログラムして再起動します。通常、プロジェクトに取り組んでいる間は、Teensy Loaderを自動モードにしておくことができます。Teensy Loaderは常にHEXファイルの最新バージョンを読み取るので、コードをコンパイルし、プッシュボタンを押してコードをプログラムして実行することができます。</p>



<h2 class="wp-block-heading">TeensyでX-Planeを動かすためのライブラリをArduino IDEにインストール</h2>



<p class="wp-block-paragraph">TeensyでX-Planeを動かすためにはライブラリをインストールする必要がある。<br>このライブラリがあって初めてArduino IDEでの、X-PlaneとTeensy用のプラグラミングができる様になる。</p>



<p class="wp-block-paragraph">このライブラリは、Arduino IDEのバージョン2.0.4以降ならすべてがサポートされている。<br>ダウンロードしたArduino IDEは2.3.6なので大丈夫ということになる。<br>Boards Manager の改善により、バージョン 2.3.0 以降が推奨されているとのことでバッチリである。</p>



<h3 class="wp-block-heading"><strong>Step 1: Arduino IDE 2.xにTeensyライブラリをインストールする</strong></h3>



<ul class="wp-block-list">
<li>Arduino IDE を開く。</li>



<li>MacOS の場合： Arduino IDE -> Preferences -> Settings に移動</li>



<li>Windows/Linux の場合：Preferences -> File に移動。</li>



<li>「Additional boards manager URLs」フィールドに、次のリンクを追加する。</li>
</ul>



<p class="has-gray-2-background-color has-background wp-block-paragraph"><a class="ystdb-card__text-link" href="https://www.pjrc.com/teensy/package_teensy_index.json" >https://www.pjrc.com/teensy/package_teensy_index.json</a></p>



<p class="wp-block-paragraph">以下のようになる。<br>このリンクを追加することで初めて、Teensyを認識することができるようになる。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="951" height="593" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-18.png" alt="" class="wp-image-17775" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-18.png 951w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-18-300x187.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-18-768x479.png 768w" sizes="auto, (max-width: 951px) 100vw, 951px" /></figure>



<p class="wp-block-paragraph">Select Boardをクリック。Teensyで検索すると各種のTeensyボードが表示されるので指定のボード（ここではTeensy++ 2.0）を選択してOKをクリック。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="951" height="593" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-17.png" alt="" class="wp-image-17776" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-17.png 951w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-17-300x187.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-17-768x479.png 768w" sizes="auto, (max-width: 951px) 100vw, 951px" /></figure>



<p class="has-ys-green-color has-text-color has-link-color has-x-small-font-size wp-elements-af02a84798e2edcd7f23b3df46ef23b9 wp-block-paragraph">The &#8220;Teensy (for Arduino IDE 2.0.4 or later) [v 1.59.0]&#8221; core has to be installed for the currently selected &#8220;Teensy++ 2.0&#8221; board. Do you want to install it now?</p>



<p class="wp-block-paragraph">右下に警告が出る。<br>現在選択されている「Teensy++ 2.0」ボードには、「Teensy (Arduino IDE 2.0.4以降用) [v 1.59.0]」コアをインストールする必要があります。今すぐインストールしますか？</p>



<p class="wp-block-paragraph">YESをクリック。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="809" height="593" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-16.png" alt="" class="wp-image-17777" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-16.png 809w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-16-300x220.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-16-768x563.png 768w" sizes="auto, (max-width: 809px) 100vw, 809px" /></figure>



<p class="wp-block-paragraph">インストールが始まる。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="809" height="593" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-15.png" alt="" class="wp-image-17778" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-15.png 809w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-15-300x220.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-15-768x563.png 768w" sizes="auto, (max-width: 809px) 100vw, 809px" /></figure>



<p class="has-ys-green-color has-text-color has-link-color has-x-small-font-size wp-elements-ef7ec925f92882a106399d1bbc6e7c28 wp-block-paragraph">Processing Teensy (for Arduino IDE 2.0.4 or later):1.59.0: teensy:teensy-compile@11.3.1</p>



<p class="wp-block-paragraph">無事にインストールが完了すると、また警告が出る。システム設定を開く。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="460" height="177" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-14.png" alt="" class="wp-image-17779" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-14.png 460w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-14-300x115.png 300w" sizes="auto, (max-width: 460px) 100vw, 460px" /></figure>



<p class="wp-block-paragraph">プライバシーとセキュリティで「Aruduino IDE」を許可するためにオンにする。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="715" height="470" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-13.png" alt="" class="wp-image-17780" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-13.png 715w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-13-300x197.png 300w" sizes="auto, (max-width: 715px) 100vw, 715px" /></figure>



<p class="wp-block-paragraph">その後、以下のところでもインストールする必要がある。全ての「Teensyボードをインストールするため？ここでやれば上のTeensy++2.0は不要だったのかもしれない。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="809" height="593" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-12.png" alt="" class="wp-image-17782" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-12.png 809w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-12-300x220.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-12-768x563.png 768w" sizes="auto, (max-width: 809px) 100vw, 809px" /></figure>



<p class="wp-block-paragraph">インストールしようとすると「REMOVE：取り除く」に変わる。<br>つまりこれは既にインストールが済んでいるからかな？従って、ここは何もする必要が無いということ？。<br>もしインストールが済んでいないなら、ここからでもインストールが出来るということらしい。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="821" height="388" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-11.png" alt="" class="wp-image-17783" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-11.png 821w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-11-300x142.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-11-768x363.png 768w" sizes="auto, (max-width: 821px) 100vw, 821px" /></figure>



<h2 class="wp-block-heading">Arduino IDEでのTeensyのテスト</h2>



<p class="wp-block-paragraph"><strong>Step １：例題の読み込み</strong></p>



<ul class="wp-block-list">
<li>Arduino IDEのメニューから、File -> Examples -> 01.Basics -> Blinkに移動。<br>プログラミングされたウィンドウが表示される。</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="730" height="373" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-10.png" alt="" class="wp-image-17785" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-10.png 730w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-10-300x153.png 300w" sizes="auto, (max-width: 730px) 100vw, 730px" /></figure>



<p class="wp-block-paragraph"><strong><strong>Step</strong> ２：<strong>Teensy</strong>へのデータアップロード</strong></p>



<ul class="wp-block-list">
<li>teensy（ここではTeensy++ 2.0）をコンピューターに接続。</li>



<li>Blink Arduino IDEウィンドウで、矢印の「upload」をクリック。</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="827" height="189" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-9.png" alt="" class="wp-image-17786" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-9.png 827w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-9-300x69.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-9-768x176.png 768w" sizes="auto, (max-width: 827px) 100vw, 827px" /></figure>



<p class="wp-block-paragraph"><strong><strong>Step </strong>３：Output（出力</strong>）</p>



<ul class="wp-block-list">
<li>一番下にTeensyへのアップロードウィンドウが表示される、うまくいくとTeensyのLEDが点滅する。</li>



<li>Outputは、arduinoスケッチのメモリ使用量と、エラーが発生した場合にはそれを表示する。<br>赤文字がそのエラーの内容になる。</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="827" height="607" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-8.png" alt="" class="wp-image-17787" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-8.png 827w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-8-300x220.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-8-768x564.png 768w" sizes="auto, (max-width: 827px) 100vw, 827px" /></figure>



<p class="wp-block-paragraph">上のエラーの翻訳。アップロードするポートを指定する必要がある。</p>



<p class="has-ys-green-color has-text-color has-link-color has-x-small-font-size wp-elements-6503b2785c7903a981c4fd5377b858dc wp-block-paragraph">Sketch uses 1990 bytes (1%) of program storage space. Maximum is 130048 bytes.<br>Global variables use 22 bytes (0%) of dynamic memory, leaving 8170 bytes for local variables. Maximum is 8192 bytes.<br>Failed uploading: no upload port provided</p>



<p class="wp-block-paragraph">Sketch はプログラムストレージの 1990 バイト (1%) を使用します。最大は 130048 バイトです。<br>グローバル変数は動的メモリの 22 バイト (0%) を使用し、残りの 8170 バイトはローカル変数に使用できます。最大は 8192 バイトです。<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-ys-red-color">アップロードに失敗しました: アップロードポートが指定されていません。</mark></p>



<p class="has-ys-green-color has-text-color has-link-color has-x-small-font-size wp-elements-7eaab8e470e6d1bc62b37f12cf720bfd wp-block-paragraph">Upload error: Failed uploading: no upload port provided</p>



<p class="wp-block-paragraph">アップロードエラー: アップロードに失敗しました: アップロードポートが指定されていません。</p>



<h2 class="wp-block-heading">ポートの選択</h2>



<p class="wp-block-paragraph">以下のところからポートを選択する必要がある。①をクリックすると展開され、③から新しくポートを選択する場合と、②の様に既にポートが選択されている場合がある。</p>



<p class="wp-block-paragraph">②が表示されていなくて、初めて選択する場合は③をクリック。<br>既に②が表示されている場合はこれをクリックして編集することができる。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="827" height="388" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-7.png" alt="" class="wp-image-17788" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-7.png 827w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-7-300x141.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-7-768x360.png 768w" sizes="auto, (max-width: 827px) 100vw, 827px" /></figure>



<p class="wp-block-paragraph">うまく行った時は以下の様になり、TeensyのオレンジLEDが点滅する。<br>しかし、これも赤文字のエラーが表示されている。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="827" height="607" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-6.png" alt="" class="wp-image-17789" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-6.png 827w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-6-300x220.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-6-768x564.png 768w" sizes="auto, (max-width: 827px) 100vw, 827px" /></figure>



<p class="has-ys-green-color has-text-color has-link-color has-x-small-font-size wp-elements-6b9f0e9fc697e601e0f69ce102bcd41e wp-block-paragraph">Sketch uses 1990 bytes (1%) of program storage space. Maximum is 130048 bytes.<br>Global variables use 22 bytes (0%) of dynamic memory, leaving 8170 bytes for local variables. Maximum is 8192 bytes.<br>Teensy should be selected from &#8220;teensy ports&#8221; rather<br>than &#8220;Serial ports&#8221; in Arduino&#8217;s Tools &gt; Port menu</p>



<p class="wp-block-paragraph">スケッチはプログラム記憶領域の1990バイト（1%）を使用します。最大は130048バイトです。<br>グローバル変数は動的メモリの22バイト（0%）を使用し、残りの8170バイトはローカル変数に使用できます。最大は8192バイトです。<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-ys-red-color">Teensyは、Arduinoの「ツール」>「ポート」メニューの「シリアルポート」ではなく、「teensyポート」から選択する必要があります。</mark></p>



<p class="wp-block-paragraph">ここでも警告が出ている。LEDは問題なく点滅している。</p>



<p class="wp-block-paragraph">上のエラーの解決方法は、以下のところからポートを変更する。<br>Teensy++ 2.0の横に鉛筆アイコンをクリック。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="827" height="294" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-3.png" alt="" class="wp-image-17792" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-3.png 827w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-3-300x107.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-3-768x273.png 768w" sizes="auto, (max-width: 827px) 100vw, 827px" /></figure>



<p class="wp-block-paragraph">確かに「Serial Teensy Ports」がある。このポートを選択。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="827" height="607" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-5.png" alt="" class="wp-image-17790" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-5.png 827w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-5-300x220.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-5-768x564.png 768w" sizes="auto, (max-width: 827px) 100vw, 827px" /></figure>



<p class="wp-block-paragraph">もう一度、実行したら警告なしでうまくいった。赤文字が無いのが成功したことになる。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="827" height="607" src="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-4.png" alt="" class="wp-image-17791" srcset="https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-4.png 827w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-4-300x220.png 300w, https://polo-web.com/wp-content/uploads/2025/11/post-id-17760-4-768x564.png 768w" sizes="auto, (max-width: 827px) 100vw, 827px" /></figure>



<p class="wp-block-paragraph">これで、後はプログラミングをして書き出すだけである。</p>



<p class="wp-block-paragraph">最後にポイントとして、まずTeensyの種類を指定、次にポートを指定する。これで問題なくTeensyボードに作成したプログラミングを出力できることになる。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>X-Plane Teensy&#038;キーボードボタン</title>
		<link>https://polo-web.com/x-plane-teensy-keyboard-buttons/</link>
		
		<dc:creator><![CDATA[polo-web]]></dc:creator>
		<pubDate>Thu, 09 Oct 2025 04:45:35 +0000</pubDate>
				<category><![CDATA[Teensy]]></category>
		<guid isPermaLink="false">https://polo-web.com/?p=16433</guid>

					<description><![CDATA[Teensyでキーボードボタンと同じようにプッシュボタンを使用してX-Planeのスイッチ類をコントロールします。Teensy付属のスケッチを少し変更した分 …]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Teensyでキーボードボタンと同じようにプッシュボタンを使用してX-Planeのスイッチ類をコントロールします。<br>Teensy付属のスケッチを少し変更した分で、実際的なコードになっています。<br>但し、これ一番下の「 } 」が抜けていますので注意。<br></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="581" height="191" src="https://polo-web.com/wp-content/uploads/2025/10/post-id-16433.png" alt="" class="wp-image-16587" srcset="https://polo-web.com/wp-content/uploads/2025/10/post-id-16433.png 581w, https://polo-web.com/wp-content/uploads/2025/10/post-id-16433-300x99.png 300w" sizes="auto, (max-width: 581px) 100vw, 581px" /><figcaption class="wp-element-caption">Teensyではこキーボードボタンでは、残念ながら6つのボタンしか使用できません。</figcaption></figure>
</div>


<p class="has-text-align-left wp-block-paragraph">まず、Arduinoのメニューからツール＞Teensy2.0を指定、ツールメニューのUSB TyoeではKeyboard+Mouse+Joustickを選択して、書き込み。これでUSBキーボードとして認識されます。<br>XPlaneを起動、ジョイスティック&amp;機器からどれか下の左の赤枠のように、ボタンを選択してTeensyの「0」ピンに繋いでだプッシュボタンを押すと「W」となります。<br>これで、TeensyからX-Planeのあらゆるコマンドをボタンでコントロールできるようになります。いいですね〜（笑顔）。<br><br>と、思ったのですが、残念ながらこれ6つしか登録ができないのです。Keyboard.set_key1〜Keyboard.set_key6までで、Keyboard.set_key7になるとスケッチでオレンジから黒に文字が変化して使用できないのがわかります。<br>以上こんな方法もあるということで……（悲）</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="767" height="318" src="https://polo-web.com/wp-content/uploads/2025/10/post-id-16428.png" alt="" class="wp-image-16435" srcset="https://polo-web.com/wp-content/uploads/2025/10/post-id-16428.png 767w, https://polo-web.com/wp-content/uploads/2025/10/post-id-16428-300x124.png 300w" sizes="auto, (max-width: 767px) 100vw, 767px" /></figure>



<p class="wp-block-paragraph"><br>コードは下の赤のところがそれに当たります。<br><br>if (button0.fallingEdge()) {<br>Keyboard.set_key1(<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-ys-red-color">KEY_W</mark>);<br>Keyboard.send_now();<br>}<br><br><br>※他のボタンは以下のとうり<br><br>pin 0 = W<br>pin 1 = A<br>pin 2 = S<br>pin 3 = D<br>pin 4 = space<br>pin 5 = E<br>これ以下は、いくら登録しても実行されません。従って以下のコードではKeyboard.set_key6までしか実行されません。</p>



<p class="wp-block-paragraph"><strong>USB_keyboard.ino</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-ino" data-lang="Arduino"><code>/* Buttons to USB Keyboard Example
 
   You must select Keyboard from the &quot;Tools &gt; USB Type&quot; menu
 
   This example code is in the public domain.
*/
 
 
#include &lt;Bounce.h&gt;
 
// Create Bounce objects for each button.  The Bounce object
// automatically deals with contact chatter or &quot;bounce&quot;, and
// it makes detecting changes very simple.
Bounce button0 = Bounce(0, 10);
Bounce button1 = Bounce(1, 10);  // 10 = 10 ms debounce time
Bounce button2 = Bounce(2, 10);  // which is appropriate for
Bounce button3 = Bounce(3, 10);  // most mechanical pushbuttons
Bounce button4 = Bounce(4, 10);
Bounce button5 = Bounce(5, 10);  // if a button is too &quot;sensitive&quot;
Bounce button6 = Bounce(6, 10);  // to rapid touch, you can
Bounce button7 = Bounce(7, 10);  // increase this time.
Bounce button8 = Bounce(8, 10);
Bounce button9 = Bounce(9, 10);
 
 
void setup() {
  // Configure the pins for input mode with pullup resistors.
  // The pushbuttons connect from each pin to ground.  When
  // the button is pressed, the pin reads LOW because the button
  // shorts it to ground.  When released, the pin reads HIGH
  // because the pullup resistor connects to +5 volts inside
  // the chip.  LOW for &quot;on&quot;, and HIGH for &quot;off&quot; may seem
  // backwards, but using the on-chip pullup resistors is very
  // convenient.  The scheme is called &quot;active low&quot;, and it&#39;s
  // very commonly used in electronics... so much that the chip
  // has built-in pullup resistors!
  pinMode(0, INPUT_PULLUP);
  pinMode(1, INPUT_PULLUP);
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);  // Teensy++ LED, may need 1k resistor pullup
  pinMode(7, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  Mouse.begin();
}
 
void loop() {
  // Update all the buttons.  There should not be any long
  // delays in loop(), so this runs repetitively at a rate
  // faster than the buttons could be pressed and released.
  button0.update();
  button1.update();
  button2.update();
  button3.update();
  button4.update();
  button5.update();
  button6.update();
  button7.update();
  button8.update();
  button9.update();
 
  // Check each button for &quot;falling&quot; edge.
  // Type a message on the Keyboard when each button presses
  // Update the Joystick buttons only upon changes.
  // falling = high (not pressed - voltage from pullup resistor)
  //           to low (pressed - button connects pin to ground)
  if (button0.fallingEdge()) {
    Keyboard.set_key1(KEY_W);
    Keyboard.send_now();
  }
  if (button1.fallingEdge()) {
    Keyboard.set_key2(KEY_A);
    Keyboard.send_now();
  }
  if (button2.fallingEdge()) {
    Keyboard.set_key3(KEY_S);
    Keyboard.send_now();
  }
  if (button3.fallingEdge()) {
    Keyboard.set_key4(KEY_D);
    Keyboard.send_now();
  }
  if (button4.fallingEdge()) {
    Keyboard.set_key5(KEY_SPACE);
    Keyboard.send_now();
  }
  if (button5.fallingEdge()) {
    Keyboard.set_key6(KEY_E);
    Keyboard.send_now();
  }
  //if (button6.fallingEdge()) {
   // Keyboard.set_key(KEY_Q);
  //}
  if (button7.fallingEdge()) {
    Keyboard.set_modifier(MODIFIERKEY_SHIFT);
  }
  if (button8.fallingEdge()) {
    Mouse.set_buttons(1,0,0);
  }
  if (button9.fallingEdge()) {
     Mouse.set_buttons(0,0,1);
  }
 
  // Check each button for &quot;rising&quot; edge
  // Type a message on the Keyboard when each button releases.
  // For many types of projects, you only care when the button
  // is pressed and the release isn&#39;t needed.
  // rising = low (pressed - button connects pin to ground)
  //          to high (not pressed - voltage from pullup resistor)
  if (button0.risingEdge()) {
    Keyboard.set_key1(0);
    Keyboard.send_now();
   
  }
  if (button1.risingEdge()) {
    Keyboard.set_key2(0);
    Keyboard.send_now();
  }
  if (button2.risingEdge()) {
    Keyboard.set_key3(0);
    Keyboard.send_now();
  }
  if (button3.risingEdge()) {
   Keyboard.set_key4(0);
    Keyboard.send_now();
  }
  if (button4.risingEdge()) {
   Keyboard.set_key5(0);
    Keyboard.send_now();
  }
  if (button5.risingEdge()) {
    Keyboard.set_key6(0);
    Keyboard.send_now();
  }
  //if (button6.risingEdge()) {
    //Keyboard.set_key6(0);
  //}
  if (button7.risingEdge()) {
    Keyboard.set_modifier(0);
  }
  if (button8.risingEdge()) {
    Mouse.set_buttons(0,0,0);
  }
  if (button9.risingEdge()) {
    Mouse.set_buttons(0,0,0);
  }
}</code></pre></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>X-Plane Teensy&#038;ジョイスティックボタン</title>
		<link>https://polo-web.com/x-plane-teensy-joystick-buttons/</link>
		
		<dc:creator><![CDATA[polo-web]]></dc:creator>
		<pubDate>Thu, 09 Oct 2025 04:36:10 +0000</pubDate>
				<category><![CDATA[Teensy]]></category>
		<guid isPermaLink="false">https://polo-web.com/?p=16428</guid>

					<description><![CDATA[X-Plane コクピットの自作に挑戦！ Teensyでジョイスティックボタンと同じようにプッシュボタンを代わりに使用してX-Planeのスイッチ類をコント …]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>X-Plane コクピットの自作に挑戦！</strong></p>



<p class="wp-block-paragraph">Teensyでジョイスティックボタンと同じようにプッシュボタンを代わりに使用してX-Planeのスイッチ類をコントロールします。Teensy付属のスケッチを使用しています。Teensyのピンの分だけボタンを作成できます。スイッチはプルダウン回路になります。<br></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="595" height="235" src="https://polo-web.com/wp-content/uploads/2025/10/post-id-16428-3.png" alt="" class="wp-image-16429" srcset="https://polo-web.com/wp-content/uploads/2025/10/post-id-16428-3.png 595w, https://polo-web.com/wp-content/uploads/2025/10/post-id-16428-3-300x118.png 300w" sizes="auto, (max-width: 595px) 100vw, 595px" /><figcaption class="wp-element-caption">この回路図の5個しか使用していますが、Teensy2.0では16個まで使用できます。</figcaption></figure>
</div>


<p class="wp-block-paragraph">まず、Arduinoのメニューからツール＞Teensy2.0を指定、ツールメニューのUSB TyoeではKeyboard+Mouse+Joustickを選択して、書き込み。これでUSBジョイスティックとして認識されます。<br>XPlaneを起動、ジョイスティック&amp;機器の軸タブでは赤枠のように、表示されています。</p>



<figure class="wp-block-image size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2025/10/post-id-16428-2.tif" alt="" class="wp-image-16430"/></figure>



<p class="wp-block-paragraph">Teesyで書き込んだ後、この画面が出ればうまく行っています。<br>しかし、何も表示されないとか、3つだけ表示（他のジョイスティック）とかになります。<br>うまく表示されない場合は、再起動したり何度も、何度もやっていると上の状態になる可能性もあります。<br><br><br></p>



<p class="wp-block-paragraph">ボタン：上級タブでは、作成したプッシュボタンを押すとチェックが入り、X-Planeのコマンドを登録することができます。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="629" height="473" src="https://polo-web.com/wp-content/uploads/2025/10/post-id-16428-1.png" alt="" class="wp-image-16431" srcset="https://polo-web.com/wp-content/uploads/2025/10/post-id-16428-1.png 629w, https://polo-web.com/wp-content/uploads/2025/10/post-id-16428-1-300x226.png 300w" sizes="auto, (max-width: 629px) 100vw, 629px" /></figure>
</div>


<p class="wp-block-paragraph"><br>キーボードボタンを作成するより、こちらの方がまだ沢山の設定ができるので有用ですね。<br>まだ軸の使い方が分かっていません。可変抵抗を接続しているのですが、動作しません。<br><br>Teensy＞USB_Joystick＞Buttonsでも同じようにボタンを使うことができます。コード的にButtonsの方が分かりやすいのですが、コードが長くなるので、実際に使用する分には下のコード「<strong>Complete」</strong>のほうが実用的だと思います。</p>



<p class="wp-block-paragraph"><strong>JoyStickComplete.ino</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-ino" data-lang="Arduino"><code>/* Complete USB Joystick Example
   Teensy becomes a USB joystick with 16 or 32 buttons and 6 axis input
 
   You must select Joystick from the &quot;Tools &gt; USB Type&quot; menu
 
   Pushbuttons should be connected between the digital pins and ground.
   Potentiometers should be connected to analog inputs 0 to 5.
 
   This example code is in the public domain.
*/
 
// Configure the number of buttons.  Be careful not
// to use a pin for both a digital button and analog
// axis.  The pullup resistor will interfere with
// the analog voltage.
const int numButtons = 16;  // 16 for Teensy, 32 for Teensy++
 
void setup() {
  // you can print to the serial monitor while the joystick is active!
  Serial.begin(9600);
  // configure the joystick to manual send mode.  This gives precise
  // control over when the computer receives updates, but it does
  // require you to manually call Joystick.send_now().
  Joystick.useManualSend(true);
  for (int i=0; i&lt;numButtons; i++) {
    pinMode(i, INPUT_PULLUP);
  }
  Serial.println(&quot;Begin Complete Joystick Test&quot;);
}
 
byte allButtons[numButtons];
byte prevButtons[numButtons];
int angle=0;
 
void loop() {
  // read 6 analog inputs and use them for the joystick axis
  Joystick.X(analogRead(0));
  Joystick.Y(analogRead(1));
  Joystick.Z(analogRead(2));
  Joystick.Zrotate(analogRead(3));
  Joystick.sliderLeft(analogRead(4));
  Joystick.sliderRight(analogRead(5));
   
  // read digital pins and use them for the buttons
  for (int i=0; i&lt;numButtons; i++) {
    if (digitalRead(i)) {
      // when a pin reads high, the button is not pressed
      // the pullup resistor creates the &quot;on&quot; signal
      allButtons[i] = 0;
    } else {
      // when a pin reads low, the button is connecting to ground.
      allButtons[i] = 1;
    }
    Joystick.button(i + 1, allButtons[i]);
  }
 
  // make the hat switch automatically move in a circle
  angle = angle + 1;
  if (angle &gt;= 360) angle = 0;
  Joystick.hat(angle);
   
  // Because setup configured the Joystick manual send,
  // the computer does not see any of the changes yet.
  // This send_now() transmits everything all at once.
  Joystick.send_now();
   
  // check to see if any button changed since last time
  boolean anyChange = false;
  for (int i=0; i&lt;numButtons; i++) {
    if (allButtons[i] != prevButtons[i]) anyChange = true;
    prevButtons[i] = allButtons[i];
  }
   
  // if any button changed, print them to the serial monitor
  if (anyChange) {
    Serial.print(&quot;Buttons: &quot;);
    for (int i=0; i&lt;numButtons; i++) {
      Serial.print(allButtons[i], DEC);
    }
    Serial.println();
  }
   
  // a brief delay, so this runs &quot;only&quot; 200 times per second
  delay(5);
}</code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Teensy + X-Plane + Arduinoプログラミング</title>
		<link>https://polo-web.com/teensy-x-plane-arduinoprogramming/</link>
		
		<dc:creator><![CDATA[polo-web]]></dc:creator>
		<pubDate>Sat, 23 Aug 2025 04:44:27 +0000</pubDate>
				<category><![CDATA[Teensy]]></category>
		<guid isPermaLink="false">https://polo-web.com/?p=14946</guid>

					<description><![CDATA[プログラミングの勉強から初め、レイアウト、パーツ集め等、2年位い開発にかかったパネルです。ほぼ完璧に動作します。X-Plane飛行中はモニタの横に置いて、ジ …]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">プログラミングの勉強から初め、レイアウト、パーツ集め等、2年位い開発にかかったパネルです。ほぼ完璧に動作します。X-Plane飛行中はモニタの横に置いて、ジョイスティックとこのパネルだけて快適に飛行することができます。</p>



<p class="wp-block-paragraph">B737-800X_3_36_fullで動作確認している。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/a78b1a7a6d91bdbb16d92c15a568a077-1024x650.jpg" alt="" class="wp-image-2482"/><figcaption class="wp-element-caption">X-Plane B737-800X Zibo 自作パネル</figcaption></figure>



<p class="wp-block-paragraph">様式は少し違っていますが、実際に実行している状態をYouTubeに上げてみました。</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="self made X-Plane11 B737-800 Default autopilot panel" width="800" height="450" src="https://www.youtube.com/embed/pFIp9iQBSno?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div><figcaption class="wp-element-caption">X-Plane B737-800デフォルトのプログラムをインストールして実行した例</figcaption></figure>



<h2 class="wp-block-heading">B737-800X_Zibo_7seg_Panel（１段目）</h2>



<figure class="wp-block-image size-large"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/e405caeda9fa21ed03bedbaa78b3cb5f-1024x158.jpg" alt="" class="wp-image-2507"/><figcaption class="wp-element-caption">パネルの表面</figcaption></figure>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/Teensy3.0.jpg" alt="" class="wp-image-2504"/><figcaption class="wp-element-caption">Teensy3.2 純正と外部電源廻り</figcaption></figure>
</div>


<figure class="wp-block-image size-large"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/04/9fde94dbd754cc0171684c5e7101e9f4-1-755x1024.png" alt="" class="wp-image-2803"/><figcaption class="wp-element-caption">実際の配線図</figcaption></figure>



<p class="wp-block-paragraph"><strong>１段目パネル｜Zibo_DaisyChain_7seg</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-ino" data-lang="Arduino"><code>//4つの8桁LEDディスプレイモジュールMAX7219デジタル制御管を繋いだときのスケッチ
 
#include &quot;LedControl.h&quot;
 
/////////////////////////////////////////////////////////////////////////
/////////// 7セグメント表示 MAX7219経由 //////////////////
/////////////////////////////////////////////////////////////////////////
// ピン14をデータ入力DINに、13をCLKに、11をLOADに、デバイス数は3個
const int lc_DIN_Pin = 21;    //7セグ、teensyピン位置141312
const int lc_CLK_Pin = 23;
const int lc_LOAD_Pin = 22;
LedControl lc = LedControl(lc_DIN_Pin, lc_CLK_Pin, lc_LOAD_Pin, 4); //カスケード接続の場合、最後の数字が接続したモジュールの数。
 
 
 
//==============================================================================================
/////////// COURSE 7セグメント表示 //////////////////
//==============================================================================================
FlightSimFloat Course_Val;  //7セグ用
float Course_FloatValue;
int Course_IntValue;
//==============================================================================================
/////////// IAS/MACH（エアースピード）7セグメント表示 //////////////////
//==============================================================================================
FlightSimInteger AirSpeed_KnotMach_change;    //ノットとマッハの切り替え用
FlightSimInteger Fms_Vnav;
FlightSimInteger AirSpeed_IntVal;          //小数点以下のデータを取得、７セグ用
FlightSimFloat AirSpeed_FloatVal;
FlightSimFloat VNAV_Pos;
float kts_FloatValue;                         //不動小数点の数値を一時格納
int kts_IntValue;                             //不動小数点を整数に変換
float mach_FloatValue;                        //不動小数点の数値を一時格納
int mach_IntValue;                            //不動小数点を整数に変換
//===============================================================================================
/////////// HEADING 7セグメント表示 //////////////////
//===============================================================================================
FlightSimInteger Heading_Val;
//===============================================================================================
/////////// ALTITUDE 7セグメント表示 //////////////////
//===============================================================================================
FlightSimInteger Altitude_Val;
//===============================================================================================
/////////// VERT SPEED 7セグメント表示 //////////////////
//===============================================================================================
FlightSimInteger VertSpeed_Val;
FlightSimInteger VertSpeed_vs_pos;
 
 
 
void setup() {
  pinMode(13, OUTPUT);  //X-Planeの起動の有効・無効用
  pinMode(lc_DIN_Pin, OUTPUT);
  pinMode(lc_CLK_Pin, OUTPUT);
  pinMode(lc_LOAD_Pin, OUTPUT);
 
  // 4つのMAX7219デバイスを初期化する
  for (int k = 0; k &lt; 4; k++) { //4はモジュールの数
    lc.shutdown(k, false); // 表示を有効にする
    //lc.setIntensity(k, 5); // 全てのの明るさ（各7セグの明るさの調整をしないと１つだけしか点灯しない場合がある）
    lc.clearDisplay(k);    // 表示レジスタをクリア
 
    scrollDigits();  //7セグメントテスト用
 
 
    //===============================================================================================
    /////////// setup内 1番 COURSE 7セグメント表示 //////////////////
    //===============================================================================================
    Course_Val = XPlaneRef(&quot;sim/cockpit2/radios/actuators/hsi_obs_deg_mag_pilot&quot;);
    //===============================================================================================
    /////////// setup内 ２番 IAS/MACH（エアースピード）7セグメント表示 //////////////////
    //===============================================================================================
    // loop内で動作設定をしているので、他のように「onChange()」が入っていない。
    AirSpeed_IntVal = XPlaneRef(&quot;laminar/B738/autopilot/mcp_speed_dial_kts_mach&quot;);  //X-Planeから浮動小数点の数値を取得 sim/cockpit/autopilot/airspeed
    AirSpeed_FloatVal = XPlaneRef(&quot;laminar/B738/autopilot/mcp_speed_dial_kts_mach&quot;);  //sim/cockpit/autopilot/airspeed
    AirSpeed_KnotMach_change = XPlaneRef(&quot;sim/cockpit/autopilot/airspeed_is_mach&quot;);
    Fms_Vnav = XPlaneRef(&quot;laminar/B738/autopilot/altitude_mode&quot;);
    VNAV_Pos = XPlaneRef(&quot;laminar/B738/autopilot/vnav_status1&quot;);
    //===============================================================================================
    /////////// setup内 ３番 HEADING 7セグメント表示 /////////////////
    //===============================================================================================
    Heading_Val = XPlaneRef(&quot;laminar/B738/autopilot/mcp_hdg_dial&quot;);
    //===============================================================================================
    /////////// setup内 ４番 ALTTUDE 7セグメント表示 //////////////////
    //===============================================================================================
    Altitude_Val = XPlaneRef(&quot;laminar/B738/autopilot/mcp_alt_dial&quot;);
    //===============================================================================================
    /////////// setup内 ５番 VERT SPEED 7セグメント表示 //////////////////
    //===============================================================================================
    VertSpeed_Val = XPlaneRef(&quot;laminar/B738/autopilot/ap_vvi_pos&quot;);
    VertSpeed_vs_pos = XPlaneRef(&quot;laminar/B738/autopilot/vvi_dial_show&quot;);
 
 
  }
}
 
void loop() {
  FlightSim.update();
 
  if (FlightSim.isEnabled()) {          //X-Planeが完全に起動し、データの出力が有効になったら。
    digitalWrite(13, HIGH);  //tensy1ピン
  } else {
    lc.setScanLimit(0, 5);
    lc.setIntensity(0, 1);
    lc.setDigit(0, 0, 0, false); //5桁目の値を表示
    lc.setDigit(0, 1, 0, false); //5桁目の値を表示
    lc.setDigit(0, 2, 0, false); //5桁目の値を表示
    lc.setDigit(0, 3, 0, false); //5桁目の値を表示
    lc.setDigit(0, 4, 0, false); //5桁目の値を表示
    lc.setDigit(0, 5, 0, false);
    lc.setDigit(0, 6, 0, false);
 
    lc.setScanLimit(1, 5);
    lc.setIntensity(1, 1);
 
    lc.setDigit(1, 0, 0, false); //5桁目の値を表示
    lc.setDigit(1, 1, 0, false); //5桁目の値を表示
    lc.setDigit(1, 2, 0, false); //5桁目の値を表示
    lc.setDigit(1, 3, 0, false); //5桁目の値を表示
    lc.setDigit(1, 4, 0, false); //5桁目の値を表示
    lc.setDigit(1, 5, 0, false);
    lc.setDigit(1, 6, 0, false);
 
    //lc.setScanLimit(2, 5);
    lc.setIntensity(2, 2);
    lc.setDigit(2, 1, 0, false); //5桁目の値を表示
    lc.setDigit(2, 2, 0, false); //5桁目の値を表示
    lc.setDigit(2, 3, 0, false);
 
    lc.setDigit(2, 5, 0, false); //5桁目の値を表示
    lc.setDigit(2, 6, 0, false); //5桁目の値を表示
    lc.setDigit(2, 7, 0, false);
 
    lc.setIntensity(3, 2);
    lc.setDigit(3, 1, 0, false); //5桁目の値を表示
    lc.setDigit(3, 2, 0, false); //5桁目の値を表示
    lc.setDigit(3, 3, 0, false);  
 
    digitalWrite(13, HIGH);
    delay(1000);
    digitalWrite(13, LOW);
    delay(1000);
  }
 
 
 
 
 
  //===============================================================================================
  /////////// loop内 7セグメント COURSE //////////////////
  //===============================================================================================
 
  float Course_FloatValue = Course_Val;        //ここは下のように小数点以上が3桁だからそのまま（107.974960）、下を見ると理解しやすい。
  Course_FloatValue = round(Course_FloatValue);       //ここで先頭から3番目の数値を四捨五入
  Course_IntValue = (int) Course_FloatValue;
 
  int Course_Val_keta1 = Course_IntValue % 10;  //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示
  int Course_Val_keta2 = Course_IntValue / 10 % 10 ;  //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
  int Course_Val_keta3 = Course_IntValue / 100;   //例えば123の数字の場合、123÷100＝1.23で1の整数が3桁目の数字として表示
  lc.setIntensity(3, 5);
  lc.setDigit(3, 1, Course_Val_keta1, false); //1桁目の値を表示、falseはドットを表示しない設定。
  lc.setDigit(3, 2, Course_Val_keta2, false); //2桁目の値を表示
  lc.setDigit(3, 3, Course_Val_keta3, false); //3桁目の値を表示
 
 
 
  //===============================================================================================
  /////////// loop内 7セグメント IAS/MACH（エアースピード） //////////////////
  //===============================================================================================
  if (VNAV_Pos == 0) {  //vnav_posが０なら以下を実行
    //起動したときは0（ノット表示）になっている。
    if (AirSpeed_KnotMach_change == 0) {
      float kts_FloatValue = AirSpeed_FloatVal;        //ここは下のように小数点以上が3桁だからそのまま（107.974960）、下を見ると理解しやすい。
      kts_FloatValue = round(kts_FloatValue);       //ここで先頭から3番目の数値を四捨五入
      kts_IntValue = (int) kts_FloatValue;
 
      //下のコメントアウトは剰余の説明がちょっとおかしいが、これがわかりやすい。
      int AirSpeed_keta1 =  kts_IntValue % 10;       //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示
      int AirSpeed_keta2 = kts_IntValue / 10 % 10 ;  //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
      int AirSpeed_keta3 = kts_IntValue / 100;       //例えば123の数字の場合、123÷100＝1.23で1の整数が3桁目の数字として表示
 
      lc.setDigit(2, 1, AirSpeed_keta1, false);     //1桁目の値を表示
      lc.setDigit(2, 2, AirSpeed_keta2, false);     //2桁目の値を表示
      lc.setDigit(2, 3, AirSpeed_keta3, false);     //3桁目の値を表示
    }
 
    //マッハ表示（000と小数点以下3桁を表示）
    if (AirSpeed_KnotMach_change == 1) {            //1ということはマッハ表示ということである
      //剰余の場合は浮動小数点が使えないので
      float mach_FloatValue = AirSpeed_FloatVal * 1000;     //所得した小数点を整数の位置にもっていく（0.163277を163.277に）
      mach_FloatValue = round(mach_FloatValue);          //ここで先頭から3番目の数値を四捨五入
      mach_IntValue = (int) mach_FloatValue;             //163.277にした分を完全な整数に変換（163にする）
 
      int AirSpeed_keta1 = mach_IntValue / 10 % 10 ;  //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示（何故か1つ少ないので1をプラス）
      int AirSpeed_keta2 = mach_IntValue / 100 ;      //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
 
      lc.setDigit(2, 1, AirSpeed_keta1, false);      //1桁目の値を表示
      lc.setDigit(2, 2, AirSpeed_keta2, false);      //2桁目の値を表示
      lc.setDigit(2, 3, 0, true); //3桁目の値を表示
    }
  }
  if (VNAV_Pos == 1) { 
      lc.setChar(2, 1, &#39; &#39;, false);
      lc.setChar(2, 2, &#39; &#39;, false);
      lc.setChar(2, 3, &#39; &#39;, false);
  }
 
  //===============================================================================================
  /////////// loop内 7セグメント HEADING //////////////////
  //===============================================================================================
  //lc.setScanLimit(2, 7);//2の中で１つだけ設定すればいいのでいらない
  int Heading_Val_keta1 = Heading_Val % 10;  //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示
  int Heading_Val_keta2 = Heading_Val / 10 % 10 ;  //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
  int Heading_Val_keta3 = Heading_Val / 100;   //例えば123の数字の場合、123÷100＝1.23で1の整数が3桁目の数字として表示
  lc.setIntensity(2, 5);
  lc.setDigit(2, 5, Heading_Val_keta1, false); //1桁目の値を表示、falseはドットを表示しない設定。
  lc.setDigit(2, 6, Heading_Val_keta2, false); //2桁目の値を表示
  lc.setDigit(2, 7, Heading_Val_keta3, false); //3桁目の値を表示
 
 
 
  //===============================================================================================
  /////////// loop内 7セグメント ALTITUDE //////////////////
  //===============================================================================================
  //数値の回転制限（数字が止まるところ）はエンコーダ側で行う。但し、こちらで制限することもできるがX-Planeと違った数値になるので注意が必要。
  //表示する桁数を変更する設定
  //プラスの3桁表示用
  if (Altitude_Val &gt;= 0 && Altitude_Val &lt;= 999) {    //もし、999より小さいなら以下を実行
    lc.setScanLimit(1, 2);  // 3桁表示にする。（最初は行数、2番めが桁数、0が1桁、1が2桁…）本当は2だが、0を使っていないので3になっている
    lc.setIntensity(1, 1); // ここだけ明るすぎるので特別に落とした。
    //プラスの値の処理
    //int Altitude_Val_keta1 = Altitude_Val % 10;  //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示
    //int Altitude_Val_keta2 = Altitude_Val / 10 % 10 ;  //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
    int Altitude_Val_keta3 = Altitude_Val / 100 % 10;   //例えば123の数字の場合、123÷100＝1.23で1の整数が3桁目の数字として表示
    //int Altitude_Val_keta4 = Altitude_Val / 1000 % 10;
    lc.setDigit(1, 0, 0, false); //1桁目の値を表示
    lc.setDigit(1, 1, 0, false); //2桁目の値を表示
    lc.setDigit(1, 2, Altitude_Val_keta3, false); //3桁目の値を表示
    //lc4.setDigit(0, 3, Altitude_Val_keta4, false); //4桁目の値を表示
  }
  //プラスの4桁表示用
  else if (Altitude_Val &gt;= 1000 && Altitude_Val &lt;= 9999) {    //もし、999より小さいなら以下を実行
    lc.setScanLimit(1, 3);  // 1000以上、9999以下なら、4桁表示にする
    lc.setIntensity(1, 2);
    //lc4.setIntensity(0, 5); // 15 = brightest
    //プラスの値の処理
    //int Altitude_Val_keta1 = Altitude_Val % 10;  //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示
    //int Altitude_Val_keta2 = Altitude_Val / 10 % 10 ;  //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
    int Altitude_Val_keta3 = Altitude_Val / 100 % 10;   //例えば123の数字の場合、123÷100＝1.23で1の整数が3桁目の数字として表示
    int Altitude_Val_keta4 = Altitude_Val / 1000 % 10;
    lc.setDigit(1, 0, 0, false); //1桁目の値を表示（現在0の数字を表示するようにしている）
    lc.setDigit(1, 1, 0, false); //2桁目の値を表示（現在0の数字を表示するようにしている）
    lc.setDigit(1, 2, Altitude_Val_keta3, false); //3桁目の値を表示
    lc.setDigit(1, 3, Altitude_Val_keta4, false); //4桁目の値を表示
  }
  //プラスの5桁表示用
  else if (Altitude_Val &gt;= 10000 && Altitude_Val &lt;= 100000) {
    lc.setScanLimit(1, 4);  //10000以上、100000以下なら、5桁表示にする
    lc.setIntensity(1, 4);
    //int Altitude_Val_keta1 = Altitude_Val % 10;  //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示
    //int Altitude_Val_keta2 = Altitude_Val / 10 % 10 ;  //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
    int Altitude_Val_keta3 = Altitude_Val / 100 % 10;   //例えば123の数字の場合、123÷100＝1.23で1の整数が3桁目の数字として表示
    int Altitude_Val_keta4 = Altitude_Val / 1000 % 10;
    int Altitude_Val_keta5 = Altitude_Val / 10000 % 10;
    lc.setDigit(1, 0, 0, false); //1桁目の値を表示（現在0の数字を表示するようにしている）
    lc.setDigit(1, 1, 0, false); //2桁目の値を表示（現在0の数字を表示するようにしている）
    lc.setDigit(1, 2, Altitude_Val_keta3, false); //3桁目の値を表示
    lc.setDigit(1, 3, Altitude_Val_keta4, false); //4桁目の値を表示
    lc.setDigit(1, 4, Altitude_Val_keta5, false); //5桁目の値を表示
  }
  else {
    lc.setScanLimit(1, 4);  //そうでないなら、5桁表示にする
  }
 
  //===============================================================================================
  /////////// loop内 7セグメント VERT SPEED //////////////////
  //===============================================================================================
  //表示する桁数を変更する設定
  if (VertSpeed_vs_pos == 0) {        //もし、0と同じなら以下を実行
    lc.setScanLimit(0, 0);      // 1桁表示にする。（最初は行数、2番めが桁数、0が1桁、1が2桁…）
    lc.setChar(0, 0, &#39; &#39;, false); //0になったら数値を表示しないように空白を入れている
  }
  //プラスの値の処理
  else if (VertSpeed_Val == 50 ) {     //もし、999より小さいなら以下を実行
    lc.setIntensity(0, 1);
    lc.setScanLimit(0, 2);                          // 3桁表示にする。（最初は行数、2番めが桁数、0が1桁、1が2桁…）
    int VertSpeed_Val_keta1 = VertSpeed_Val % 10;            //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示
    int VertSpeed_Val_keta2 = VertSpeed_Val / 10 % 10 ;      //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
    //int VertSpeed_Val_keta3 = VertSpeed_Val / 100 % 10;      //例えば123の数字の場合、123÷100＝1.23で1の整数が3桁目の数字として表示
    lc.setDigit(0, 0, VertSpeed_Val_keta1, false);  //1桁目の値を表示
    lc.setDigit(0, 1, VertSpeed_Val_keta2, false);  //2桁目の値を表示
    lc.setChar(0, 2, &#39; &#39;, false);       //3桁目に空白を表示
  }
  //プラスの値の処理
  else if (VertSpeed_Val &gt;= 100 && VertSpeed_Val &lt;= 999) {     //もし、999より小さいなら以下を実行
    //lc.setIntensity(0, 1);
    lc.setScanLimit(0, 2);
    int VertSpeed_Val_keta1 = VertSpeed_Val % 10;            //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示
    int VertSpeed_Val_keta2 = VertSpeed_Val / 10 % 10 ;      //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
    int VertSpeed_Val_keta3 = VertSpeed_Val / 100 % 10;      //例えば123の数字の場合、123÷100＝1.23で1の整数が3桁目の数字として表示                         // 3桁表示にする。（最初は行数、2番めが桁数、0が1桁、1が2桁…）
    lc.setDigit(0, 0, VertSpeed_Val_keta1, false);  //1桁目の値を表示
    lc.setDigit(0, 1, VertSpeed_Val_keta2, false);  //2桁目の値を表示
    lc.setDigit(0, 2, VertSpeed_Val_keta3, false);  //3桁目の値を表示
  }
  else if (VertSpeed_Val &gt;= 1000 && VertSpeed_Val &lt;= 5000) {    //X-Planeで扱えるプラス側は5000まで（エンコーダ側でこれ以上がらないようにストップさせる）
    lc.setIntensity(0, 2);
    lc.setScanLimit(0, 3);
    //プラスの値の処理
    int VertSpeed_Val_keta1 = VertSpeed_Val % 10;  //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示
    int VertSpeed_Val_keta2 = VertSpeed_Val / 10 % 10 ;  //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
    int VertSpeed_Val_keta3 = VertSpeed_Val / 100 % 10;   //例えば123の数字の場合、123÷100＝1.23で1の整数が3桁目の数字として表示
    int VertSpeed_Val_keta4 = VertSpeed_Val / 1000 % 10;
    lc.setDigit(0, 0, VertSpeed_Val_keta1, false); //1桁目の値を表示
    lc.setDigit(0, 1, VertSpeed_Val_keta2, false); //2桁目の値を表示
    lc.setDigit(0, 2, VertSpeed_Val_keta3, false); //3桁目の値を表示
    lc.setDigit(0, 3, VertSpeed_Val_keta4, false); //4桁目の値を表示
  }
 
  //マイナスの数値表示
  else if (VertSpeed_Val &gt;= -50) {   //もし、-999より下で-100より上なら以下を実行
    lc.setIntensity(0, 1);
    int VertSpeed_Val_keta_Minus1 = - VertSpeed_Val % 10;  //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示
    int VertSpeed_Val_keta_Minus2 = - VertSpeed_Val / 10 % 10 ;  //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
    //マイナスの値の処理
    lc.setScanLimit(0, 3);  // 4桁表示にする。（最初は行数、2番めが桁数、0が1桁、1が2桁…）
    lc.setDigit(0, 0, VertSpeed_Val_keta_Minus1, false); //-の1桁目の値を表示
    lc.setDigit(0, 1, VertSpeed_Val_keta_Minus2, false); //-の2桁目の値を表示
    lc.setChar(0, 3, &#39; &#39;, false);       //5桁目に-空白を表示
    lc.setChar(0, 3, &#39;-&#39;, false);       //5桁目に-を表示
  }
 
  //マイナスの数値表示
  else if (VertSpeed_Val &gt;= -999 && VertSpeed_Val &lt;= -100) {   //もし、-999より下で-100より上なら以下を実行
    lc.setIntensity(0, 1);
    int VertSpeed_Val_keta_Minus1 = - VertSpeed_Val % 10;  //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示
    int VertSpeed_Val_keta_Minus2 = - VertSpeed_Val / 10 % 10 ;  //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
    int VertSpeed_Val_keta_Minus3 = - VertSpeed_Val / 100 % 10;   //例えば123の数字の場合、123÷100＝1.23で1の整数が3桁目の数字として表示
    //マイナスの値の処理
    lc.setScanLimit(0, 3);  // 4桁表示にする。（最初は行数、2番めが桁数、0が1桁、1が2桁…）
    lc.setDigit(0, 0, VertSpeed_Val_keta_Minus1, false); //-の1桁目の値を表示
    lc.setDigit(0, 1, VertSpeed_Val_keta_Minus2, false); //-の2桁目の値を表示
    lc.setDigit(0, 2, VertSpeed_Val_keta_Minus3, false); //-の3桁目の値を表示
    lc.setChar(0, 3, &#39;-&#39;, false);       //5桁目に-を表示
 
  }
  else if (VertSpeed_Val &gt;= -5000 && VertSpeed_Val &lt;= -1000) {    //X-Planeで扱えるプラス側は-5000まで（エンコーダ側でこれ以上がらないようにストップさせる）
    int VertSpeed_Val_keta_Minus1 = - VertSpeed_Val % 10;  //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示
    int VertSpeed_Val_keta_Minus2 = - VertSpeed_Val / 10 % 10 ;  //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
    int VertSpeed_Val_keta_Minus3 = - VertSpeed_Val / 100 % 10;   //例えば123の数字の場合、123÷100＝1.23で1の整数が3桁目の数字として表示
    int VertSpeed_Val_keta_Minus4 = - VertSpeed_Val / 1000 % 10;
    //マイナスの値の処理
    lc.setScanLimit(0, 4);  // 4桁表示にする。（最初は行数、2番めが桁数、0が1桁、1が2桁…）
    lc.setDigit(0, 0, VertSpeed_Val_keta_Minus1, false); //-の1桁目の値を表示
    lc.setDigit(0, 1, VertSpeed_Val_keta_Minus2, false); //-の2桁目の値を表示
    lc.setDigit(0, 2, VertSpeed_Val_keta_Minus3, false); //-の3桁目の値を表示
    lc.setDigit(0, 3, VertSpeed_Val_keta_Minus4, false); //-の4桁目の値を表示
    lc.setChar(0, 4, &#39;-&#39;, false);       //5桁目に-を表示
  }
  else {
    lc.setScanLimit(0, 2);  //そうでないなら、3桁表示にする
  }
 
}
//loop End
 
 
//7セグメント起動テスト用
void scrollDigits() {
  //7から0までの数字
  for (int a = 0; a &lt; 8; a++) //0~7を順番に読み込む
  {
    lc.setDigit(0, a, a, false); //aの数の桁を読み込み、aの数を表示
    lc.setDigit(1, a, a, false);
    lc.setDigit(2, a, a, false);
    lc.setDigit(3, a, a, false);
    delay(100);  //順番にこの時間間隔で7〜0を表示
  }
  //delay(1000);
 
  //すべてのセグメントに8番を表示
  for (int a = 0; a &lt; 8; a++)
  {
    lc.setDigit(0, a, 8, false);
    lc.setDigit(1, a, 8, false);
    lc.setDigit(2, a, 8, false);
    lc.setDigit(3, a, 8, false);
    delay(100);  //順番にこの時間間隔で8を表示
  }
  //delay(1000);
 
  //明るさを段々暗くする
  for (int a = 8; a &gt;= 0; a--)
  {
    lc.setIntensity(0, a);
    lc.setIntensity(1, a);
    lc.setIntensity(2, a);
    lc.setIntensity(3, a);
    delay(200);  //順番にこの時間間隔で7〜0を表
  }
}</code></pre></div>



<h2 class="wp-block-heading">B737-800X_Zibo_Autopilot_Panel（２段目）</h2>



<figure class="wp-block-image size-large"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/371c8a24f4404085d22bed3fa615cb00-1024x322.jpg" alt="" class="wp-image-2502"/><figcaption class="wp-element-caption">表面</figcaption></figure>



<figure class="wp-block-image size-large"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/main-panel-1024x440.jpg" alt="" class="wp-image-2495"/><figcaption class="wp-element-caption">パネルの裏面から見たところ</figcaption></figure>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/a74b8fc8812e369aa93dca29f3b06cde-3.jpg" alt="" class="wp-image-2499"/><figcaption class="wp-element-caption">中国製の偽物Almencla Teensy++2.0 これはMacでも書き込める</figcaption></figure>
</div>


<p class="wp-block-paragraph"><strong>２段目パネル｜B737-800X_Zibo_Autopilot_Project</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>//B737-800X_3_36_full 専用
  //2018年5月24日 作製開始
  //daataref は void setup() に記述されている。
 
  /* Teensy2.0使用ピン番号------------------
   * 0：F/D プッシュスイッチ（コマンド）
   * 1：A/T ARM プッシュスイッチ（コマンド）
   * 2：N1 プッシュスイッチ（コマンド）
   * 3：SPEED プッシュスイッチ（コマンド）
   * 4：VNAV プッシュスイッチ（コマンド）
   * 5：LVL CHG プッシュスイッチ（コマンド）
   * 6：SPD INTV プッシュスイッチ（コマンド）。このピンは、Temmsy++2.0のLED表示ピン　、動作がおかしい場合、プルアップ抵抗を入れること。
   * 7：COURSE エンコーダ（FlightSimInteger）
   * 8：COURSE エンコーダ（FlightSimInteger）
   * 9：AirSeed エンコーダ（FlightSimInteger）
   * 10：AirSeed エンコーダ（FlightSimInteger）
   * 11：HDG SEL プッシュスイッチ（コマンド）
   * 12：LNAV プッシュスイッチ（コマンド）
   * 13：VCR LOC プッシュスイッチ（コマンド）
   * 14：APP プッシュスイッチ（コマンド）
   * 15：BANK ANGLE 5モード切り替え スイッチ（up用）
   * 16：HEADING エンコーダ（FlightSimInteger）
   * 17：HEADING エンコーダ（FlightSimInteger）
   * 18：ALT HOLD プッシュスイッチ（コマンド）
   * 19：V/S プッシュスイッチ（コマンド）
   * 20：A/P ENGAGE CMD プッシュスイッチ（コマンド）
   * 21：DISENGAGE プッシュスイッチ（コマンド）
   * 22：
   * 23：
   * 24：VERT SPEED エンコーダ（FlightSimInteger）
   * 25：VERT SPEED エンコーダ（FlightSimInteger）
   * 26：C/O プッシュスイッチ（コマンド）
   * 27：BANK ANGLE 5モード切り替え スイッチ（down用）
   * 28：ALT INTV プッシュスイッチ（コマンド）
   * 29：ALTITUDE エンコーダ（FlightSimInteger）
   * 30：ALTITUDE エンコーダ（FlightSimInteger）
   * 31：
   * 32：
   * 33：
   * 34：
   * 35：ledPin X-Planeとの接続を確認するLED
   * 36：
   * 37：
   * 38：
   * 39：
   * 40：
   * 41：
   * 42：、
   * 43：74HC595（LED表示）シフトレジスタ、data
   * 44：74HC595（LED表示）シフトレジスタ、lach
   * 45：74HC595（LED表示）シフトレジスタ、clock
   */
 
  #include 
  #include 
  #include 
  #include 
  #undef round   //なくても動作する
  
  const int ledPin = 35;
  
  /////////////////////////////////////////////////////////////////////////
  // 74HC595（LED表示）シフトレジスタ 共通スクリプト //
  /////////////////////////////////////////////////////////////////////////
  int SER_dataPin = 43;   //pin 14（DS-data） on the 75HC595
  int RCLK_latchPin = 44;  //pin 12（ST_CP-latch） on the 75HC595
  int SRCLK_clockPin = 45; //pin 11（SH_CP-clock） on the 75HC595
 
  #define number_of_74hc595s 3    //シフトレジスタ74HC595の数
  #define numOfRegisterPins number_of_74hc595s * 8    //ここは変更しないこと
  boolean registers[numOfRegisterPins];  //上のレジスタの数を反映させる共通スクリプト
  
  void clearRegisters(){
    for(int i = numOfRegisterPins - 1; i &gt;=  0; i--){
       registers[i] = LOW;  //最初にLEDを全消灯（LOW）、LED点灯確認はHIGHにするとわかる（X-Planeは起動しないこと）
                           //確認の為にスタート時にLEDをON,完全にX-Planeが起動したらOFFになる。
    }
  }
 
  void writeRegisters(){
    digitalWrite(RCLK_latchPin, LOW);
    for(int i = numOfRegisterPins - 1; i &gt;=  0; i--){
      digitalWrite(SRCLK_clockPin, LOW);
      int val = registers[i];
      digitalWrite(SER_dataPin, val);
      digitalWrite(SRCLK_clockPin, HIGH);
    }
    digitalWrite(RCLK_latchPin, HIGH);
  }
  // 個々のピンをHIGかLOWに設定する
  void setRegisterPin(int index, int value){  //indexでピン位置、valueでLOWかHIGH
    registers[index] = value;
  }
  // 74HC595（LED表示）シフトレジスタ共通ここまで ///////////////////////////////
  
  elapsedMillis inactivityTimeout;// 無活動タイムアウト
  
  
  
  
  /////////////////////////////////////////////////////////////////////////
  /////////// スイッチ Teensy++2.0 直結ピン //////////////////
  /////////////////////////////////////////////////////////////////////////
  //===============================================================================================
  /////////// 0番 F/D プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  const int FDSwPin = 0;                    //teensy 0ピン
  Bounce FDSwitch = Bounce (FDSwPin, 100);    //チャタリング除去のためここだけ数値を上げている
  FlightSimCommand FD_Sw;
  //===============================================================================================
  /////////// １番 A/T ARM プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  const int ATarmSwPin = 1;                  //teensy 1ピン
  Bounce ATarmSwitch = Bounce(ATarmSwPin, 5);
  FlightSimCommand AutoThrottleARM_Sw;
  //===============================================================================================
  /////////// 2番 N1 プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  const int N1SwPin = 2;                     //teensy 2ピン
  Bounce N1Switch = Bounce(N1SwPin, 5);        
  FlightSimCommand N1_Sw;
  //===============================================================================================
  /////////// 3番 SPEED プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  const int SPEEDSwPin = 3;                     //teensy 3ピン
  Bounce SPEEDSwitch = Bounce(SPEEDSwPin, 5);        
  FlightSimCommand SPEED_Sw;
  //===============================================================================================
  /////////// 4番 VNAV プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  const int VNAVSwPin = 4;                     //teensy 4ピン
  Bounce VNAVSwitch = Bounce(VNAVSwPin, 5);        
  FlightSimCommand VNAV_Sw;
  //===============================================================================================
  /////////// 5番 LVL CHG プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  const int LVL_CHGSwPin = 5;                     //teensy 5ピン
  Bounce LVL_CHGSwitch = Bounce(LVL_CHGSwPin, 5);        
  FlightSimCommand LVL_CHG_Sw;
  //===============================================================================================
  /////////// 26番 C/O プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  //6番ピン（Teensy++2.0 LED点滅用）の動作がおかしいので26ピンに変更した。
  const int COSwPin = 26;                     //teensy 14ピン
  Bounce COSwitch = Bounce(COSwPin, 5);        
  FlightSimCommand CO_Sw;
  //===============================================================================================
  /////////// 26番 SPD INTV プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  //6番ピン（LED点滅）の動作がおかしいので26ピンに変更した。
  const int SPD_INTVSwPin = 6;                     //teensy 14ピン
  Bounce SPD_INTVSwitch = Bounce(SPD_INTVSwPin, 5);        
  FlightSimCommand SPD_INTV_Sw;
  //===============================================================================================
  /////////// 11番 HDG SEL プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  const int HDG_SELSwPin = 11;                     //teensy 6ピン
  Bounce HDG_SELSwitch = Bounce(HDG_SELSwPin, 5);        
  FlightSimCommand HDG_SEL_Sw;
  //===============================================================================================
  /////////// 12番 LNAV プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  const int LNAVSwPin = 12;                     //teensy 7ピン
  Bounce LNAVSwitch = Bounce(LNAVSwPin, 5);        
  FlightSimCommand LNAV_Sw;
  //===============================================================================================
  /////////// 13番 VOR LOC プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  const int VOR_LOCSwPin = 13;                     //teensy 8ピン
  Bounce VOR_LOCSwitch = Bounce(VOR_LOCSwPin, 5);        
  FlightSimCommand VOR_LOC_Sw;
  //===============================================================================================
  /////////// 14番 APP プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  const int APPSwPin = 14;                     //teensy 9ピン
  Bounce APPSwitch = Bounce(APPSwPin, 5);        
  FlightSimCommand APP_Sw;
  //===============================================================================================
  /////////// 15、27番 BANK ANGLE 5モード切り替え スイッチ（コマンド）//////////////////
  //===============================================================================================
  int BankAngle_up_SwPin = 15;
  Bounce BankAngle_up_SwitchPin = Bounce (BankAngle_up_SwPin, 5);
  FlightSimCommand BankAngle_up;
  
  int BankAngle_dn_SwPin = 27;
  Bounce BankAngle_dn_SwitchPin = Bounce (BankAngle_dn_SwPin, 5);
  FlightSimCommand BankAngle_dn;
  //===============================================================================================
  /////////// 18番 ALT HOLD プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  const int ALT_HOLDSwPin = 18;                     //teensy 10ピン
  Bounce ALT_HOLDSwitch = Bounce(ALT_HOLDSwPin, 5);        
  FlightSimCommand ALT_HOLD_Sw;
  //===============================================================================================
  /////////// 19番 V/S プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  const int VSSwPin = 19;                     //teensy 11ピン
  Bounce VSSwitch = Bounce(VSSwPin, 5);        
  FlightSimCommand VS_Sw;
  //===============================================================================================
  /////////// 20番 A/P ENGAGE CMD プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  const int AP_ENGAGE_CMDSwPin = 20;                     //teensy 12ピン
  Bounce AP_ENGAGE_CMDSwitch = Bounce(AP_ENGAGE_CMDSwPin, 5);        
  FlightSimCommand AP_ENGAGE_CMD_Sw;
  //===============================================================================================
  /////////// 21番 DISENGAGE プッシュスイッチ（コマンド）//////////////////
  //===============================================================================================
  const int DISENGAGESwPin = 21;                     //teensy 13ピン
  Bounce DISENGAGESwitch = Bounce(DISENGAGESwPin, 5);        
  FlightSimCommand DISENGAGE_Sw;
  //===============================================================================================
  /////////// 26番 ALT INTV プッシュスイッチ //////////////////
  //===============================================================================================
  //6番ピン（LED点滅）の動作がおかしいので26ピンに変更した。
  const int ALT_INTVSwPin = 28;                     //teensy 14ピン
  Bounce ALT_INTVSwitch = Bounce(ALT_INTVSwPin, 5);        
  FlightSimCommand ALT_INTV_Sw;
  
  
  
  
  
  /////////////////////////////////////////////////////////////////////////////
  /////////// 74HC595（LED表示）Teensy++2.0 〜シフトレジスタ経由 //////////////////
  /////////////////////////////////////////////////////////////////////////////
  //番号は74HC595シフトレジスタの出力ピン番号
  //==============================================================================================
  /////////// 74HC595（LED表示）シフトレジスタ F/D ランプ //////////////////
  //==============================================================================================
  const int FD_74HC595_Pin = 5;  //74HC595ピン番号
  FlightSimInteger FD_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 74HC595（LED表示）シフトレジスタ A/T ARM ランプ//////////////////
  //==============================================================================================
  const int AT_ARM_74HC595_Pin = 4;    //74HC595ピン番号
  FlightSimInteger AT_ARM_SwLED;        //データはフロートだが「FlightSimInteger」で大丈夫          
  //==============================================================================================
  /////////// 74HC595（LED表示）シフトレジスタ N1 ランプ//////////////////
  //==============================================================================================
  const int N1_74HC595_Pin = 3;  //74HC595ピン番号
  FlightSimInteger N1_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫  
  //==============================================================================================
  /////////// 74HC595（LED表示）シフトレジスタ SPEED ランプ //////////////////
  //==============================================================================================
  const int SPEED_74HC595_Pin = 2;  //74HC595ピン番号
  FlightSimInteger SPEED_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 74HC595（LED表示）シフトレジスタ VNAV ランプ //////////////////
  //==============================================================================================
  const int VNAV_74HC595_Pin = 1;  //74HC595ピン番号
  FlightSimInteger VNAV_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 74HC595（LED表示）シフトレジスタ LVL CHG ランプ //////////////////
  //==============================================================================================
  const int LVL_CHG_74HC595_Pin = 0;  //74HC595ピン番号
  FlightSimInteger LVL_CHG_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 74HC595（LED表示）シフトレジスタ HDG SEL ランプ //////////////////
  //==============================================================================================
  const int HDG_SEL_74HC595_Pin = 6;  //74HC595ピン番号
  FlightSimInteger HDG_SEL_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 74HC595（LED表示）シフトレジスタ LNAV ランプ //////////////////
  //==============================================================================================
  const int LNAV_74HC595_Pin = 7;  //74HC595ピン番号
  FlightSimInteger LNAV_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 74HC595（LED表示）シフトレジスタ VOR LOC ランプ //////////////////
  //==============================================================================================
  const int VOR_LOC_74HC595_Pin = 8;  //74HC595ピン番号
  FlightSimInteger VOR_LOC_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 74HC595（LED表示）シフトレジスタ APP ランプ //////////////////
  //==============================================================================================
  //8ピンが動作しないので13ピンを使っている。
  const int APP_74HC595_Pin = 9;  //74HC595ピン番号
  FlightSimInteger APP_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 74HC595（LED表示）シフトレジスタ ALT HLD ランプ //////////////////
  //==============================================================================================
  const int ALT_HLD_74HC595_Pin = 10;  //74HC595ピン番号
  FlightSimInteger ALT_HLD_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 74HC595（LED表示）シフトレジスタ V/S ランプ //////////////////
  //==============================================================================================
  const int VS_74HC595_Pin = 11;  //74HC595ピン番号
  FlightSimInteger VS_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 74HC595（LED表示）シフトレジスタ A/P ENGAGE CMD ランプ //////////////////
  //==============================================================================================
  const int AP_ENGAGE_CMD_74HC595_Pin = 12;  //74HC595ピン番号
  FlightSimInteger AP_ENGAGE_CMD_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  
  
  
  //-----------エンコーダ-------------------------
  //===============================================================================================
  /////////// 7-8番 COURSE エンコーダ //////////////////
  //===============================================================================================
  const int COURSE_EncR_pin = 8;//8
  const int COURSE_EncL_pin = 7;//7
 
  Encoder COURSE_Enc(COURSE_EncR_pin, COURSE_EncL_pin);
  short COURSE_EncPrev = 0;  //エンコーダの逆回転
  FlightSimInteger COURSE_Encoder;
  //===============================================================================================
  /////////// 9-10番 AirSeed エンコーダ //////////////////
  //===============================================================================================
  const int AirSp_EncR_pin = 10;    //10
  const int AirSp_EncL_pin = 9;    //9
  
  Encoder AirSp_Enc(AirSp_EncR_pin, AirSp_EncL_pin);      //エンコーダピン
  short AirSp_EncPrev = 0;
  FlightSimFloat AirSpeed;
  FlightSimInteger AirSpeed_is_mach;
  FlightSimInteger Autopilot_mode;
  //===============================================================================================
  /////////// 16-17番 HEADING エンコーダ //////////////////
  //===============================================================================================
  const int HDG_SEL_EncR_Pin = 17;  //17
  const int HDG_SEL_EncL_Pin = 16;  //16
  
  Encoder HDG_SEL_Enc(HDG_SEL_EncR_Pin, HDG_SEL_EncL_Pin);
  short HDG_SEL_EncPrev = 0;  //エンコーダの逆回転
  FlightSimInteger HDG_SEL_Encoder;
  //===============================================================================================
  /////////// 29-30番 ALTITUDE エンコーダ //////////////////
  //===============================================================================================
  const int ALT_HLD_EncR_Pin = 29;
  const int ALT_HLD_EncL_Pin = 30;
  
  Encoder ALT_HLD_Enc(ALT_HLD_EncR_Pin, ALT_HLD_EncL_Pin);
  short ALT_HLD_EncPrev = 0;  //エンコーダの逆回転
  FlightSimInteger ALT_HLD_Encoder;
  //===============================================================================================
  /////////// 24-25番 VERT SPEED エンコーダ //////////////////
  //===============================================================================================
  const int VS_EncR_Pin = 25;
  const int VS_EncL_Pin = 24;
  
  Encoder VS_Enc(VS_EncR_Pin, VS_EncL_Pin);
  short VS_EncPrev = 0;  //エンコーダの逆回転
  FlightSimInteger VS_Encoder;
  
  
   
 
void setup() {
  pinMode(ledPin, OUTPUT);
  
  /////////////////////////////////////////////////////////////////////////
  /////////// setup内 スイッチ Teensy 直結ピン //////////////////
  /////////////////////////////////////////////////////////////////////////
  //===============================================================================================
  /////////// setup内 0番 F/D トグルスイッチ teensy 0ピン //////////////////
  //===============================================================================================
  pinMode (FDSwPin, INPUT_PULLUP);
  FD_Sw = XPlaneRef(&quot;laminar/B738/autopilot/flight_director_toggle&quot;);
  FDSwitch.rebounce(500);   //あったほうがいいかも、ご動作するから。
  //===============================================================================================
  /////////// setup内 1番 A/T ARM トグルスイッチ teensy 1ピン //////////////////
  //===============================================================================================
  pinMode(ATarmSwPin, INPUT_PULLUP);                  
  AutoThrottleARM_Sw = XPlaneRef(&quot;laminar/B738/autopilot/autothrottle_arm_toggle&quot;);
  ATarmSwitch.rebounce(500);
  //===============================================================================================
  /////////// setup内 2番 N1 プッシュスイッチ teensy 2ピン//////////////////
  //===============================================================================================
  pinMode(N1SwPin, INPUT_PULLUP);
  N1_Sw = XPlaneRef(&quot;laminar/B738/autopilot/n1_press&quot;);
  //===============================================================================================
  /////////// setup内 3番 SPEED プッシュスイッチ teensy 3ピン//////////////////
  //===============================================================================================
  pinMode(SPEEDSwPin, INPUT_PULLUP);
  SPEED_Sw = XPlaneRef(&quot;laminar/B738/autopilot/speed_press&quot;);
  //===============================================================================================
  /////////// setup内 4番 VNAV プッシュスイッチ teensy 4ピン//////////////////
  //===============================================================================================
  pinMode(VNAVSwPin, INPUT_PULLUP);
  VNAV_Sw = XPlaneRef(&quot;laminar/B738/autopilot/vnav_press&quot;);
  //===============================================================================================
  /////////// setup内 5番 LVL CHG プッシュスイッチ teensy 5ピン//////////////////
  //===============================================================================================
  pinMode(LVL_CHGSwPin, INPUT_PULLUP);
  LVL_CHG_Sw = XPlaneRef(&quot;laminar/B738/autopilot/lvl_chg_press&quot;);
  //===============================================================================================
  /////////// setup内 14番 C/O プッシュスイッチ teensy 14ピン//////////////////
  //===============================================================================================
  pinMode(COSwPin, INPUT_PULLUP); 
  CO_Sw = XPlaneRef(&quot;laminar/B738/autopilot/change_over_press&quot;);
  //===============================================================================================
  /////////// setup内 14番 SPD_INTV プッシュスイッチ teensy 14ピン//////////////////
  //===============================================================================================
  pinMode(SPD_INTVSwPin, INPUT_PULLUP); 
  SPD_INTV_Sw = XPlaneRef(&quot;laminar/B738/autopilot/spd_interv_pos&quot;);
  //===============================================================================================
  /////////// setup内 14番  プッシュスイッチ teensy 14ピン//////////////////
  //===============================================================================================
  pinMode(COSwPin, INPUT_PULLUP); 
  CO_Sw = XPlaneRef(&quot;laminar/B738/autopilot/change_over_press&quot;);
  //===============================================================================================
  /////////// setup内 6番 HDG SEL プッシュスイッチ teensy 6ピン//////////////////
  //===============================================================================================
  pinMode(HDG_SELSwPin, INPUT_PULLUP);
  HDG_SEL_Sw = XPlaneRef(&quot;laminar/B738/autopilot/hdg_sel_press&quot;);
  //===============================================================================================
  /////////// setup内 Part-B LNAV プッシュスイッチ teensy 7ピン//////////////////
  //============================================================================================
  pinMode(LNAVSwPin, INPUT_PULLUP); 
  LNAV_Sw = XPlaneRef(&quot;laminar/B738/autopilot/lnav_press&quot;);
  //===============================================================================================
  /////////// setup内 Part-B VOR LOC プッシュスイッチ teensy 8ピン//////////////////
  //============================================================================================
  pinMode(VOR_LOCSwPin, INPUT_PULLUP); 
  VOR_LOC_Sw = XPlaneRef(&quot;laminar/B738/autopilot/vorloc_press&quot;);
  //===============================================================================================
  /////////// setup内 Part-B APP プッシュスイッチ teensy 9ピン//////////////////
  //============================================================================================
  pinMode(APPSwPin, INPUT_PULLUP); 
  APP_Sw = XPlaneRef(&quot;laminar/B738/autopilot/app_press&quot;);
  //===============================================================================================
  /////////// setup内 Part-B HDG BANK ANGLE 切り替えスイッチ //////////////////
  //===============================================================================================
  pinMode(BankAngle_up_SwPin, INPUT_PULLUP);
  BankAngle_up = XPlaneRef(&quot;laminar/B738/autopilot/bank_angle_up&quot;);
  pinMode(BankAngle_dn_SwPin, INPUT_PULLUP);
  BankAngle_dn = XPlaneRef(&quot;laminar/B738/autopilot/bank_angle_dn&quot;);
  //===============================================================================================
  /////////// setup内 10番 ALT HOLD プッシュスイッチ teensy 10ピン//////////////////
  //==============================================================================================
  pinMode(ALT_HOLDSwPin, INPUT_PULLUP);
  ALT_HOLD_Sw = XPlaneRef(&quot;laminar/B738/autopilot/alt_hld_press&quot;);
  //===============================================================================================
  /////////// setup内 11番 V/S プッシュスイッチ teensy 11ピン//////////////////
  //===============================================================================================
  pinMode(VSSwPin, INPUT_PULLUP); 
  VS_Sw = XPlaneRef(&quot;laminar/B738/autopilot/vs_press&quot;);
  //===============================================================================================
  /////////// setup内 12番 A/P ENGAGE CMD プッシュスイッチ teensy 12ピン//////////////////
  //===============================================================================================
  pinMode(AP_ENGAGE_CMDSwPin, INPUT_PULLUP); 
  AP_ENGAGE_CMD_Sw = XPlaneRef(&quot;laminar/B738/autopilot/cmd_a_press&quot;);
  //===============================================================================================
  /////////// setup内 13番 DISENGAGE プッシュスイッチ teensy 13ピン//////////////////
  //===============================================================================================
  pinMode(DISENGAGESwPin, INPUT_PULLUP); 
  DISENGAGE_Sw = XPlaneRef(&quot;laminar/B738/autopilot/disconnect_toggle&quot;);
  //===============================================================================================
  /////////// setup内 14番 ALT_INTV プッシュスイッチ teensy 14ピン//////////////////
  //===============================================================================================
  pinMode(ALT_INTVSwPin, INPUT_PULLUP); 
  ALT_INTV_Sw = XPlaneRef(&quot;laminar/B738/autopilot/alt_interv_pos&quot;);
  
  
  
  
  
  
  /////////////////////////////////////////////////////////////////////////
  // setup内 LEDピン Teensy++2.0 〜 74HC595 シフトレジスタ 経由 /////////////
  /////////////////////////////////////////////////////////////////////////
  //setup内LEDランプ共通---------74HC595のピン設定
  pinMode(SER_dataPin, OUTPUT);
  pinMode(RCLK_latchPin, OUTPUT);
  pinMode(SRCLK_clockPin, OUTPUT);
  //setup内LEDランプ共通---------すべてのレジスタピンをリセット
  clearRegisters();
  writeRegisters();
  //===============================================================================================
  /////////// setup内 74HC595（LED表示）シフトレジスタ F/D MAランプ //////////////////
  //===============================================================================================
  FD_SwLED = XPlaneRef(&quot;laminar/B738/autopilot/flight_director_pos&quot;);
    FD_SwLED.onChange(update_FD_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595（LED表示）シフトレジスタ A/T ARM ランプ //////////////////
  //===============================================================================================
  AT_ARM_SwLED = XPlaneRef(&quot;laminar/B738/autopilot/autothrottle_status&quot;);
    AT_ARM_SwLED.onChange(update_AT_ARM_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595（LED表示）シフトレジスタ N1 ランプ //////////////////
  //===============================================================================================
  N1_SwLED = XPlaneRef(&quot;laminar/B738/autopilot/n1_status&quot;);
    N1_SwLED.onChange(update_N1_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595（LED表示）シフトレジスタ SPEED ランプ //////////////////
  //===============================================================================================
  SPEED_SwLED = XPlaneRef(&quot;laminar/B738/autopilot/speed_status1&quot;);
    SPEED_SwLED.onChange(update_SPEED_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595（LED表示）シフトレジスタ VNAV ランプ //////////////////
  //===============================================================================================
  VNAV_SwLED = XPlaneRef(&quot;laminar/B738/autopilot/vnav_status1&quot;);
    VNAV_SwLED.onChange(update_VNAV_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595（LED表示）シフトレジスタ LVL CHG ランプ //////////////////
  //===============================================================================================
  LVL_CHG_SwLED = XPlaneRef(&quot;laminar/B738/autopilot/lvl_chg_status&quot;);
    LVL_CHG_SwLED.onChange(update_LVL_CHG_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595（LED表示）シフトレジスタ HDG SEL ランプ //////////////////
  //===============================================================================================
  HDG_SEL_SwLED = XPlaneRef(&quot;laminar/B738/autopilot/hdg_sel_status&quot;);
    HDG_SEL_SwLED.onChange(update_HDG_SEL_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595（LED表示）シフトレジスタ LNAV ランプ //////////////////
  //===============================================================================================
  LNAV_SwLED = XPlaneRef(&quot;laminar/B738/autopilot/lnav_status&quot;);
    LNAV_SwLED.onChange(update_LNAV_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595（LED表示）シフトレジスタ VOR LOC ランプ //////////////////
  //===============================================================================================
  VOR_LOC_SwLED = XPlaneRef(&quot;laminar/B738/autopilot/vorloc_status&quot;);
    VOR_LOC_SwLED.onChange(update_VOR_LOC_SwLED);
  //===============================================================================================.
  /////////// setup内 74HC595（LED表示）シフトレジスタ APP ランプ //////////////////
  //===============================================================================================
  APP_SwLED = XPlaneRef(&quot;laminar/B738/autopilot/app_status&quot;);
    APP_SwLED.onChange(update_APP_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595（LED表示）シフトレジスタ ALT HOLD ランプ //////////////////
  //===============================================================================================
  ALT_HLD_SwLED = XPlaneRef(&quot;laminar/B738/autopilot/alt_hld_status&quot;);
    ALT_HLD_SwLED.onChange(update_ALT_HLD_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595（LED表示）シフトレジスタ V/S ランプ //////////////////
  //===============================================================================================
  VS_SwLED = XPlaneRef(&quot;laminar/B738/autopilot/vs_status&quot;);
    VS_SwLED.onChange(update_VS_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595（LED表示）シフトレジスタ A/P ENGAGE CMD ランプ //////////////////
  //===============================================================================================
  AP_ENGAGE_CMD_SwLED = XPlaneRef(&quot;laminar/B738/autopilot/cmd_a_status&quot;);
    AP_ENGAGE_CMD_SwLED.onChange(update_AP_ENGAGE_CMD_SwLED);
    
  
  
  
  //-----------エンコーダ-------------------------
  //===============================================================================================
  /////////// setup内 15-16番 COURSE エンコーダ  //////////////////
  //===============================================================================================
  pinMode(COURSE_EncR_pin, INPUT_PULLUP);  //エンコーダ
  pinMode(COURSE_EncL_pin, INPUT_PULLUP);  //エンコーダ
  COURSE_Encoder = XPlaneRef(&quot;sim/cockpit2/radios/actuators/hsi_obs_deg_mag_pilot&quot;);
  //===============================================================================================
  /////////// setup内 17-18番 IAS/MACH（AirSpeed） エンコーダ  //////////////////
  //===============================================================================================
  pinMode(AirSp_EncR_pin, INPUT_PULLUP);  //エンコーダ
  pinMode(AirSp_EncL_pin, INPUT_PULLUP);  //エンコーダ
  AirSpeed = XPlaneRef(&quot;laminar/B738/autopilot/mcp_speed_dial_kts_mach&quot;);//sim/cockpit/autopilot/airspeed
  //AirSpeed_is_mach = XPlaneRef(&quot;laminar/B738/autopilot/mcp_speed_dial_kts_mach&quot;);//sim/cockpit/autopilot/airspeed_is_mach
  Autopilot_mode = XPlaneRef(&quot;sim/cockpit/autopilot/autopilot_mode&quot;);
  //===============================================================================================
  /////////// setup内 19-20番 HEADING エンコーダ  //////////////////sim/cockpit/autopilot/heading_mag
  //=============================================================================================== 
  pinMode(HDG_SEL_EncR_Pin, INPUT_PULLUP);  //エンコーダ
  pinMode(HDG_SEL_EncL_Pin, INPUT_PULLUP);  //エンコーダ
  HDG_SEL_Encoder = XPlaneRef(&quot;laminar/B738/autopilot/mcp_hdg_dial&quot;);
  //===============================================================================================
  /////////// setup内 21-22番 ALTTUDE エンコーダ //////////////////
  //===============================================================================================
  pinMode(ALT_HLD_EncR_Pin, INPUT_PULLUP);  //エンコーダ
  pinMode(ALT_HLD_EncL_Pin, INPUT_PULLUP);  //エンコーダ
  ALT_HLD_Encoder = XPlaneRef(&quot;laminar/B738/autopilot/mcp_alt_dial&quot;);
  //===============================================================================================
  /////////// setup内 23-24番 VERT SPEED エンコーダ //////////////////
  //===============================================================================================
  pinMode(VS_EncR_Pin, INPUT_PULLUP);  //エンコーダ
  pinMode(VS_EncL_Pin, INPUT_PULLUP);  //エンコーダ
  VS_Encoder = XPlaneRef(&quot;sim/cockpit/autopilot/vertical_velocity&quot;);
  
}
 
 
 
 
 
void loop() {
  FlightSim.update();
  
  if (FlightSim.isEnabled()) {          //X-Planeが完全に起動し、データの出力が有効になったら。
    digitalWrite(ledPin, HIGH);  //tensy1ピン
  } else {
    digitalWrite(ledPin, HIGH);
     delay(1000); 
    digitalWrite(ledPin, LOW);
     delay(1000); 
  }
  
  /////////////////////////////////////////////////////////////////////////
  // loop内 74HC595 シフトレジスタ 共通 //
  /////////////////////////////////////////////////////////////////////////
  writeRegisters();  //変更内容を表示するために呼び出さなければなりません
                     //必要な値が設定された後に一度だけ呼び出します。
  //////// loop内 シフトレジスタ 共通 END ///////////////////////////////////
  
  //ループ内には74HC595 シフトレジスタに関して、これ以外の設定項目は無い、全て関数設定になっている。
  
  
  
  
  /////////////////////////////////////////////////////////////////////////
  /////////// loop内 スイッチ Teensy 直結ピン //////////////////
  /////////////////////////////////////////////////////////////////////////
  //==============================================================================================
  /////////// loop内 0番 FlightDirector トグルスイッチ（コマンド）//////////////////
  //============================================================================================== 
  FDSwitch.update();
  if (FDSwitch.fallingEdge()) {
    FD_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (FDSwitch.risingEdge()) {
    FD_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 １番 A/T ARM (AutoThrottle ARM) トグルスイッチ（コマンド）//////////////////
  //==============================================================================================
  ATarmSwitch.update();
  if (ATarmSwitch.fallingEdge()) {
    AutoThrottleARM_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (ATarmSwitch.risingEdge()) {
    AutoThrottleARM_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 2番 N1 プッシュスイッチ（コマンド） //////////////////
  //==============================================================================================
  N1Switch.update();
  if (N1Switch.fallingEdge()) {
    N1_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (N1Switch.risingEdge()) {
    N1_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 3番 SPEED プッシュスイッチ（コマンド） //////////////////
  //==============================================================================================
  SPEEDSwitch.update();
  if (SPEEDSwitch.fallingEdge()) {
    SPEED_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (SPEEDSwitch.risingEdge()) {
    SPEED_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 4番 VNAV プッシュスイッチ（コマンド） //////////////////
  //==============================================================================================
  VNAVSwitch.update();
  if (VNAVSwitch.fallingEdge()) {
    VNAV_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (VNAVSwitch.risingEdge()) {
    VNAV_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 5番 LVL CHG プッシュスイッチ（コマンド） //////////////////
  //==============================================================================================
  LVL_CHGSwitch.update();
  if (LVL_CHGSwitch.fallingEdge()) {
    LVL_CHG_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (LVL_CHGSwitch.risingEdge()) {
    LVL_CHG_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 14番 C/O プッシュスイッチ（コマンド） //////////////////
  //==============================================================================================
  COSwitch.update();
  if (COSwitch.fallingEdge()) {
    CO_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (COSwitch.risingEdge()) {
    CO_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 14番 SPD_INTV プッシュスイッチ（コマンド） //////////////////
  //==============================================================================================
  SPD_INTVSwitch.update();
  if (SPD_INTVSwitch.fallingEdge()) {
    SPD_INTV_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (SPD_INTVSwitch.risingEdge()) {
    SPD_INTV_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 6番 HDG SEL プッシュスイッチ（コマンド） //////////////////
  //==============================================================================================
  HDG_SELSwitch.update();
  if (HDG_SELSwitch.fallingEdge()) {
    HDG_SEL_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (HDG_SELSwitch.risingEdge()) {
    HDG_SEL_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 Part-B LNAV プッシュスイッチ（コマンド） //////////////////
  //==============================================================================================
  LNAVSwitch.update();
  if (LNAVSwitch.fallingEdge()) {
    LNAV_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (LNAVSwitch.risingEdge()) {
    LNAV_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 Part-B VOR LOC プッシュスイッチ（コマンド） //////////////////
  //==============================================================================================
  VOR_LOCSwitch.update();
  if (VOR_LOCSwitch.fallingEdge()) {
    //VOR_LOC_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (VOR_LOCSwitch.risingEdge()) {
    //VOR_LOC_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 Part-B APP プッシュスイッチ（コマンド） //////////////////
  //==============================================================================================
  APPSwitch.update();
  if (APPSwitch.fallingEdge()) {
    APP_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (APPSwitch.risingEdge()) {
    APP_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 Part-B BANK ANGLE 6モード切り替え スイッチ //////////////////
  //==============================================================================================
  BankAngle_up_SwitchPin.update();
  if (BankAngle_up_SwitchPin.fallingEdge()) {
    BankAngle_up = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (BankAngle_up_SwitchPin.risingEdge()) {
    BankAngle_up = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  
  BankAngle_dn_SwitchPin.update();
  if (BankAngle_dn_SwitchPin.fallingEdge()) {
    BankAngle_dn = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (BankAngle_dn_SwitchPin.risingEdge()) {
    BankAngle_dn = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 10番パネル ALT HOLD プッシュスイッチ（コマンド） //////////////////
  //==============================================================================================
  ALT_HOLDSwitch.update();
  if (ALT_HOLDSwitch.fallingEdge()) {
    ALT_HOLD_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (ALT_HOLDSwitch.risingEdge()) {
    ALT_HOLD_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 11番 V/S プッシュスイッチ（コマンド） //////////////////
  //==============================================================================================
  VSSwitch.update();
  if (VSSwitch.fallingEdge()) {
    VS_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (VSSwitch.risingEdge()) {
    VS_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 12番 A/P ENGAGE CMD プッシュスイッチ（コマンド） //////////////////
  //==============================================================================================
  AP_ENGAGE_CMDSwitch.update();
  if (AP_ENGAGE_CMDSwitch.fallingEdge()) {
    AP_ENGAGE_CMD_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (AP_ENGAGE_CMDSwitch.risingEdge()) {
    AP_ENGAGE_CMD_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 12番 DESENGADE プッシュスイッチ（コマンド） //////////////////
  //==============================================================================================
  DISENGAGESwitch.update();
  if (DISENGAGESwitch.fallingEdge()) {
    DISENGAGE_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (DISENGAGESwitch.risingEdge()) {
    DISENGAGE_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  //==============================================================================================
  /////////// loop内 14番 ALT_INTV プッシュスイッチ（コマンド） //////////////////
  //==============================================================================================
  ALT_INTVSwitch.update();
  if (ALT_INTVSwitch.fallingEdge()) {
    ALT_INTV_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (ALT_INTVSwitch.risingEdge()) {
    ALT_INTV_Sw = 0;        //押し上げしたときを検出状態（プッシュボタンは1にしてONを保つ必要がある）
  }
  
  
  
  
  
  
  //-----------エンコーダ-------------------------
  //==============================================================================================
  /////////// loop内 15-16番 COURSE エンコーダ //////////////////
  //==============================================================================================
  // 1クリックで4つ変化するので4で割って1つずつカウントするようにする
  short COURSE_EncDiff = (COURSE_Enc.read() - COURSE_EncPrev) / 4;
   
  if (COURSE_EncDiff) {
    // only update prev when we&#39;ve reached a detent!
    //戻り止めに達した場合にのみPREVを更新！
    COURSE_EncPrev = 0;
    COURSE_Enc.write(0);
   
    // datarefを一時的な値にコピー
    float Course_tmp = COURSE_Encoder;
 
    // 一時的な値に変更を適用
    Course_tmp += COURSE_EncDiff;
    
    // do range checking（範囲チェックを行う）
    while (Course_tmp &lt; 0.0) Course_tmp += 360.0;
    while (Course_tmp &gt;= 360.0) Course_tmp -= 360.0;
 
    // datarefへ検証された新しいエアースピードの数値を書く
    COURSE_Encoder = Course_tmp;
  }
  
  //==============================================================================================
  /////////// loop内 17-18番 IAS/MACH エンコーダ //////////////////
  //==============================================================================================
  // エンコーダの動きを見る
  short AirSp_EncDiff = AirSp_Enc.read() /4;  //粗いの変更したエンコーダを読む- 変更前のエンコーダの値
     
  // それらが移動した後のエンコーダをリセット
  if (AirSp_EncDiff) {
    AirSp_EncPrev = 0;
    AirSp_Enc.write(0);
  }
   
  // encDiffは20にmyEncDiffの値（1カウント）を掛ける値になる
  int AirSpeed_mach_encDiff = 20 * AirSp_EncDiff;  //20 ✕ 1 で encDiff は20になる
   
  //ノットは、autopilot_modeが「0」で000〜392とautopilot_modeが「1」で114〜392の範囲、マッハは0.00〜0.84の範囲で動作するように設定する必要がある。
  //ノット表示
  if (AirSpeed_is_mach == 0 && (Autopilot_mode == 0 || Autopilot_mode == 1)) { 
      //小数点以下2桁からカウントアップ／ダウンを行う  
      if (AirSpeed_mach_encDiff) {      //もし20なら  
          float tmp = AirSpeed;  //tmpはX-Planeからの周波数の値を取得
           
          // encDiffは20だから ✕ 0.05で1ずつカウント（１桁からカウント）となり、その値を周波数にプラスする
          tmp += AirSpeed_mach_encDiff * 0.05; 
          while (tmp &lt; 0) tmp += 1;  //エアスピードが 100 より小さい場合は 1 をプラスする（つまり100で止まる）
          while (tmp &gt;= 392) tmp -= 1;  //エアスピードが 400 より大きい場合は 1 をマイナスする（つまり399で止まる） 
          AirSpeed = tmp;
          //数値の範囲はX-Plane側で処理しているのでいらない
      }
  }
  //ノット表示
  
  if (AirSpeed_is_mach == 0 && (Autopilot_mode == 0 || Autopilot_mode == 2)) {   //&& = 両方同じなら
      //小数点以下2桁からカウントアップ／ダウンを行う  
      if (AirSpeed_mach_encDiff) {      //もし20なら  
          float tmp = AirSpeed;  //tmpはX-Planeからの周波数の値を取得
           
          // encDiffは20だから ✕ 0.05で1ずつカウント（１桁からカウント）となり、その値を周波数にプラスする
          tmp += AirSpeed_mach_encDiff * 0.05; 
          while (tmp &lt; 100) tmp += 1;  //エアスピードが 100 より小さい場合は 1 をプラスする（つまり100で止まる）
          while (tmp &gt;= 392) tmp -= 1;  //エアスピードが 400 より大きい場合は 1 をマイナスする（つまり399で止まる） 
          AirSpeed = tmp;
          //数値の範囲はX-Plane側で処理しているのでいらない
      }
  }
 
  //マッハ表示
  if (AirSpeed_is_mach == 1) { 
      //小数点以下2桁からカウントアップ／ダウンを行う  
      if (AirSpeed_mach_encDiff) {      //もし20なら  
          float tmp = AirSpeed;  //tmpはX-Planeからの周波数の値を取得
           
          // encDiffは20だから ✕ 0.00005で0.01ずつカウント（小数点以下２桁からカウント）となり、その値を周波数にプラスする
          tmp += AirSpeed_mach_encDiff * 0.0005;  
          while (tmp &lt; -0.01) tmp += 0.01;  //tmpが0より小さくなった場合、8をプラスする（つまり7になる）
          while (tmp &gt;= 0.84) tmp -= 0.01;  //tmpが8以上になった場合、8を引く（つまり0になる）
          AirSpeed = tmp;
          //数値の範囲はX-Plane側で処理しているのでいらない
      }
  }
  
 
  
 
  //==============================================================================================
  /////////// loop内 19-20番 HEADING エンコーダ //////////////////
  //==============================================================================================
  // 1クリックで4つ変化するので4で割って1つずつカウントするようにする
  short HDG_SEL_EncDiff = (HDG_SEL_Enc.read() - HDG_SEL_EncPrev) / 4;
  
  if (HDG_SEL_EncDiff) {
    // only update prev when we&#39;ve reached a detent!
    //デテントに到達したときにのみprevを更新します。
    HDG_SEL_EncPrev = 0;
    HDG_SEL_Enc.write(0);
  
    // datarefを一時的な値にコピーします
    float HDG_SEL_tmp = HDG_SEL_Encoder;
  
    // 一時的な値に変更を適用する
    HDG_SEL_tmp += HDG_SEL_EncDiff;
  
    // 範囲チェックを行う(359以上になったら0に戻す動き、またその逆の動きを実現)
    while (HDG_SEL_tmp &lt; 0.0) HDG_SEL_tmp += 360.0;
    while (HDG_SEL_tmp &gt;= 360.0) HDG_SEL_tmp -= 360.0;
  
    // 検証されてものを書き込む
    HDG_SEL_Encoder = HDG_SEL_tmp;
  }
  //==============================================================================================
  /////////// loop内 21-22番パネル ALTITUDE エンコーダ //////////////////
  //==============================================================================================
 
  // 1クリックで4つ変化するので4で割って1つずつカウントするようにする
  short ALT_HLD_EncDiff = (ALT_HLD_Enc.read() - ALT_HLD_EncPrev) *100 / 4;
  if (ALT_HLD_EncDiff) {
    ALT_HLD_EncPrev = 0;
    ALT_HLD_Enc.write(0);
    
    float ALT_HLD_tmp = ALT_HLD_Encoder;
    ALT_HLD_tmp += ALT_HLD_EncDiff;
    while (ALT_HLD_tmp &lt; -1000) ALT_HLD_tmp += 1;    //エンコーダの回転による数値を-1000以上にならないように制限する。
    while (ALT_HLD_tmp &gt;= 99900) ALT_HLD_tmp -= 1;  //エンコーダの数値を99900までに制限する(実際は000000になるので7セグの方で000000になるように設定する必要がある)。
    ALT_HLD_Encoder = ALT_HLD_tmp;
  }
  //==============================================================================================
  /////////// loop内 23-24番 VERT SPEED エンコーダ //////////////////
  //==============================================================================================
  // 1クリックで4つ変化するので4で割って1つずつカウントするようにする
  short VS_EncDiff = (VS_Enc.read() - VS_EncPrev) *100 / 4;
  if (VS_EncDiff) {
    VS_EncPrev = 0;
    VS_Enc.write(0);
    
    float VS_tmp = VS_Encoder;
    VS_tmp += VS_EncDiff;
    VS_Encoder = VS_tmp;
  }
 
}
// ループEND
 
 
 
  ////////////////////////////////////////////////////////////////////////////////
  /////////// 関数 LEDピン Teensy++2.0 〜 74HC595（出力）シフトレジスタ経由 ///////////
  ////////////////////////////////////////////////////////////////////////////////
  //==============================================================================================
  /////////// 関数 74HC595（LED表示）シフトレジスタ F/D ランプ //////////////////
  //==============================================================================================
  void update_FD_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(FD_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(FD_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595（LED表示）シフトレジスタ A/T ARM ランプ //////////////////
  //==============================================================================================
  void update_AT_ARM_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(AT_ARM_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(AT_ARM_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595（LED表示）シフトレジスタ  N1 ランプ //////////////////
  //==============================================================================================
  void update_N1_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(N1_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(N1_74HC595_Pin, LOW);    //点灯
    }
  }
  
  //==============================================================================================
  /////////// 関数 74HC595（LED表示）シフトレジスタ SPEED ランプ //////////////////
  //==============================================================================================
  void update_SPEED_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(SPEED_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(SPEED_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595（LED表示）シフトレジスタ VNAV ランプ //////////////////
  //==============================================================================================
  void update_VNAV_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(VNAV_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(VNAV_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595（LED表示）シフトレジスタ LVL CHG ランプ //////////////////
  //==============================================================================================
  void update_LVL_CHG_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(LVL_CHG_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(LVL_CHG_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595（LED表示）シフトレジスタ HDG SEL ランプ //////////////////
  //==============================================================================================
  void update_HDG_SEL_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(HDG_SEL_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(HDG_SEL_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595（LED表示）シフトレジスタ LNAV ランプ //////////////////
  //==============================================================================================
  void update_LNAV_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(LNAV_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(LNAV_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595（LED表示）シフトレジスタ VOR LOC ランプ //////////////////
  //==============================================================================================
  void update_VOR_LOC_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(VOR_LOC_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(VOR_LOC_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595（LED表示）シフトレジスタ APP ランプ //////////////////
  //==============================================================================================
  void update_APP_SwLED(long value) {
    if (value == 1 || value == 2)  {
      setRegisterPin(APP_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(APP_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595（LED表示）シフトレジスタ ALT HOLD ランプ //////////////////
  //==============================================================================================
  void update_ALT_HLD_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(ALT_HLD_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(ALT_HLD_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595（LED表示）シフトレジスタ V/S ランプ //////////////////
  //==============================================================================================
  void update_VS_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(VS_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(VS_74HC595_Pin, LOW);    //点灯
    }
  }
 //===============================================================================================
  /////////// 関数 74HC595（LED表示）シフトレジスタ A/P ENGAGE CMD ランプ //////////////////
  //==============================================================================================
  void update_AP_ENGAGE_CMD_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(AP_ENGAGE_CMD_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(AP_ENGAGE_CMD_74HC595_Pin, LOW);    //点灯
    }
  }</code></pre></div>



<h2 class="wp-block-heading">B737-800X_Zibo_LowerPart_Panel（３段目）</h2>



<p class="wp-block-paragraph">B737-800X_3_36_fullで動作確認、LowerPart_Panel。このバージョンのZibo以外ではdatarefが変化したりしているので動作しないスイッチがある可能性がある。しかしプログラミングを学べば簡単に修正することは可能。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/5bd2503045b402db4bcf1aa3e5b2e0b8-1024x166.jpg" alt="" class="wp-image-2472"/></figure>



<p class="wp-block-paragraph">これに使っているTeensy++2.0は中国製の偽物のチップを搭載しているが、問題なく動作している。但し、プログラムを書き込む場合はWindowsから、Macの場合はエラーになってしまうので注意。</p>



<p class="wp-block-paragraph">このチップの場合、リブートボタンを押すと以下のようにTeensyが認識され、書き込みを行うと「成功した」と出るが、最後に「ダウンロードエラー」がTeensy Loaderに表示されてTeensyが認識されなくなる。Windowsで書き込みを行うと問題なく実行できる。</p>



<p class="wp-block-paragraph">Windowsでも最初認識されない場合がある。USBのハブに接続している場合はPCちょくのUSBポートに接続すると以下のようにチャント認識されると思う。Teensyのボタンを押して再起動が必要な場合もある。いずれにしても間違いなくWindows 11でも書き込みは可能である。</p>



<figure class="wp-block-image size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/04/a101da6c1eb841a333a968eb8fd5d526.png" alt="" class="wp-image-2662"/></figure>



<p class="wp-block-paragraph">同じ中国製でも、もう一つのチップはMacからでも書き込みが出来る。どちらもシリアルポート名は同じになっている。HID=16c0:0488.ffc9.4 FlightSim (Teensy)</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/LowerPart_Panel-1024x261.jpg" alt="" class="wp-image-2469"/><figcaption class="wp-element-caption">B737-800X_3_36_full_LowerPart_Panel</figcaption></figure>



<p class="wp-block-paragraph"><strong>３段目パネル｜B737-800X_3_36_full_LowerPart_Panel</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>// B737-800X_3_36_fullでロータリースイッチ動作を確認した
  #include 
  #include 
  #include 
  #include  
  #include   //中国製I2C
  
  #define BUTTON 22
  const int ledPin = 5;
  
    //------I2C & 7seg 共通--------------
    enum pins {
      ModeSwitchPin_A1 = 42,  //I2C
      ModeSwitchPin_A2 = 41,  //I2C
      ModeSwitchPin_B1 = 39,  //7seg
      ModeSwitchPin_B2 = 40,  //7seg
      ModeSwitchPin_B3 = 38,  //7seg
      Nav1_LED = 6,  //7seg
      Com1_LED = 7  //7seg
    };  //最後の；は必要
    
    //モードのこと
    Bounce modeSwitch_A1 = Bounce (ModeSwitchPin_A1, 5);  //I2C
    Bounce modeSwitch_A2 = Bounce (ModeSwitchPin_A2, 5);  //I2C
    Bounce modeSwitch_A3 = Bounce (ModeSwitchPin_A2, 5);  //I2C
    Bounce modeSwitch_B1 = Bounce (ModeSwitchPin_B1, 5);  //7seg
    Bounce modeSwitch_B2 = Bounce (ModeSwitchPin_B2, 5);  //7seg
    Bounce modeSwitch_B3 = Bounce (ModeSwitchPin_B2, 5);  //7seg
    Bounce modeSwitch_B4 = Bounce (ModeSwitchPin_B3, 5);  //7seg
    
    FlightSimFloat Airspeed_kts;  //Floatで小数点以下も扱える、本来フロート  //I2C
    FlightSimFloat Altitude_ft;  //Floatで小数点以下も扱える、本来フロート  //I2C
    //FlightSimFloat Fuel_flow;
    FlightSimInteger Fuel_Total;
    FlightSimInteger Fuel_left;
    FlightSimInteger Fuel_center;
    FlightSimInteger Fuel_right;
    FlightSimInteger Nav1_Val;
    FlightSimInteger Com1_Val;
    FlightSimInteger Transponder_Val;
    //------I2C & 7seg end--------------
  
    /////////////////////////////////////////////////////////////////////////
    //--- i2C LCD1602 宣言 ----------------------------
    /////////////////////////////////////////////////////////////////////////
    LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C: 0x3F, 16x2 LCDを16文字で2行表示。
     enum Modes_A1 {
      Mode_SwitchA1, // automatically = 0
      Mode_SwitchA2, // automatically = 1
      Mode_Count_A1 // automagically = 2, and we have 2 modes, that&#39;s convenient!
    };
    int mode_A1 = 0;
    
    enum Modes_A2 {
      Mode_Airspeed_kts, // automatically = 0
      Mode_Altitude_ft, // automatically = 1
      Mode_Count_A2 // automagically = 2, and we have 2 modes, that&#39;s convenient!
    };
    int mode_A2 = 0;
    
    enum Modes_A3 {
      Mode_Fuel_flow, // automatically = 0
      Mode_Fuel_flow_2, // automatically = 1
      Mode_Count_A3 // automagically = 2, and we have 2 modes, that&#39;s convenient!
    };
    int mode_A3 = 0;
    //--------- i2C LCD1602 END ----------------
 
    //--------- ロータリースイッチ ----------------
    /////////////////////////////////////////////////////////////////////////
    //--- CTR ロータリー SW（左側）宣言 ----------------------------
    /////////////////////////////////////////////////////////////////////////
    const int CTR_Rotary_firstPin = 8;  //ロータリースイッチの最初のピン
    const int CTR_Rotary_2Pin = 9;  
    const int CTR_Rotary_3Pin = 10;  
    const int CTR_Rotary_lastPin = 11;  //ロータリースイッチの最後のピン
    FlightSimInteger CTR_RangeSelector;
    
    /////////////////////////////////////////////////////////////////////////
    //--- TFC ロータリー SW（右側）宣言 ----------------------------
    /////////////////////////////////////////////////////////////////////////
    //8ピンもあるが実際のB737では動作していないので空スイッチになる
    const int TFC_Rotary_firstPin = 12;  //ロータリースイッチの最初のピン9-8
    const int TFC_Rotary_2Pin = 13;
    const int TFC_Rotary_3Pin = 14;
    const int TFC_Rotary_4Pin = 15;
    const int TFC_Rotary_5Pin = 16;
    const int TFC_Rotary_6Pin = 17;
    const int TFC_Rotary_7Pin = 18;
    const int TFC_Rotary_lastPin = 19;  //ロータリースイッチの最後のピン16-15
    FlightSimInteger TFC_RangeSelector;
    //--------- ロータリースイッチ END ----------------
    
    
    /////////////////////////////////////////////////////////////////////////
    //--- LED 74HC595 シフトレジスタ 共通 -------------------
    /////////////////////////////////////////////////////////////////////////
    int SER_dataPin = 43;   //75HC595のピン14（SER）とUNOの8ピンを繋ぐ（DS-data）21
    int RCLK_latchPin = 44;  //75HC595のピン12（RCLK）とUNOの9ピンを繋ぐ（ST_CP-latch）24
    int SRCLK_clockPin = 45; //75HC595のピン11（SRCLK）とUNOの10ピンを繋ぐ（SH_CP-clock）23
     
    //How many of the shift registers - change this
    #define number_of_74hc595s 2  //シフトレジスタの数（７４HC５９５の設置数）
     
    //do not touch
    #define numOfRegisterPins number_of_74hc595s * 8  //ここは触れないでください
     
    boolean registers[numOfRegisterPins];    //上のレジスタの数を反映させる
    //--------- LED 74HC595 シフトレジスタ END ----------------------------------------------
  
    /////////////////////////////////////////////////////////////////////////
    //--- LED 74HC595 シフトレジスタ ----------------------------
    /////////////////////////////////////////////////////////////////////////
 
    /////////// 逆噴射 LED シフトレジスタ（74HC595） -----------
    const int Reverser_74HC595_Pin = 0;
    FlightSimInteger ReverserSwLED;  //74HC595（LED）接続
 
    /////////// スピードブレーキ LED シフトレジスタ（74HC595）-----------
    const int SpeedBrake_74HC595_Pin = 1;
    FlightSimInteger SpeedBrakeSwLED;
 
    /////////// パーキングブレーキ LED シフトレジスタ（74HC595）-----------
    const int ParkingBrake_74HC595_Pin = 2;
    FlightSimFloat ParkingBrakeSwLED;
 
    /////////// ギア LED シフトレジスタ（74HC595）-----------
    const int GearHandole_74HC595_Pin = 3;
    FlightSimInteger GearHandleLED;
    //FlightSimInteger GearSwLED; 
 
    /////////// ビーコン　ライト LED シフトレジスタ（74HC595）B777専用 -----------
    const int BeaconBrightness_74HC595_Pin = 4;
    FlightSimFloat BeaconBrightnessLED;
 
    /////////// ストロボ　ライト LED シフトレジスタ（74HC595）-----------
    const int StorobeLight_74HC595_Pin = 5;
    FlightSimInteger StorobeLightLED;
 
    /////////// ウイング　ライト LED シフトレジスタ（74HC595）-----------
    const int WingLight_74HC595_Pin = 6;
    FlightSimInteger WingLightLED;
 
    /////////// ロゴ　ライト LED シフトレジスタ（74HC595）-----------
    const int LogoLight_74HC595_Pin = 7;
    FlightSimInteger LogoLightLED;
 
    /////////// ランディング　ライト LED シフトレジスタ（74HC595）-----------
    const int LandingLight_RETRACTABLE_74HC595_Pin = 8;
    FlightSimInteger LandingLight_RETRACTABLE_LED;
 
    /////////// Taxi　ライト LED シフトレジスタ（74HC595）-----------
    const int TaxiLight_74HC595_Pin = 10;
    FlightSimFloat TaxiLightLED;
 
    /////////// Runway Turnoff　ライト LED シフトレジスタ（74HC595）-----------
    const int RunwayTurnoff_Left_74HC595_Pin = 9;
    FlightSimInteger RunwayTurnoff_LeftLightLED;
    const int RunwayTurnoff_Right_74HC595_Pin = 11;
    FlightSimInteger RunwayTurnoff_RightLightLED;
    
    /////////// 7セグ切り替え用 LED シフトレジスタ（74HC595）-----------
    const int LeftLED_74HC595_Pin = 12;
    const int RightLED_74HC595_Pin = 13;
    
    //--------- LED 74HC595 シフトレジスタ END ------------------------------------------------------------
    
 
    /////////////////////////////////////////////////////////////////////////
    //--- 7セグメント ----------------------------
    /////////////////////////////////////////////////////////////////////////
    
    const int lc_DIN_Pin = 2;    //7セグ、teensyピン位置  18
    const int lc_CLK_Pin = 4; //19
    const int lc_LOAD_Pin = 3; //20
 
    //入力：DINピン、CLK端子、LOAD端子、チップ数（MAX7219の数）
    LedControl lc = LedControl(lc_DIN_Pin, lc_CLK_Pin, lc_LOAD_Pin, 1);
    
    enum Modes_1 {
      Mode_Switch1, // automatically = 0
      Mode_Switch2, // automatically = 1
      Mode_Count_1 // automagically = 2, and we have 2 modes, that&#39;s convenient!
    };  //最後の；は必要
    int mode_1 = 0;
    
    enum Modes_2 {
      Mode_Nav1, // automatically = 0
      Mode_Com1, // automatically = 1
      Mode_Count_2 // automagically = 2, and we have 2 modes, that&#39;s convenient!
    };  //最後の；は必要
    int mode_2 = 0;
    
    enum Modes_3 {
      Mode_Airspeed, // automatically = 0
      Mode_Altitude, // automatically = 1
      Mode_Count_3 // automagically = 2, and we have 2 modes, that&#39;s convenient!
    };  //最後の；は必要
    int mode_3 = 0;
  
    //--------- 7セグメント END ------------------------------------------------------------
    
  
  
void setup() {
    pinMode(ledPin, OUTPUT);
  
    pinMode(BUTTON, INPUT_PULLUP);
    //------setup I2C & 7seg 共通--------------
    pinMode(ModeSwitchPin_A1, INPUT_PULLUP);   //I2C
    pinMode(ModeSwitchPin_A2, INPUT_PULLUP);   //I2C
    pinMode(ModeSwitchPin_B1, INPUT_PULLUP);    //7seg
    pinMode(ModeSwitchPin_B2, INPUT_PULLUP);    //7seg
    
  
    pinMode(Nav1_LED, OUTPUT);    //7seg
    pinMode(Com1_LED, OUTPUT);    //7seg
    
    
    Airspeed_kts = XPlaneRef(&quot;sim/cockpit2/gauges/indicators/airspeed_kts_pilot&quot;);   //I2C
    Altitude_ft = XPlaneRef(&quot;sim/cockpit2/gauges/indicators/altitude_ft_pilot&quot;);   //I2C
    Fuel_Total = XPlaneRef(&quot;sim/flightmodel/weight/m_fuel_total&quot;);   //I2C datarefの数値はkg
    Fuel_left= XPlaneRef(&quot;sim/flightmodel/weight/m_fuel1&quot;);
    Fuel_center= XPlaneRef(&quot;sim/flightmodel/weight/m_fuel2&quot;);
    Fuel_right= XPlaneRef(&quot;sim/flightmodel/weight/m_fuel3&quot;);
    
    Nav1_Val = XPlaneRef(&quot;sim/cockpit2/radios/actuators/nav1_frequency_hz&quot;);    //7seg
    Com1_Val = XPlaneRef(&quot;sim/cockpit2/radios/actuators/com1_frequency_hz&quot;);    //7seg
    Transponder_Val = XPlaneRef(&quot;sim/cockpit2/radios/actuators/transponder_code&quot;);    //7seg
    
    //------setup I2C & 7seg 共通 end--------------
  
    /////////////////////////////////////////////////////////////////////////
    //--- setup内　I2C LCD1602 ----------------------------
    /////////////////////////////////////////////////////////////////////////
    lcd.init();
    lcd.backlight();
    //lcd.noBacklight();
   //--------- setup内　i2C LCD1602 END ------------------------------------------------------------
    
    
    
    
    //--------- setup内　74HC595 シフトレジスタ 共通 END ------------------------------------------------------------
    
    //--------- setup内　ロータリー SW ------------------------------------------------------------  
    //===============================================================================================
    /////////// setup内　CTR ロータリー SW（左側）//////////////////
    //===============================================================================================
    pinMode(CTR_Rotary_firstPin, INPUT_PULLUP);  // 接続モード
    pinMode(CTR_Rotary_2Pin, INPUT_PULLUP);
    pinMode(CTR_Rotary_3Pin, INPUT_PULLUP);
    pinMode(CTR_Rotary_lastPin, INPUT_PULLUP); 
    CTR_RangeSelector = XPlaneRef(&quot;laminar/B738/EFIS_control/capt/map_mode_pos&quot;);
    //===============================================================================================
    /////////// setup内　TFC ロータリー SW（右側）//////////////////
    //===============================================================================================
    pinMode(TFC_Rotary_firstPin, INPUT_PULLUP);  // 接続モード
    pinMode(TFC_Rotary_2Pin, INPUT_PULLUP);
    pinMode(TFC_Rotary_3Pin, INPUT_PULLUP);
    pinMode(TFC_Rotary_4Pin, INPUT_PULLUP);
    pinMode(TFC_Rotary_5Pin, INPUT_PULLUP);
    pinMode(TFC_Rotary_6Pin, INPUT_PULLUP);
    pinMode(TFC_Rotary_7Pin, INPUT_PULLUP);
    pinMode(TFC_Rotary_lastPin, INPUT_PULLUP); 
    TFC_RangeSelector = XPlaneRef(&quot;laminar/B738/EFIS/capt/map_range&quot;);
    //--------- setup内　ロータリー SW END ------------------------------------------------------------
    
    /////////////////////////////////////////////////////////////////////////
    //--- setup内　4HC595 LED シフトレジスタ ----------------------------
    /////////////////////////////////////////////////////////////////////////
    
    /////////// setup内　逆噴射 LED シフトレジスタ（74HC595）-----------
    ReverserSwLED = XPlaneRef(&quot;laminar/B738/engine/prop_mode_sync&quot;);
       ReverserSwLED.onChange(updateReverserSwLED);
 
    /////////// setup内　スピードブレーキ LED シフトレジスタ（74HC595）-----------
    SpeedBrakeSwLED = XPlaneRef(&quot;sim/cockpit2/controls/speedbrake_ratio&quot;);
      SpeedBrakeSwLED.onChange(updateSpeedBrakeSwLED);
 
    /////////// setup内　パーキングブレーキ LED シフトレジスタ（74HC595）-----------
    ParkingBrakeSwLED = XPlaneRef(&quot;sim/cockpit2/controls/parking_brake_ratio&quot;);
      ParkingBrakeSwLED.onChange(updateParkingBrakeSwLED);
 
    /////////// setup内　ギア LED シフトレジスタ（74HC595）-----------
    // ギアが動作している間のみ ON（1になる）
    GearHandleLED = XPlaneRef(&quot;sim/cockpit/switches/gear_handle_status&quot;);
      GearHandleLED.onChange(updateGearHandoleLED);
 
    /////////// setup内　ビーコン　ライト LED シフトレジスタ（74HC595）-----------
    BeaconBrightnessLED = XPlaneRef(&quot;sim/flightmodel2/lights/beacon_brightness_ratio[0]&quot;);
      BeaconBrightnessLED.onChange(updateBeaconBrightnessLED);
 
    /////////// setup内　ストロボ　ライト LED（74HC595）-----------
    StorobeLightLED = XPlaneRef(&quot;sim/flightmodel2/lights/strobe_flash_now&quot;);
      StorobeLightLED.onChange(updateStorobeLightLED);
 
    /////////// setup内　ウイング　ライト LED シフトレジスタ（74HC595）-----------
    WingLightLED = XPlaneRef(&quot;sim/cockpit2/switches/generic_lights_switch[0]&quot;);  //間違いない
      WingLightLED.onChange(updateWingLightLED);
 
    /////////// setup内　ロゴ　ライト LED シフトレジスタ（74HC595）-----------
    LogoLightLED = XPlaneRef(&quot;sim/cockpit2/switches/generic_lights_switch[1]&quot;);
      LogoLightLED.onChange(updateLogoLightLED);
 
    /////////// setup内　ランディング　ライト LED シフトレジスタ（74HC595）-----------
    //実際は3つのスイッチがあるが1つのスイッチで全てを点灯
    LandingLight_RETRACTABLE_LED = XPlaneRef(&quot;sim/cockpit2/switches/landing_lights_on&quot;);
      LandingLight_RETRACTABLE_LED.onChange(updateLandingLight_RETRACTABLE_LED);
 
    /////////// setup内　Taxi　ライト LED シフトレジスタ（74HC595）-----------
    TaxiLightLED = XPlaneRef(&quot;sim/cockpit2/switches/generic_lights_switch[4]&quot;);
      TaxiLightLED.onChange(updateTaxiLightLED);
 
    /////////// setup内　Runway Turnoff　ライト LED シフトレジスタ（74HC595）-----------
    RunwayTurnoff_LeftLightLED = XPlaneRef(&quot;sim/cockpit2/switches/generic_lights_switch[2]&quot;);
      RunwayTurnoff_LeftLightLED.onChange(updateRunwayTurnoff_LeftLightLED);
  
    RunwayTurnoff_RightLightLED = XPlaneRef(&quot;sim/cockpit2/switches/generic_lights_switch[3]&quot;);
      RunwayTurnoff_RightLightLED.onChange(updateRunwayTurnoff_RightLightLED);
    
    //--------- setup内　74HC595 シフトレジスタ END ------------------------------------------------------------
 
    /////////////////////////////////////////////////////////////////////////
    //--- setup内　7セグメント ----------------------------
    ///////////////////////////////////////////////////////////////////////// 
    lc.shutdown(0, false);  // turns on display
    lc.setIntensity(0, 5); // 15 = brightest 
 
    /////////////////////////////////////////////////////////////////////////
    // setup内　74HC595 LED シフトレジスタ 共通
    ///////////////////////////////////////////////////////////////////////// 
    pinMode(SER_dataPin, OUTPUT);
    pinMode(RCLK_latchPin, OUTPUT);
    pinMode(SRCLK_clockPin, OUTPUT);
    
}
 
void loop() {
    //--------- loop内共通----------------
    FlightSim.update();
    if (FlightSim.isEnabled()) {          //X-Planeが完全に起動し、データの出力が有効になったら。
     digitalWrite(ledPin, HIGH);  //tensy1ピン
    } else {
     digitalWrite(ledPin, HIGH);
     delay(1000); 
     digitalWrite(ledPin, LOW);
     delay(1000); 
   }
     
    //--------- loop内共通 END ------------------------------------------------------------
    
    //モードを切り替えするときのLEDアクション
    //digitalWrite(HdgModeLED, (mode == Mode_Heading));
    //digitalWrite(ElevTrimLED, (mode == Mode_ElevTrim));
   
    //writeRegisters();  //変更内容を表示するために呼び出さなければなりません
    //必要な値が設定された後に一度だけ呼び出します。
   
    //===============================================================================================
    /////////// loop内　i2C LCD1602 //////////////////
    //===============================================================================================
    modeSwitch_A1.update();
    modeSwitch_A2.update();
    modeSwitch_A3.update();
    
    // スイッチが押されたときにモードを変更する
    if(modeSwitch_A1.fallingEdge()) {
      ++mode_A1;
      if(mode_A1 &gt;= Mode_Count_A1)
        mode_A1 = 0;
    }
    
    if(modeSwitch_A2.fallingEdge()) {
      ++mode_A2;
      if(mode_A2 &gt;= Mode_Count_A2)
        mode_A2 = 0;
    }
    
    if(modeSwitch_A3.fallingEdge()) {
      ++mode_A3;
      if(mode_A3 &gt;= Mode_Count_A3)
        mode_A3 = 0;
    }
    
    
    //上のスイッチが最初に押されたら
    if (mode_A1 == Mode_SwitchA1) {    
       if (mode_A3 == Mode_Fuel_flow) {    //上のスイッチが最初に押されたら、これが表示される。
         //1行目
          lcd.setCursor(0, 0);  //0は先頭から、2番目の0は1行目に表示
          lcd.print(Fuel_left * 2.2046, 0);  //最後の「1」は小数点以下の桁数である。この0は表示しないということになる。
          lcd.print(&quot;    &quot;);
          
          lcd.setCursor(5, 0);  //5は文字を先頭から6番目に表示、2番目の0は1行目に表示
          lcd.print(Fuel_center * 2.2046, 0);
          lcd.print(&quot;     &quot;);
     
          lcd.setCursor(11, 0);  //11は文字を先頭から6番目に表示、2番目の0は1行目に表示
          lcd.print(Fuel_right * 2.2046, 0);
          lcd.print(&quot;    &quot;);
         
          //2行目
          lcd.setCursor(0, 1);  //0は先頭から、1は2行目に表示
          lcd.print(&quot;Total:&quot;);  //先頭の文字
          lcd.print(Fuel_Total * 2.2046, 0);  //最後の「1」は小数点以下の桁数である。この0は表示しないということになる。
          
          lcd.setCursor(14, 1);  //11は文字を先頭から6番目に表示、2番目の0は1行目に表示
          lcd.print(&quot;lb&quot;);
      
      }
      else if (mode_A3 == Mode_Fuel_flow_2) {    //下のスイッチが押されたら
          lcd.setCursor(0, 0);  //0は先頭から、2番目の0は1行目に表示
          lcd.print(Fuel_left, 1);  //最後の「1」は小数点以下の桁数である。この0は表示しないということになる。
          lcd.print(&quot;    &quot;);
 
          lcd.setCursor(5, 0);  //5は文字を先頭から6番目に表示、2番目の0は1行目に表示
          lcd.print(Fuel_center , 1);
          lcd.print(&quot;    &quot;);
          
          lcd.setCursor(10, 0);  //11は文字を先頭から10番目に表示、2番目の0は1行目に表示
          lcd.print(Fuel_right , 1);
          lcd.print(&quot;     &quot;);
   
          lcd.setCursor(0, 1);  //0は先頭から、1は2行目に表示
          lcd.print(&quot;Total:&quot;);  //先頭の文字
          lcd.print(Fuel_Total, 1);  //最後の「1」は小数点以下の桁数である。この0は表示しないということになる。
          
          lcd.setCursor(14, 1);  //11は文字を先頭から6番目に表示、2番目の0は1行目に表示
          lcd.print(&quot;kg&quot;);
      }
      else{
          lcd.clear();  //これで切り替えのとき、前のデータをクリアできるので文字が重ならない。
      }
      
      
    }
    //これが起動画面。
    if (mode_A1 == Mode_SwitchA2) {    //下のスイッチが2番目に押されたら
      if (mode_A2 == Mode_Airspeed_kts) {
        //これが最初に表示される。
          lcd.setCursor(0, 0);  //0は先頭から、2番目の0は1行目に表示
          lcd.print(&quot;ArSpd:&quot;);  //先頭の文字
          lcd.print(Airspeed_kts, 1);  //最後の「1」は小数点以下の桁数である。この0は表示しないということになる。
          lcd.print(&quot;    &quot;);
          
          lcd.setCursor(12, 0);  //13は先頭から12文字目から表示、2番目の0は1行目に表示
          lcd.print(&quot; knt&quot;);
          
          lcd.setCursor(0, 1);  //0は先頭から、1は2行目に表示
          lcd.print(&quot;ALT:&quot;);  //先頭の文字
          lcd.print(Altitude_ft, 1);  //最後の「1」は小数点以下の桁数である。この0は表示しないということになる。
          
          lcd.setCursor(14, 1);  //0は先頭から、2番目の1は2行目に表示
          lcd.print(&quot;ft&quot;);
      }
    //下のボタンを押したら最初に表示される（つまり2番目）。
      else if (mode_A2 == Mode_Altitude_ft) {
          lcd.setCursor(0, 0);  //0は先頭から、2番目の0は1行目に表示
          lcd.print(&quot;ArSpd:&quot;);  //先頭の文字
          lcd.print(Airspeed_kts*1.8519984, 1);  //最後の「1」は小数点以下の桁数である。この0は表示しないということになる。
          lcd.print(&quot;   &quot;);
          
          lcd.setCursor(12, 0);  //14は先頭から13文字目から表示、2番目の0は1行目に表示
          lcd.print(&quot;km/h&quot;);
          
          lcd.setCursor(0, 1);  //0は先頭から、1は2行目に表示
          lcd.print(&quot;ALT:&quot;);  //先頭の文字
          lcd.print(Altitude_ft/3.2808, 1);  //最後の「1」は小数点以下の桁数である。この0は表示しないということになる。
          
          lcd.setCursor(14, 1);  //14は先頭から13文字目から表示、2番目の1は2行目に表示
          lcd.print(&quot;km&quot;);
      }
      else{
          lcd.clear();
      }
     
  }
    
    //--------- loop内　i2C LCD1602 END ------------------------------------------------------------
    
    //--------- loop内 ロータリースイッチ ----------------
    //===============================================================================================
    /////////// loop内　CTR ロータリースイッチ（左側）//////////////////
    //===============================================================================================
    int CTR_RangeRotaryPos = getCTR_RangeRotaryValue();  //上で取得したスイッチの位置
 
    if( CTR_RangeRotaryPos == 1 ) {     //もしCTR_RangeRotaryPosが 1 なら   
    CTR_RangeSelector = 0;              //CTR_RangeSelectorを 0 の位置にする（X-Planeスイッチの左位置）
    } 
    if( CTR_RangeRotaryPos == 2 ) { 
    CTR_RangeSelector = 1;
    }     
    if( CTR_RangeRotaryPos == 3 ) { 
    CTR_RangeSelector = 2;
    }     
    if( CTR_RangeRotaryPos == 4 ) { 
    CTR_RangeSelector = 3;
    }
    //===============================================================================================
    /////////// loop内　TFC ロータリースイッチ（右側）//////////////////
    //===============================================================================================
    int TFC_RangeRotaryPos = getTFC_RangeRotaryValue();  
 
    if( TFC_RangeRotaryPos == 1 ) {  
    TFC_RangeSelector = 0;            
    } 
    if( TFC_RangeRotaryPos == 2 ) { 
    TFC_RangeSelector = 1;
    }     
    if( TFC_RangeRotaryPos == 3 ) { 
    TFC_RangeSelector = 2;
    }     
    if( TFC_RangeRotaryPos == 4 ) { 
    TFC_RangeSelector = 3;
    }
    if( TFC_RangeRotaryPos == 5 ) { 
    TFC_RangeSelector = 4;
    }
    if( TFC_RangeRotaryPos == 6 ) { 
    TFC_RangeSelector = 5;
    }
    if( TFC_RangeRotaryPos == 7 ) { 
    TFC_RangeSelector = 6;
    }
    if( TFC_RangeRotaryPos == 8 ) { 
    TFC_RangeSelector = 7;
    }
    //--------- loop内　ロータリースイッチ END ------------------------------------------------------------
    
    
    
    
    /////////////////////////////////////////////////////////////////////////
    //--- loop内　74HC595 LED シフトレジスタ ----------------------------
    /////////////////////////////////////////////////////////////////////////
    writeRegisters();  //ディスプレイの変更に呼ばれる必要があります。
                       //必要な値が設定された後に一度だけ呼び出す。
    
    //--------- loop内　74HC595 LED シフトレジスタ END ------------------------------------------------------------
    
    
    /////////////////////////////////////////////////////////////////////////
    //--- loop内　7セグメント ----------------------------
    ///////////////////////////////////////////////////////////////////////// 
    int status ;
    status = digitalRead(BUTTON) ; //スイッチの状態を読む
 
    modeSwitch_B1.update();
    modeSwitch_B2.update();
    modeSwitch_B3.update();
    
    // スイッチが押されたときにモードを変更する
    if(modeSwitch_B1.fallingEdge()) {
      ++mode_1;
      if(mode_1 &gt;= Mode_Count_1)
        mode_1 = 0;
    }
    // スイッチが押されたときにモードを変更する
    if(modeSwitch_B2.fallingEdge()) {
      ++mode_2;
      if(mode_2 &gt;= Mode_Count_2)
        mode_2 = 0;
    }
    // スイッチが押されたときにモードを変更する
    if(modeSwitch_B3.fallingEdge()) {
      ++mode_3;
      if(mode_3 &gt;= Mode_Count_3)
        mode_3 = 0;
    }
    
    
    //light status LEDs
    //digitalWrite(Nav1_LED, (mode_1 == Mode_Nav1));
    //digitalWrite(Com1_LED, (mode_1 == Mode_Com1));
    
    if(status == HIGH) {  //ON/OFFトグルスイッチを押したときの処理
      if (mode_1 == Mode_Switch1) {  //mode_1はmodeSwitch_B1（左スイッチ）を押したときの最初のカウント
        setRegisterPin(12, HIGH);
        setRegisterPin(13, LOW);
        int Nav1_Val_keta1 = Nav1_Val % 10;  //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示
        int Nav1_Val_keta2 = Nav1_Val / 10 % 10 ;  //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
        int Nav1_Val_keta3 = Nav1_Val / 100 % 10;   //例えば123の数字の場合、123÷100＝1.23で1の整数が3桁目の数字として表示
        int Nav1_Val_keta4 = Nav1_Val / 1000 % 10;
        int Nav1_Val_keta5 = Nav1_Val / 10000 % 10;
        
        lc.setDigit(0, 0, Nav1_Val_keta1, false); //1桁目の値を表示、falseはドットを表示しない設定。
        lc.setDigit(0, 1, Nav1_Val_keta2, false); //2桁目の値を表示
        lc.setDigit(0, 2, Nav1_Val_keta3, true); //3桁目の値を表示
        lc.setDigit(0, 3, Nav1_Val_keta4, false); //3桁目の値を表示
        lc.setDigit(0, 4, Nav1_Val_keta5, false); //3桁目の値を表示
      }
      if (mode_2 == Mode_Switch2) {
        setRegisterPin(12, LOW);
        setRegisterPin(13, HIGH); 
        int Com1_Val_keta1 = Com1_Val % 10;  //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示
        int Com1_Val_keta2 = Com1_Val / 10 % 10 ;  //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
        int Com1_Val_keta3 = Com1_Val / 100 % 10;   //例えば123の数字の場合、123÷100＝1.23で1の整数が3桁目の数字として表示
        int Com1_Val_keta4 = Com1_Val / 1000 % 10;
        int Com1_Val_keta5 = Com1_Val / 10000 % 10;
        
        lc.setDigit(0, 0, Com1_Val_keta1, false); //1桁目の値を表示、falseはドットを表示しない設定。
        lc.setDigit(0, 1, Com1_Val_keta2, false); //2桁目の値を表示
        lc.setDigit(0, 2, Com1_Val_keta3, true); //3桁目の値を表示
        lc.setDigit(0, 3, Com1_Val_keta4, false); //3桁目の値を表示
        lc.setDigit(0, 4, Com1_Val_keta5, false); //3桁目の値を表示
      }
    }
    
    if(status == LOW) {   //ON/OFFトグルスイッチを押したときの処理
        setRegisterPin(12, HIGH);
        setRegisterPin(13, LOW);
        int Transponder_kts_keta1 = Transponder_Val % 10;  //例えば123の数字の場合、123÷10＝12.3で小数点以下の3が1桁の数字として表示
        int Transponder_kts_keta2 = Transponder_Val / 10 % 10 ;  //例えば123の数字の場合、、÷10＝12.3、さらに10で割って、1.23で小数点以下の2が表示
        int Transponder_kts_keta3 = Transponder_Val / 100 % 10;   //例えば123の数字の場合、123÷100＝1.23で1の整数が3桁目の数字として表示
        int Transponder_kts_keta4 = Transponder_Val / 1000 % 10;
        int Transponder_kts_keta5 = Transponder_Val / 10000 % 10;
        
        lc.setDigit(0, 0, Transponder_kts_keta1, false); //1桁目の値を表示、falseはドットを表示しない設定。
        lc.setDigit(0, 1, Transponder_kts_keta2, false); //2桁目の値を表示
        lc.setDigit(0, 2, Transponder_kts_keta3, false); //3桁目の値を表示
        lc.setDigit(0, 3, Transponder_kts_keta4, false); //3桁目の値を表示
        lc.setDigit(0, 4, Transponder_kts_keta5, false); //3桁目の値を表示 
     
    }
 
}
//loop END-------------
 
 
 
    //--------- 関数 ----------------  
    //--------- 関数 ロータリースイッチ ----------------
    //===============================================================================================
    /////////// 関数　CTR ロータリースイッチ //////////////////
    //===============================================================================================
    int getCTR_RangeRotaryValue() {  //ロータリースイッチの位置（つまりはピンの位置）を取得する
      for( int i=CTR_Rotary_firstPin; i&lt;= CTR_Rotary_lastPin; i++) { //iは最初のピン、iは最後のピン以下の数になる、iにプラスしていく
        int val = digitalRead( i ); // ロータリースイッチのピンを読む
        if( val == LOW ) { // その読んだピンがLOWなら
        return (i - CTR_Rotary_firstPin + 1); // 5 - 1の範囲の値を返す
        }
      }
    return 0; // エラーの場合は0を返す
    }
    //===============================================================================================
    /////////// 関数　TFC ロータリースイッチ //////////////////
    //===============================================================================================
    int getTFC_RangeRotaryValue() {  //ロータリースイッチの位置（つまりはピンの位置）を取得する
      for( int i=TFC_Rotary_firstPin; i&lt;= TFC_Rotary_lastPin; i++) { //iは最初のピン、iは最後のピン以下の数になる、iにプラスしていく
        int val = digitalRead( i ); // ロータリースイッチのピンを読む
        if( val == LOW ) { // その読んだピンがLOWなら
        return (i - TFC_Rotary_firstPin + 1); // 5 - 1の範囲の値を返す
        }
      }
    return 0; // エラーの場合は0を返す
    }
    //--------- 関数 ロータリースイッチ END ------------------------------------------------------------
  
    /////////////////////////////////////////////////////////////////////////
    //--- 関数　74HC595 LED シフトレジスタ 共通 ----------------------------
    /////////////////////////////////////////////////////////////////////////
    // すべてのレジスタの端子をLOWに設定
    void clearRegisters(){
      for(int i = numOfRegisterPins - 1; i &gt;=  0; i--){
         registers[i] = LOW;
      }
    } 
     
    //Set and display registers
    //Only call AFTER all values are set how you would like (slow otherwise)
    //セットとディスプレイレジスタ
    //すべての値がご希望の方法を設定した後にのみ呼び出す（そうでないとくないとゆっくりになる）
    void writeRegisters(){
     
      digitalWrite(RCLK_latchPin, LOW);
     
      for(int i = numOfRegisterPins - 1; i &gt;=  0; i--){
        digitalWrite(SRCLK_clockPin, LOW);
     
        int val = registers[i];
     
        digitalWrite(SER_dataPin, val);
        digitalWrite(SRCLK_clockPin, HIGH);
     
      }
      digitalWrite(RCLK_latchPin, HIGH);
     
    }
     
    //set an individual pin HIGH or LOW
    //個々のピンを高いか低いか設定
    void setRegisterPin(int index, int value){
      registers[index] = value;
    }
    //--------- 関数　74HC595 LED シフトレジスタ 共通 END ------------------------------------------------------------
    
    /////////////////////////////////////////////////////////////////////////
    //--- 関数　74HC595 LED シフトレジスタ ----------------------------
    /////////////////////////////////////////////////////////////////////////
    
    /////////// 関数 逆噴射 LED Lamp -----------
    void updateReverserSwLED(long value) {
        if (value == 1)  {
          setRegisterPin(Reverser_74HC595_Pin, HIGH);    //消灯
        } else {
          setRegisterPin(Reverser_74HC595_Pin, LOW);    //点灯
        }
      }
 
    /////////// 関数　スピードブレーキ LED シフトレジスタ（74HC595）-----------
    void updateSpeedBrakeSwLED(long value) {
      if (value == 0)  {
        setRegisterPin(SpeedBrake_74HC595_Pin, LOW);    //消灯
      } else {
        setRegisterPin(SpeedBrake_74HC595_Pin, HIGH);    //点灯
      }
    }
 
    /////////// 関数　パーキングブレーキ LED シフトレジスタ（74HC595）-----------
    void updateParkingBrakeSwLED(float value) {
      if (value &gt; 0.289626)  {
        setRegisterPin(ParkingBrake_74HC595_Pin, HIGH);    //消灯
      } else {
        setRegisterPin(ParkingBrake_74HC595_Pin, LOW);    //点灯
      }
    }
 
    /////////// 関数　ギア LED シフトレジスタ（74HC595）-----------
    void updateGearHandoleLED(long value) {
      if (value == 0)  {
        setRegisterPin(GearHandole_74HC595_Pin, LOW);    //消灯
      } else {
        setRegisterPin(GearHandole_74HC595_Pin, HIGH);    //点灯
      }
    }
 
    /////////// 関数　ビーコン　ライト LED シフトレジスタ（74HC595）-----------
    void updateBeaconBrightnessLED(float value) {
      if (value == 1)  {                      //ビーコンは0.000000〜0.900000の間で明るさを調整してあるので複雑である。
        setRegisterPin(BeaconBrightness_74HC595_Pin, HIGH);    //点灯　ややタイミングずれている
      } else {
        setRegisterPin(BeaconBrightness_74HC595_Pin, LOW);    //消灯
      }
    }
 
    /////////// 関数　ストロボ　ライト LED シフトレジスタ（74HC595）-----------
    void updateStorobeLightLED(long value) {
      if (value == 1)  {
        setRegisterPin(StorobeLight_74HC595_Pin, HIGH);    //消灯
      } else {
        setRegisterPin(StorobeLight_74HC595_Pin, LOW);    //点灯
      }
    }
 
    /////////// 関数　ウイング　ライト LED シフトレジスタ（74HC595）-----------
    void updateWingLightLED(long value) {
      if (value == 1)  {
        setRegisterPin(WingLight_74HC595_Pin, HIGH);    //点灯
      } else {
        setRegisterPin(WingLight_74HC595_Pin, LOW);    //消灯
      }
    }
 
    /////////// 関数　ロゴ　ライト LED シフトレジスタ（74HC595）-----------
    void updateLogoLightLED(long value) {
      if (value == 1)  {
        setRegisterPin(LogoLight_74HC595_Pin, HIGH);    //点灯
      } else {
        setRegisterPin(LogoLight_74HC595_Pin, LOW);    //消灯
      }
    }
 
    /////////// 関数　ランディング　ライト LED シフトレジスタ（74HC595）-----------
    void updateLandingLight_RETRACTABLE_LED(long value) {
      if (value == 1)  {
        setRegisterPin(LandingLight_RETRACTABLE_74HC595_Pin, HIGH);    //点灯
      } else {
        setRegisterPin(LandingLight_RETRACTABLE_74HC595_Pin, LOW);    //消灯
      }
    }
 
    /////////// 関数　Taxi　ライト LED シフトレジスタ（74HC595）-----------
    void updateTaxiLightLED(float value) {
      if (value == 1)  {
        setRegisterPin(TaxiLight_74HC595_Pin, HIGH);    //点灯
      } else {
        setRegisterPin(TaxiLight_74HC595_Pin, LOW);    //消灯
      }
    }
 
    /////////// 関数　Runway Turnoff　ライト LED シフトレジスタ（74HC595）-----------
    void updateRunwayTurnoff_LeftLightLED(long value) {
      if (value == 1)  {
        setRegisterPin(RunwayTurnoff_Left_74HC595_Pin, HIGH);    //点灯
      } else {
        setRegisterPin(RunwayTurnoff_Left_74HC595_Pin, LOW);    //消灯
      }
    }
    void updateRunwayTurnoff_RightLightLED(long value) {
      if (value == 1)  {
        setRegisterPin(RunwayTurnoff_Right_74HC595_Pin, HIGH);    //点灯
      } else {
        setRegisterPin(RunwayTurnoff_Right_74HC595_Pin, LOW);    //消灯
      }
    }
    
    //--------- 関数　74HC595 LED シフトレジスタ END ------------------------------------------------------------
 
    void updateNav1_Val(long value) {
      if (value == HIGH)  {
        //setRegisterPin(LeftLED_74HC595_Pin, HIGH);    //点灯
      } else {
        //setRegisterPin(LeftLED_74HC595_Pin, LOW);    //消灯
      }
    }
    void updateCom1_Val(long value) {
      if (value == HIGH)  {
        //setRegisterPin(RightLED_74HC595_Pin, HIGH);    //点灯
      } else {
        //setRegisterPin(RightLED_74HC595_Pin, LOW);    //消灯
      }
    }</code></pre></div>



<h2 class="wp-block-heading">電源入力コネクタ</h2>



<p class="wp-block-paragraph">5Vの電源を設置します。<br>Teensyを複数同時に使用することにより、USBから電流を保持するのが難しくなるので、外部電源を設置します。電源は5V-2Aで問題なく動作しています。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/ece0299e22b31bc03fae43bd0de6b3bd.jpg" alt="" class="wp-image-2524"/><figcaption class="wp-element-caption">5V-2Aの電源アダプター用のコネクタ（ジャックサイズが違う）</figcaption></figure>
</div>


<h2 class="wp-block-heading">Teensy｜外部電源とUSB電源の使い分け</h2>



		<div class="ystdb-card is-horizon" >
			<div class="ystdb-card__container is-horizon has-image-align-">
								<div class="ystdb-card__text">
					<div class="ystdb-card__title">
						<a class="ystdb-card__link" href="https://www.pjrc.com/teensy/external_power.html">Using External Power and USB with the Teensy USB development board</a>
					</div>
																<div class="ystdb-card__domain">www.pjrc.com</div>
									</div>
			</div>
		</div>
		



<ul class="wp-block-list">
<li>3つのパネル合計1Aあれば充分の電流を確保できる。（うまく点灯しないときは電源を入れ直すと良い）</li>



<li>上段：7セグメントは普通に使用した場合5V/60mAで動作している。8の文字を全部表示すると100mA程度になる。この3つではこれが一番電力を必要としている。</li>



<li>中断：オートパイロットは起動状態（LED点灯無し）で30mA、使用した状態で80mA程度になる。</li>



<li>下段：未検証</li>
</ul>



<p class="wp-block-paragraph">Teensyを使っていて動作が安定しない場合は電流不足になっている可能性が高い、そういうときは外部電源が必要になる。</p>



<p class="wp-block-paragraph">以下はPJRCサイトの説明をわかりやすく書いてみた。ここでは電池で説明してある。</p>



<h3 class="wp-block-heading">方法１：5Vと3Vパッドを切り離す</h3>



<p class="wp-block-paragraph">デフォルト状態のTeensyはVcc（または+ 5V）ピンとグラウンドに印加された電力で動作しています。&nbsp;</p>



<p class="wp-block-paragraph">この状態のTeensyで外部電源を導入するには、USBケーブルで供給されている電力と外部電源を分離する必要があります。<br>※つまり、普通状態はUSBから5Vの電源を得ているが、外部電力を使うにはそれを切り離す必要がある。 </p>



<p class="wp-block-paragraph">以下がTeensyをデフォルトの状態で、3Vの電源を直接繋いだ例です。USB電源5Vと乾電池3Vの並列電源になっています。電圧的には3.6V位になるのかもしれませんね。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/4da5cbf8893a093988948c13a8a05c3d.png" alt="" class="wp-image-2534"/><figcaption class="wp-element-caption">PJRCサイトに乗っている画像をそのままコピー表示しています</figcaption></figure>
</div>


<p class="wp-block-paragraph">回路図を参照してください。矢印のある赤丸のところ5Vと3Vの間が繋がっている状態。右に３Vの外部電源があり、左にUSBの5V電源が同時にある状態になっている。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/4da5cbf8893a093988948c13a8a05c3d-4.png" alt="" class="wp-image-2542"/></figure>
</div>


<p class="wp-block-paragraph">ただし、実行電源を3.6ボルト以上で駆動しないでください！ 電源が3.6V以上になる場合は、3Vパッドを短絡させないで、切り離して使用してくださいと言うことです。<br>色んなサイトではこのような電源の並列繋ぎは危険なので止めましょうとあるのだが、この場合はどうなんだろう。わからないなら、ハッキリと分けた方が無難ということで完全に分離して使用することにします。</p>



<p class="wp-block-paragraph">そこで5Vの外部電源を使うのでTeensyに細工が必要になります。安全で安定した電源を確保するためにはこの作業が欠かせなくなります。</p>



<p class="wp-block-paragraph">Teensyは5Vと3Vのパッドの間に細い線で繋がった状態がデフォルトの状態です。パッドの位置はTeensyによって違います。パッドの横に5Vと3Vの文字が記述されているので分かると思います。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/4da5cbf8893a093988948c13a8a05c3d-3.png" alt="" class="wp-image-2540"/><figcaption class="wp-element-caption">5Vと3Vの間は細いラインで接続されています。</figcaption></figure>
</div>


<p class="wp-block-paragraph">その繋がった細いライン（下図の矢印部分）を切断します。するとTeensyの14番ピン（VCC）とUSBからの電源5Vが繋がっていた電源が切れることになるので、外部電源を繋ぐまではTeensyが使えなくなります。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/4da5cbf8893a093988948c13a8a05c3d-5.png" alt="" class="wp-image-2543"/></figure>
</div>


<h3 class="wp-block-heading">方法２：USBコードの赤線をカットする</h3>



<p class="wp-block-paragraph">別のオプションは、USBケーブル内の赤い線を切断することです。 </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/4da5cbf8893a093988948c13a8a05c3d-6.png" alt="" class="wp-image-2544"/></figure>
</div>


<p class="wp-block-paragraph">これにより電源がこなくなることになるのでTeensyの5Vと3Vのパッド間を切断する必要がなくTeensyにそのまま外部電源を繋いで使うことができるようになります。<br>赤線が金属シールドと短絡しないように注意してください。</p>



<p class="wp-block-paragraph">しかし注意が必要！これ以外のUSBコードは絶対に使えません。間違って使う可能性があるのであまりお勧めできないですね。</p>



<h3 class="wp-block-heading">方法３：２個の1N5817ダイオードを使う</h3>



<p class="wp-block-paragraph">2つのダイオードを使用すると、自動的に高い方の電圧に切り替えることができます。</p>



<p class="wp-block-paragraph">まず、上記の「方法１」の説明と同じように、 &#8220;5V&#8221;パッドを切り離す必要があります。 次に、1N5817ダイオードをパッド間に半田付けします。 陰極（ストライプのある側）はセンターパッドに面していなければなりません。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/4da5cbf8893a093988948c13a8a05c3d-7.png" alt="" class="wp-image-2547"/></figure>
</div>


<p class="wp-block-paragraph">また電池はダイオードと接続される必要があります。カソード側（ストライプ）はTeensyのVcc（+ 5V）ピンに接続します。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/03/4da5cbf8893a093988948c13a8a05c3d-8.png" alt="" class="wp-image-2548"/></figure>
</div>


<p class="wp-block-paragraph">このダイオードは、バッテリが逆方向に接続されている場合でもTeensyを保護します。</p>



<p class="wp-block-paragraph">1N5817ダイオードは、一般的には約0.3ボルトを失うので、 電池を使う場合の最もよい実行のためには、単三電池3本（4.5V）を使用してください。</p>



<h2 class="wp-block-heading">実際の配線図</h2>



<p class="wp-block-paragraph">以下のように使っています。スイッチを使ってどちらを選択するかハッキリさせています。３台のTeensyを使っているのでUSBからでは電力不足になるので外部電力を使用するように設定しています。</p>



<p class="wp-block-paragraph">これまでは電池を使っての説明でしたが、<span class="ystdb-inline--1">実際は5V-2Aの電源アダプターを外部電源</span>として使いました。</p>



<p class="wp-block-paragraph">ダイオード1N5817は電源の「+」と「-」を間違いなく繋ぐなら必要ありません。万一のために付けています。ダイオードは方向性があるので注意する必要があります。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/04/1def31aea9ba80f6ed0b84dfb3617cbb-1024x535.png" alt="" class="wp-image-2588"/></figure>
</div>


<p class="wp-block-paragraph">上図ではスイッチによって3.3Vのパッドに両方の電源が入るようになっているが、直接Teensyの5Vに繋いでも構わない、何故なら3.3VパッドとTeensy5Vは内部で繋がっているから。</p>



<h2 class="wp-block-heading">１段目の電源回路</h2>



<p class="wp-block-paragraph">Teensy 3.2を使用している配線図</p>



<figure class="wp-block-image size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/04/745e2f2e9fe14f45b2353b46ac662987.png" alt="" class="wp-image-2684"/></figure>



<p class="wp-block-paragraph">これが実際の電源周辺の画像になる。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/04/996eb0cc4643f92953cb6b7704730096-2-1024x436.jpg" alt="" class="wp-image-2667"/><figcaption class="wp-element-caption">１段目電源回路表面</figcaption></figure>



<p class="wp-block-paragraph">基盤を作成しないで線だけで繋ぐとこのようになる。考えながらやらないと半田付けが出来なくなるところが出たりするので結構大変な作業になる。しかし、基盤を作成するよりは安価で作業的にはこれが早い。</p>



<figure class="wp-block-image size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/04/1e30c467cc3ac1a4e9ea29a3ccff8821.jpg" alt="" class="wp-image-2668"/><figcaption class="wp-element-caption">１段目電源回路裏面</figcaption></figure>



<p class="wp-block-paragraph">Teensy 3.2の場合は外部電源を使用するので、以下のところを切り離す必要がある。</p>



<p class="wp-block-paragraph">パッドには直接ラインが入っていないが、右上のVinのピンに５Vが入っている。Teensy内部でVinパッドと接続されていることになるので問題ない。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/04/0bee56fe346a23f238eb515ab3113cae-3.png" alt="" class="wp-image-2676"/><figcaption class="wp-element-caption">Teensy 3.2の裏面拡大図</figcaption></figure>
</div>


<p class="wp-block-paragraph">Teensy 3.2のVinには外部電源またはUSB電源の切り替えスイッチによる５V電源が入ることになる。</p>



<h2 class="wp-block-heading">２段目の電源回路</h2>



<p class="wp-block-paragraph">Teensy++2.0を使用している配線図</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/04/1def31aea9ba80f6ed0b84dfb3617cbb-1024x535.png" alt="" class="wp-image-2588"/></figure>
</div>


<p class="wp-block-paragraph">以下の左ややしたにあるのがTeensy++2.0（コネクタから外して裏返し）ですが「5V」と「3.3V」と書いてある四角のパッドの間に細い線が繋がっています。これを切断する必要があります。細かい作業ですので注意して行いましょう。</p>



<p class="wp-block-paragraph">作業終了時にはテスターで切断されていることを確認すること。</p>



<figure class="wp-block-image size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/04/170685e81b948ff7c8a7076c1b7b6d58.jpg" alt="" class="wp-image-2610"/></figure>



<p class="wp-block-paragraph">この回路では外部電源は3.3Vでなくて、直接Teensyの5Vに入っているがどちらでも同じラインなので問題は無い。</p>



<p class="wp-block-paragraph"><span class="ystdb-inline--1">1N5817ダイオードを外部電源のイン側に入れていないので「＋」「−」の入力に注意が必要。</span></p>



<p class="wp-block-paragraph">このバックに使われている緑色の基盤は中国の会社で格安のキャンペーンをやっているときに発注して作成したもので、配線が飛躍的に楽になるのだが、現在は普通に作成すると値段が高いのでやはりユニバーサル基板で沢山のコードを使って作成することになる。</p>



<h2 class="wp-block-heading">３段目の実際の電源回路</h2>



<p class="wp-block-paragraph">Teensy++2.0を使用している配線図</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/04/1def31aea9ba80f6ed0b84dfb3617cbb-1024x535.png" alt="" class="wp-image-2588"/></figure>
</div>


<p class="wp-block-paragraph">以下はTeensy++2.0ですが「5V」と「3.3V」と書いてある四角のパッドの間に細い線が繋がっています。これを切断する必要があります。細かい作業ですので注意して行いましょう。</p>



<p class="wp-block-paragraph">作業終了時にはテスターで切断されていることを確認すること。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/04/4e896b7a944dbcb6adad9a1bd4fd4e5c.jpg" alt="" class="wp-image-2559"/></figure>
</div>


<p class="wp-block-paragraph">下図の「電源IN」から5V-2Aの電源を入れています。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/04/11247f2917081bdd80d0168d08b69e8d.jpg" alt="" class="wp-image-2550"/></figure>
</div>


<p class="wp-block-paragraph">以下の画像にはダイオードがありませんが、この撮影後「外部電源IN」の赤線を外して「1N5817」に変えて繋いでいます。これで電流の逆流を防ぐことができるので安心です。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://polo-web.com/wp-content/uploads/2022/04/c7a02a12b12d5b1cfbdd54b7d48ad941-1.jpg" alt="" class="wp-image-2563"/></figure>
</div>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>X-Plane Teensy&#038;キーボードボタン</title>
		<link>https://polo-web.com/teensy-keyboard-buttons/</link>
		
		<dc:creator><![CDATA[polo-web]]></dc:creator>
		<pubDate>Wed, 19 Mar 2025 04:51:14 +0000</pubDate>
				<category><![CDATA[Teensy]]></category>
		<guid isPermaLink="false">https://polo-web.com/?p=1580</guid>

					<description><![CDATA[X-Plane&#38;nbsp;コクピットの自作に挑戦！ Teensyでキーボードボタンと同じようにプッシュボタンを使用してX-Planeのスイッチ類をコ …]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>X-Plane&nbsp;コクピットの自作に挑戦！</strong></p>



<p class="wp-block-paragraph">Teensyでキーボードボタンと同じようにプッシュボタンを使用してX-Planeのスイッチ類をコントロールします。<br>Teensy付属のスケッチを少し変更した分で、実際的なコードになっています。但し、これ一番下の「 } 」が抜けていますので注意。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="581" height="191" src="https://polo-web.com/wp-content/uploads/2025/03/post-id-1580-1.png" alt="" class="wp-image-1664" srcset="https://polo-web.com/wp-content/uploads/2025/03/post-id-1580-1.png 581w, https://polo-web.com/wp-content/uploads/2025/03/post-id-1580-1-300x99.png 300w" sizes="auto, (max-width: 581px) 100vw, 581px" /></figure>
</div>


<p class="wp-block-paragraph">Teensyではこキーボードボタンでは、残念ながら6つのボタンしか使用できません。</p>



<p class="wp-block-paragraph">まず、Arduinoのメニューからツール＞Teensy2.0を指定、ツールメニューのUSB TyoeではKeyboard+Mouse+Joustickを選択して、書き込み。これでUSBキーボードとして認識されます。<br>XPlaneを起動、ジョイスティック&amp;機器からどれか下の左の赤枠のように、ボタンを選択してTeensyの「0」ピンに繋いでだプッシュボタンを押すと「W」となります。<br>これで、TeensyからX-Planeのあらゆるコマンドをボタンでコントロールできるようになります。いいですね〜（笑顔）。<br><br>と、思ったのですが、残念ながらこれ6つしか登録ができないのです。Keyboard.set_key1〜Keyboard.set_key6までで、Keyboard.set_key7になるとスケッチでオレンジから黒に文字が変化して使用できないのがわかります。<br>以上こんな方法もあるということで……（悲）</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="767" height="318" src="https://polo-web.com/wp-content/uploads/2025/03/post-id-1580.png" alt="" class="wp-image-1665" srcset="https://polo-web.com/wp-content/uploads/2025/03/post-id-1580.png 767w, https://polo-web.com/wp-content/uploads/2025/03/post-id-1580-300x124.png 300w" sizes="auto, (max-width: 767px) 100vw, 767px" /></figure>
</div>


<p class="wp-block-paragraph">コードは下の赤のところがそれに当たります。</p>



<p class="has-ys-light-gray-background-color has-background wp-block-paragraph">if (button0.fallingEdge()) {<br>Keyboard.set_key1(<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-ys-red-color">KEY_W</mark>);<br>Keyboard.send_now();<br>}</p>



<p class="wp-block-paragraph">※他のボタンは以下のとうり<br><br>pin 0 = W<br>pin 1 = A<br>pin 2 = S<br>pin 3 = D<br>pin 4 = space<br>pin 5 = E<br>これ以下は、いくら登録しても実行されません。従って以下のコードではKeyboard.set_key6までしか実行されません。</p>



<p class="wp-block-paragraph"><strong>USB_keyboard.ino</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-arduino" data-lang="Arduino"><code>/* Buttons to USB Keyboard Example
 
   You must select Keyboard from the &quot;Tools &gt; USB Type&quot; menu
 
   This example code is in the public domain.
*/
 
 
#include &lt;Bounce.h&gt;
 
// Create Bounce objects for each button.  The Bounce object
// automatically deals with contact chatter or &quot;bounce&quot;, and
// it makes detecting changes very simple.
Bounce button0 = Bounce(0, 10);
Bounce button1 = Bounce(1, 10);  // 10 = 10 ms debounce time
Bounce button2 = Bounce(2, 10);  // which is appropriate for
Bounce button3 = Bounce(3, 10);  // most mechanical pushbuttons
Bounce button4 = Bounce(4, 10);
Bounce button5 = Bounce(5, 10);  // if a button is too &quot;sensitive&quot;
Bounce button6 = Bounce(6, 10);  // to rapid touch, you can
Bounce button7 = Bounce(7, 10);  // increase this time.
Bounce button8 = Bounce(8, 10);
Bounce button9 = Bounce(9, 10);
 
 
void setup() {
  // Configure the pins for input mode with pullup resistors.
  // The pushbuttons connect from each pin to ground.  When
  // the button is pressed, the pin reads LOW because the button
  // shorts it to ground.  When released, the pin reads HIGH
  // because the pullup resistor connects to +5 volts inside
  // the chip.  LOW for &quot;on&quot;, and HIGH for &quot;off&quot; may seem
  // backwards, but using the on-chip pullup resistors is very
  // convenient.  The scheme is called &quot;active low&quot;, and it&#39;s
  // very commonly used in electronics... so much that the chip
  // has built-in pullup resistors!
  pinMode(0, INPUT_PULLUP);
  pinMode(1, INPUT_PULLUP);
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);  // Teensy++ LED, may need 1k resistor pullup
  pinMode(7, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  Mouse.begin();
}
 
void loop() {
  // Update all the buttons.  There should not be any long
  // delays in loop(), so this runs repetitively at a rate
  // faster than the buttons could be pressed and released.
  button0.update();
  button1.update();
  button2.update();
  button3.update();
  button4.update();
  button5.update();
  button6.update();
  button7.update();
  button8.update();
  button9.update();
 
  // Check each button for &quot;falling&quot; edge.
  // Type a message on the Keyboard when each button presses
  // Update the Joystick buttons only upon changes.
  // falling = high (not pressed - voltage from pullup resistor)
  //           to low (pressed - button connects pin to ground)
  if (button0.fallingEdge()) {
    Keyboard.set_key1(KEY_W);
    Keyboard.send_now();
  }
  if (button1.fallingEdge()) {
    Keyboard.set_key2(KEY_A);
    Keyboard.send_now();
  }
  if (button2.fallingEdge()) {
    Keyboard.set_key3(KEY_S);
    Keyboard.send_now();
  }
  if (button3.fallingEdge()) {
    Keyboard.set_key4(KEY_D);
    Keyboard.send_now();
  }
  if (button4.fallingEdge()) {
    Keyboard.set_key5(KEY_SPACE);
    Keyboard.send_now();
  }
  if (button5.fallingEdge()) {
    Keyboard.set_key6(KEY_E);
    Keyboard.send_now();
  }
  //if (button6.fallingEdge()) {
   // Keyboard.set_key(KEY_Q);
  //}
  if (button7.fallingEdge()) {
    Keyboard.set_modifier(MODIFIERKEY_SHIFT);
  }
  if (button8.fallingEdge()) {
    Mouse.set_buttons(1,0,0);
  }
  if (button9.fallingEdge()) {
     Mouse.set_buttons(0,0,1);
  }
 
  // Check each button for &quot;rising&quot; edge
  // Type a message on the Keyboard when each button releases.
  // For many types of projects, you only care when the button
  // is pressed and the release isn&#39;t needed.
  // rising = low (pressed - button connects pin to ground)
  //          to high (not pressed - voltage from pullup resistor)
  if (button0.risingEdge()) {
    Keyboard.set_key1(0);
    Keyboard.send_now();
   
  }
  if (button1.risingEdge()) {
    Keyboard.set_key2(0);
    Keyboard.send_now();
  }
  if (button2.risingEdge()) {
    Keyboard.set_key3(0);
    Keyboard.send_now();
  }
  if (button3.risingEdge()) {
   Keyboard.set_key4(0);
    Keyboard.send_now();
  }
  if (button4.risingEdge()) {
   Keyboard.set_key5(0);
    Keyboard.send_now();
  }
  if (button5.risingEdge()) {
    Keyboard.set_key6(0);
    Keyboard.send_now();
  }
  //if (button6.risingEdge()) {
    //Keyboard.set_key6(0);
  //}
  if (button7.risingEdge()) {
    Keyboard.set_modifier(0);
  }
  if (button8.risingEdge()) {
    Mouse.set_buttons(0,0,0);
  }
  if (button9.risingEdge()) {
    Mouse.set_buttons(0,0,0);
  }
}</code></pre></div>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
