<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.yo-net.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yo-net</id>
	<title>yonewiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.yo-net.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yo-net"/>
	<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/Yo-net"/>
	<updated>2026-10-26T01:45:00Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:15_MAX7219_LED%E3%83%89%E3%83%83%E3%83%88%E8%A1%8C%E5%88%97%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14217</id>
		<title>Arduino Mega 2560 LESSON:15 MAX7219 LEDドット行列モジュール</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:15_MAX7219_LED%E3%83%89%E3%83%83%E3%83%88%E8%A1%8C%E5%88%97%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14217"/>
		<updated>2026-10-26T01:09:47Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　完成図は以下のようなもの&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L15 01 完成図.jpg|380px||none|完成図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　コードは以下のようなモノ&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2016.12.9&lt;br /&gt;
&lt;br /&gt;
//We always have to include the library&lt;br /&gt;
#include &amp;quot;LedControl.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 Now we need a LedControl to work with.&lt;br /&gt;
 ***** These pin numbers will probably not work with your hardware *****&lt;br /&gt;
 pin 12 is connected to the DataIn &lt;br /&gt;
 pin 11 is connected to LOAD(CS)&lt;br /&gt;
 pin 10 is connected to the CLK &lt;br /&gt;
 We have only a single MAX72XX.&lt;br /&gt;
 */&lt;br /&gt;
LedControl lc=LedControl(12,10,11,1);&lt;br /&gt;
&lt;br /&gt;
/* we always wait a bit between updates of the display */&lt;br /&gt;
unsigned long delaytime1=500;&lt;br /&gt;
unsigned long delaytime2=50;&lt;br /&gt;
void setup() {&lt;br /&gt;
  /*&lt;br /&gt;
   The MAX72XX is in power-saving mode on startup,&lt;br /&gt;
   we have to do a wakeup call&lt;br /&gt;
   */&lt;br /&gt;
  lc.shutdown(0,false);&lt;br /&gt;
  /* Set the brightness to a medium values */&lt;br /&gt;
  lc.setIntensity(0,8);&lt;br /&gt;
  /* and clear the display */&lt;br /&gt;
  lc.clearDisplay(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 This method will display the characters for the&lt;br /&gt;
 word &amp;quot;Arduino&amp;quot; one after the other on the matrix. &lt;br /&gt;
 (you need at least 5x7 leds to see the whole chars)&lt;br /&gt;
 */&lt;br /&gt;
void writeArduinoOnMatrix() {&lt;br /&gt;
  /* here is the data for the characters */&lt;br /&gt;
  byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};&lt;br /&gt;
  byte r[5]={B00010000,B00100000,B00100000,B00010000,B00111110};&lt;br /&gt;
  byte d[5]={B11111110,B00010010,B00100010,B00100010,B00011100};&lt;br /&gt;
  byte u[5]={B00111110,B00000100,B00000010,B00000010,B00111100};&lt;br /&gt;
  byte i[5]={B00000000,B00000010,B10111110,B00100010,B00000000};&lt;br /&gt;
  byte n[5]={B00011110,B00100000,B00100000,B00010000,B00111110};&lt;br /&gt;
  byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100};&lt;br /&gt;
&lt;br /&gt;
  /* now display them one by one with a small delay */&lt;br /&gt;
  lc.setRow(0,0,a[0]);&lt;br /&gt;
  lc.setRow(0,1,a[1]);&lt;br /&gt;
  lc.setRow(0,2,a[2]);&lt;br /&gt;
  lc.setRow(0,3,a[3]);&lt;br /&gt;
  lc.setRow(0,4,a[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,r[0]);&lt;br /&gt;
  lc.setRow(0,1,r[1]);&lt;br /&gt;
  lc.setRow(0,2,r[2]);&lt;br /&gt;
  lc.setRow(0,3,r[3]);&lt;br /&gt;
  lc.setRow(0,4,r[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,d[0]);&lt;br /&gt;
  lc.setRow(0,1,d[1]);&lt;br /&gt;
  lc.setRow(0,2,d[2]);&lt;br /&gt;
  lc.setRow(0,3,d[3]);&lt;br /&gt;
  lc.setRow(0,4,d[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,u[0]);&lt;br /&gt;
  lc.setRow(0,1,u[1]);&lt;br /&gt;
  lc.setRow(0,2,u[2]);&lt;br /&gt;
  lc.setRow(0,3,u[3]);&lt;br /&gt;
  lc.setRow(0,4,u[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,i[0]);&lt;br /&gt;
  lc.setRow(0,1,i[1]);&lt;br /&gt;
  lc.setRow(0,2,i[2]);&lt;br /&gt;
  lc.setRow(0,3,i[3]);&lt;br /&gt;
  lc.setRow(0,4,i[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,n[0]);&lt;br /&gt;
  lc.setRow(0,1,n[1]);&lt;br /&gt;
  lc.setRow(0,2,n[2]);&lt;br /&gt;
  lc.setRow(0,3,n[3]);&lt;br /&gt;
  lc.setRow(0,4,n[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,o[0]);&lt;br /&gt;
  lc.setRow(0,1,o[1]);&lt;br /&gt;
  lc.setRow(0,2,o[2]);&lt;br /&gt;
  lc.setRow(0,3,o[3]);&lt;br /&gt;
  lc.setRow(0,4,o[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,0);&lt;br /&gt;
  lc.setRow(0,1,0);&lt;br /&gt;
  lc.setRow(0,2,0);&lt;br /&gt;
  lc.setRow(0,3,0);&lt;br /&gt;
  lc.setRow(0,4,0);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
  This function lights up a some Leds in a row.&lt;br /&gt;
 The pattern will be repeated on every row.&lt;br /&gt;
 The pattern will blink along with the row-number.&lt;br /&gt;
 row number 4 (index==3) will blink 4 times etc.&lt;br /&gt;
 */&lt;br /&gt;
void rows() {&lt;br /&gt;
  for(int row=0;row&amp;lt;8;row++) {&lt;br /&gt;
    delay(delaytime2);&lt;br /&gt;
    lc.setRow(0,row,B10100000);&lt;br /&gt;
    delay(delaytime2);&lt;br /&gt;
    lc.setRow(0,row,(byte)0);&lt;br /&gt;
    for(int i=0;i&amp;lt;row;i++) {&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      lc.setRow(0,row,B10100000);&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      lc.setRow(0,row,(byte)0);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
  This function lights up a some Leds in a column.&lt;br /&gt;
 The pattern will be repeated on every column.&lt;br /&gt;
 The pattern will blink along with the column-number.&lt;br /&gt;
 column number 4 (index==3) will blink 4 times etc.&lt;br /&gt;
 */&lt;br /&gt;
void columns() {&lt;br /&gt;
  for(int col=0;col&amp;lt;8;col++) {&lt;br /&gt;
    delay(delaytime2);&lt;br /&gt;
    lc.setColumn(0,col,B00100000);&lt;br /&gt;
    delay(delaytime2);&lt;br /&gt;
    lc.setColumn(0,col,(byte)0);&lt;br /&gt;
    for(int i=0;i&amp;lt;col;i++) {&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      lc.setColumn(0,col,B00100000);&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      lc.setColumn(0,col,(byte)0);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
 This function will light up every Led on the matrix.&lt;br /&gt;
 The led will blink along with the row-number.&lt;br /&gt;
 row number 4 (index==3) will blink 4 times etc.&lt;br /&gt;
 */&lt;br /&gt;
void single() {&lt;br /&gt;
  for(int row=0;row&amp;lt;8;row++) {&lt;br /&gt;
    for(int col=0;col&amp;lt;8;col++) {&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      lc.setLed(0,row,col,true);&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      for(int i=0;i&amp;lt;col;i++) {&lt;br /&gt;
        lc.setLed(0,row,col,false);&lt;br /&gt;
        delay(delaytime2);&lt;br /&gt;
        lc.setLed(0,row,col,true);&lt;br /&gt;
        delay(delaytime2);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() { &lt;br /&gt;
  writeArduinoOnMatrix();&lt;br /&gt;
  rows();&lt;br /&gt;
  columns();&lt;br /&gt;
  single();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ライブラリを使わず。渦巻きアニメーションを描くのは以下のような感じ&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
  ELEGOO Mega2560&lt;br /&gt;
  MAX7219 8x8 LED Matrix&lt;br /&gt;
  Spiral Animation&lt;br /&gt;
&lt;br /&gt;
  LedControlライブラリ不使用&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// ELEGOOの元コードに合わせたピン配置&lt;br /&gt;
const byte DIN_PIN = 12;&lt;br /&gt;
const byte CLK_PIN = 10;&lt;br /&gt;
const byte CS_PIN  = 11;&lt;br /&gt;
&lt;br /&gt;
// アニメーション速度&lt;br /&gt;
const int SPEED = 20;&lt;br /&gt;
&lt;br /&gt;
// 光の尾の長さ（1～64）&lt;br /&gt;
const int TAIL = 6;&lt;br /&gt;
&lt;br /&gt;
// 8行分の表示データ&lt;br /&gt;
byte matrix[8] = {0};&lt;br /&gt;
&lt;br /&gt;
// 渦巻き座標&lt;br /&gt;
byte spiralX[64];&lt;br /&gt;
byte spiralY[64];&lt;br /&gt;
&lt;br /&gt;
// MAX7219へデータ送信&lt;br /&gt;
void sendMAX7219(byte address, byte data) {&lt;br /&gt;
  digitalWrite(CS_PIN, LOW);//11ピン変更。データ受信状態へ&lt;br /&gt;
&lt;br /&gt;
  //12ピン、10ピン、最上位ビットから、アドレスを設定&lt;br /&gt;
  shiftOut(DIN_PIN, CLK_PIN, MSBFIRST, address);&lt;br /&gt;
&lt;br /&gt;
  //12ピン、10ピン、最上位ビットから、データを設定&lt;br /&gt;
  shiftOut(DIN_PIN, CLK_PIN, MSBFIRST, data);&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(CS_PIN, HIGH);//11ピン変更。受信データ反映&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 表示データをMAX7219へ送る&lt;br /&gt;
void updateDisplay() {&lt;br /&gt;
  for (int y = 0; y &amp;lt; 8; y++) {&lt;br /&gt;
    sendMAX7219(y + 1, matrix[y]);//y+1行目をmatrix y行目のデータにする。&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 全LED消灯&lt;br /&gt;
void clearMatrix() {&lt;br /&gt;
  for (int y = 0; y &amp;lt; 8; y++) {&lt;br /&gt;
    matrix[y] = 0;&lt;br /&gt;
  }&lt;br /&gt;
  updateDisplay();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 指定位置に点灯データを設定&lt;br /&gt;
void setPixel(int x, int y) {&lt;br /&gt;
  if (x &amp;lt; 0 || x &amp;gt;= 8 || y &amp;lt; 0 || y &amp;gt;= 8) {&lt;br /&gt;
    return;//x, yが行列の外の場合は何もしない。&lt;br /&gt;
  }&lt;br /&gt;
  //y行目 x列の値をmatrix[y]に反映&lt;br /&gt;
  matrix[y] |= (byte)(1 &amp;lt;&amp;lt; (7 - x));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 渦巻き座標を作成&lt;br /&gt;
void makeSpiral() {&lt;br /&gt;
  int left = 0;&lt;br /&gt;
  int right = 7;&lt;br /&gt;
  int top = 0;&lt;br /&gt;
  int bottom = 7;&lt;br /&gt;
  int index = 0;&lt;br /&gt;
&lt;br /&gt;
  while (left &amp;lt;= right &amp;amp;&amp;amp; top &amp;lt;= bottom) {&lt;br /&gt;
&lt;br /&gt;
    // 右へ&lt;br /&gt;
    for (int x = left; x &amp;lt;= right; x++) {&lt;br /&gt;
      spiralX[index] = x;&lt;br /&gt;
      spiralY[index] = top;&lt;br /&gt;
      index++;&lt;br /&gt;
    }&lt;br /&gt;
    top++;//一番上を左から右へ行ったから、上は済。一番上からひとつ下へ&lt;br /&gt;
&lt;br /&gt;
    // 下へ&lt;br /&gt;
    for (int y = top; y &amp;lt;= bottom; y++) {&lt;br /&gt;
      spiralX[index] = right;&lt;br /&gt;
      spiralY[index] = y;&lt;br /&gt;
      index++;&lt;br /&gt;
    }&lt;br /&gt;
    right--;//一番右を上から下へ行ったから、右は済。一番右からひとつ左へ&lt;br /&gt;
&lt;br /&gt;
    // 左へ&lt;br /&gt;
    if (top &amp;lt;= bottom) {&lt;br /&gt;
      for (int x = right; x &amp;gt;= left; x--) {&lt;br /&gt;
        spiralX[index] = x;&lt;br /&gt;
        spiralY[index] = bottom;&lt;br /&gt;
        index++;&lt;br /&gt;
      }&lt;br /&gt;
      bottom--;//一番下を右から左へ行ったから、下は済。一番下からひとつ上へ&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 上へ&lt;br /&gt;
    if (left &amp;lt;= right) {&lt;br /&gt;
      for (int y = bottom; y &amp;gt;= top; y--) {&lt;br /&gt;
        spiralX[index] = left;&lt;br /&gt;
        spiralY[index] = y;&lt;br /&gt;
        index++;&lt;br /&gt;
      }&lt;br /&gt;
      left++;//一番左を下から上へ行ったから、左は済。一番左からひとつ右へ&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 初期化&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(DIN_PIN, OUTPUT);//12&lt;br /&gt;
  pinMode(CLK_PIN, OUTPUT);//10&lt;br /&gt;
  pinMode(CS_PIN, OUTPUT);//11&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(CS_PIN, HIGH);//11ピンをHIGHへ&lt;br /&gt;
  digitalWrite(CLK_PIN, LOW);//10ピンをLOWへ&lt;br /&gt;
&lt;br /&gt;
  // MAX7219初期設定&lt;br /&gt;
  sendMAX7219(0x0F, 0x00); // テストモードOFF&lt;br /&gt;
  sendMAX7219(0x09, 0x00); // デコードなし&lt;br /&gt;
  sendMAX7219(0x0B, 0x07); // 8行使用&lt;br /&gt;
  sendMAX7219(0x0A, 0x00); // 最低輝度&lt;br /&gt;
&lt;br /&gt;
  clearMatrix();&lt;br /&gt;
  sendMAX7219(0x0C, 0x01); // 通常動作&lt;br /&gt;
&lt;br /&gt;
  makeSpiral();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// メインループ&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  // 64個のLEDを渦巻き状に通過&lt;br /&gt;
  for (int i = 0; i &amp;lt; 64 + TAIL - 1; i++) {&lt;br /&gt;
&lt;br /&gt;
    // 表示用データを消去&lt;br /&gt;
    for (int y = 0; y &amp;lt; 8; y++) {&lt;br /&gt;
      matrix[y] = 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 光の尾を描画&lt;br /&gt;
    for (int j = 0; j &amp;lt; TAIL; j++) {&lt;br /&gt;
      int index = i - j;&lt;br /&gt;
&lt;br /&gt;
      if (index &amp;gt;= 0 &amp;amp;&amp;amp; index &amp;lt; 64) {&lt;br /&gt;
        setPixel(spiralX[index], spiralY[index]);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    updateDisplay();&lt;br /&gt;
    delay(SPEED);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　MAX7219には、内部に複数のレジスタ（設定値や表示データを記憶する場所）があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　今回使用している命令を表にまとめると、次のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 アドレス   レジスタ         今回の設定&lt;br /&gt;
 0x0F       Display Test     0x00 テストOFF&lt;br /&gt;
 0x09       Decode Mode      0x00 デコードなし&lt;br /&gt;
 0x0B       Scan Limit       0x07 8行使用&lt;br /&gt;
 0x0A       Intensity        0x00 最低輝度&lt;br /&gt;
 0x01～0x08 Digit 0～7       各行のLED表示データ&lt;br /&gt;
 0x0C       Shutdown         0x01 通常動作&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L15_01_%E5%AE%8C%E6%88%90%E5%9B%B3.jpg&amp;diff=14216</id>
		<title>ファイル:Mega2560 L15 01 完成図.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L15_01_%E5%AE%8C%E6%88%90%E5%9B%B3.jpg&amp;diff=14216"/>
		<updated>2026-10-26T01:08:43Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E5%9C%B0%E7%90%83%E5%A4%96%E7%A7%BB%E4%BD%8F&amp;diff=14215</id>
		<title>地球外移住</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E5%9C%B0%E7%90%83%E5%A4%96%E7%A7%BB%E4%BD%8F&amp;diff=14215"/>
		<updated>2026-10-24T16:31:36Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: /* 概要 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''概要''' ==&lt;br /&gt;
なぜ地球外に移住しなければならないのか？それは、まだ世界平和やエネルギー問題の解決を手にしていない自分たちが考えるのはまだまだ早い事なのかもしれませんが、ゆくゆくはいつかやらないといけません。少なくとも、人類が地球で暮らすには過酷過ぎる時代が周期的に訪れているということの理解から始まり、地球や太陽系の終息時期もわかっているそうでして、あと50億年～70億年、人間は100年くらいしか生きられないのにずいぶんとプアな範囲の未来予測ですけど、とにかくそれくらいで地球は住めなくなるということらしいです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ゆくゆくは地球に似た場所や避難できる惑星を探し、人類は少しづつ移動していかなければなりません。そこまでして人類が生き残る必要があるのかは世界的な議論をもう一度やらないといけないのかもしれませんが…。実際にどういう感じで移住するのかは、あまり妄想もできません。かなり大がかりな高速輸送宇宙飛行船を開発しなければならないかもしれないし、今ある技術程度で、地道にやっていくのかもしれません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
自分に関係の無い事だと思う人がほとんどだと思いますが、未来の子供のために原発は！とか抜かしてる人いるくらいですから、それと同じレベルのことのさらに気の長いリスクを考えた時の行動指針だということです。隕石が落ちるのが先か、移住するのが先か、われわれ人類の進む道は試されているのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
宇宙が無限に広がり続けていると信じるならば。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
宇宙がどこかで膨張から収縮に切り替わる運動法則のようなエネルギーの限界があるのならば、宇宙のその外へ飛び出すことも考えられるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
でも、うまく行かなくても、ヒューマノイドAIが、もう一回生物の生成から人間の再現までやってくれる可能性あるよ。一回滅んでも大丈夫な世界線もある。子供達の未来ガーって言ってる人達に教えてあげたいね。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E5%9C%B0%E7%90%83%E5%A4%96%E7%A7%BB%E4%BD%8F&amp;diff=14214</id>
		<title>地球外移住</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E5%9C%B0%E7%90%83%E5%A4%96%E7%A7%BB%E4%BD%8F&amp;diff=14214"/>
		<updated>2026-10-24T16:29:55Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''概要''' ==&lt;br /&gt;
なぜ地球外に移住しなければならないのか？それは、まだ世界平和やエネルギー問題の解決を手にしていない自分たちが考えるのはまだまだ早い事なのかもしれませんが、ゆくゆくはいつかやらないといけません。少なくとも、人類が地球で暮らすには過酷過ぎる時代が周期的に訪れているということの理解から始まり、地球や太陽系の終息時期もわかっているそうでして、あと50億年～70億年、人間は100年くらいしか生きられないのにずいぶんとプアな範囲の未来予測ですけど、とにかくそれくらいで地球は住めなくなるということらしいです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ゆくゆくは地球に似た場所や避難できる惑星を探し、人類は少しづつ移動していかなければなりません。そこまでして人類が生き残る必要があるのかは世界的な議論をもう一度やらないといけないのかもしれませんが…。実際にどういう感じで移住するのかは、あまり妄想もできません。かなり大がかりな高速輸送宇宙飛行船を開発しなければならないかもしれないし、今ある技術程度で、地道にやっていくのかもしれません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
自分に関係の無い事だと思う人がほとんどだと思いますが、未来の子供のために原発は！とか抜かしてる人いるくらいですから、それと同じレベルのことのさらに気の長いリスクを考えた時の行動指針だということです。隕石が落ちるのが先か、移住するのが先か、われわれ人類の進む道は試されているのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
宇宙が無限に広がり続けていると信じるならば。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
宇宙がどこかで膨張から収縮に切り替わる運動法則のようなエネルギーの限界があるのならば、宇宙のその外へ飛び出すことも考えられるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
でも、うまく行かなくても、もう一回ヒューマノイドAIが、もう一回生物の生成から人間の再現までやってくれる可能性あるよ。一回滅んでも大丈夫な世界線もある。子供達の未来ガーって言ってる人達に教えてあげたいね。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%A9%E3%82%B8%E3%82%AA_%E5%A4%A7%E9%98%AA%E3%81%AEAM_FM%E6%94%BE%E9%80%81%E5%B1%80%E4%B8%80%E8%A6%A7&amp;diff=14213</id>
		<title>ラジオ 大阪のAM FM放送局一覧</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%A9%E3%82%B8%E3%82%AA_%E5%A4%A7%E9%98%AA%E3%81%AEAM_FM%E6%94%BE%E9%80%81%E5%B1%80%E4%B8%80%E8%A6%A7&amp;diff=14213"/>
		<updated>2026-10-23T15:31:38Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[ラジオ]]へ戻る。&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　大阪のAM FM放送局についてまとめる記事です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''AM''' ==&lt;br /&gt;
 周波数     放送局                送信出力&lt;br /&gt;
 558 kHz    ラジオ関西（兵庫）     20 kW&lt;br /&gt;
 666 kHz    NHKラジオ第1（大阪）  100 kW&lt;br /&gt;
 1008 kHz   ABCラジオ              50 kW&lt;br /&gt;
 1143 kHz   KBS京都                20 kW&lt;br /&gt;
 1179 kHz   MBSラジオ              50 kW&lt;br /&gt;
 1314 kHz   ラジオ大阪（OBC）      50 kW&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
== '''FM''' ==&lt;br /&gt;
 周波数     放送局                送信出力&lt;br /&gt;
 76.5 MHz   FM COCOLO              10 kW&lt;br /&gt;
 80.2 MHz   FM802                  10 kW&lt;br /&gt;
 85.1 MHz   FM大阪                 10 kW&lt;br /&gt;
 88.1 MHz   NHK-FM 大阪            10 kW&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
== '''ワイドFM''' ==&lt;br /&gt;
 周波数     放送局                送信出力&lt;br /&gt;
 90.6 MHz   MBSラジオ               7 kW&lt;br /&gt;
 91.9 MHz   ラジオ大阪（OBC）       7 kW&lt;br /&gt;
 93.3 MHz   ABCラジオ               7 kW&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　AIによる作図(少しだけ間違えてる。おしい。頑張って調べたんだけどなぁ作図が下手でちょっと移動しちゃってる。)&lt;br /&gt;
&lt;br /&gt;
[[ファイル:ラジオ 01 大阪周辺ラジオ送信所マップ.png|380px||none|大阪周辺ラジオ送信所マップ]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[ラジオ]]へ戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:%E3%83%A9%E3%82%B8%E3%82%AA_01_%E5%A4%A7%E9%98%AA%E5%91%A8%E8%BE%BA%E3%83%A9%E3%82%B8%E3%82%AA%E9%80%81%E4%BF%A1%E6%89%80%E3%83%9E%E3%83%83%E3%83%97.png&amp;diff=14212</id>
		<title>ファイル:ラジオ 01 大阪周辺ラジオ送信所マップ.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:%E3%83%A9%E3%82%B8%E3%82%AA_01_%E5%A4%A7%E9%98%AA%E5%91%A8%E8%BE%BA%E3%83%A9%E3%82%B8%E3%82%AA%E9%80%81%E4%BF%A1%E6%89%80%E3%83%9E%E3%83%83%E3%83%97.png&amp;diff=14212"/>
		<updated>2026-10-23T15:29:21Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:15_MAX7219_LED%E3%83%89%E3%83%83%E3%83%88%E8%A1%8C%E5%88%97%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14211</id>
		<title>Arduino Mega 2560 LESSON:15 MAX7219 LEDドット行列モジュール</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:15_MAX7219_LED%E3%83%89%E3%83%83%E3%83%88%E8%A1%8C%E5%88%97%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14211"/>
		<updated>2026-10-23T14:32:17Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　完成図は以下のようなもの&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　コードは以下のようなモノ&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2016.12.9&lt;br /&gt;
&lt;br /&gt;
//We always have to include the library&lt;br /&gt;
#include &amp;quot;LedControl.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 Now we need a LedControl to work with.&lt;br /&gt;
 ***** These pin numbers will probably not work with your hardware *****&lt;br /&gt;
 pin 12 is connected to the DataIn &lt;br /&gt;
 pin 11 is connected to LOAD(CS)&lt;br /&gt;
 pin 10 is connected to the CLK &lt;br /&gt;
 We have only a single MAX72XX.&lt;br /&gt;
 */&lt;br /&gt;
LedControl lc=LedControl(12,10,11,1);&lt;br /&gt;
&lt;br /&gt;
/* we always wait a bit between updates of the display */&lt;br /&gt;
unsigned long delaytime1=500;&lt;br /&gt;
unsigned long delaytime2=50;&lt;br /&gt;
void setup() {&lt;br /&gt;
  /*&lt;br /&gt;
   The MAX72XX is in power-saving mode on startup,&lt;br /&gt;
   we have to do a wakeup call&lt;br /&gt;
   */&lt;br /&gt;
  lc.shutdown(0,false);&lt;br /&gt;
  /* Set the brightness to a medium values */&lt;br /&gt;
  lc.setIntensity(0,8);&lt;br /&gt;
  /* and clear the display */&lt;br /&gt;
  lc.clearDisplay(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 This method will display the characters for the&lt;br /&gt;
 word &amp;quot;Arduino&amp;quot; one after the other on the matrix. &lt;br /&gt;
 (you need at least 5x7 leds to see the whole chars)&lt;br /&gt;
 */&lt;br /&gt;
void writeArduinoOnMatrix() {&lt;br /&gt;
  /* here is the data for the characters */&lt;br /&gt;
  byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};&lt;br /&gt;
  byte r[5]={B00010000,B00100000,B00100000,B00010000,B00111110};&lt;br /&gt;
  byte d[5]={B11111110,B00010010,B00100010,B00100010,B00011100};&lt;br /&gt;
  byte u[5]={B00111110,B00000100,B00000010,B00000010,B00111100};&lt;br /&gt;
  byte i[5]={B00000000,B00000010,B10111110,B00100010,B00000000};&lt;br /&gt;
  byte n[5]={B00011110,B00100000,B00100000,B00010000,B00111110};&lt;br /&gt;
  byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100};&lt;br /&gt;
&lt;br /&gt;
  /* now display them one by one with a small delay */&lt;br /&gt;
  lc.setRow(0,0,a[0]);&lt;br /&gt;
  lc.setRow(0,1,a[1]);&lt;br /&gt;
  lc.setRow(0,2,a[2]);&lt;br /&gt;
  lc.setRow(0,3,a[3]);&lt;br /&gt;
  lc.setRow(0,4,a[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,r[0]);&lt;br /&gt;
  lc.setRow(0,1,r[1]);&lt;br /&gt;
  lc.setRow(0,2,r[2]);&lt;br /&gt;
  lc.setRow(0,3,r[3]);&lt;br /&gt;
  lc.setRow(0,4,r[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,d[0]);&lt;br /&gt;
  lc.setRow(0,1,d[1]);&lt;br /&gt;
  lc.setRow(0,2,d[2]);&lt;br /&gt;
  lc.setRow(0,3,d[3]);&lt;br /&gt;
  lc.setRow(0,4,d[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,u[0]);&lt;br /&gt;
  lc.setRow(0,1,u[1]);&lt;br /&gt;
  lc.setRow(0,2,u[2]);&lt;br /&gt;
  lc.setRow(0,3,u[3]);&lt;br /&gt;
  lc.setRow(0,4,u[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,i[0]);&lt;br /&gt;
  lc.setRow(0,1,i[1]);&lt;br /&gt;
  lc.setRow(0,2,i[2]);&lt;br /&gt;
  lc.setRow(0,3,i[3]);&lt;br /&gt;
  lc.setRow(0,4,i[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,n[0]);&lt;br /&gt;
  lc.setRow(0,1,n[1]);&lt;br /&gt;
  lc.setRow(0,2,n[2]);&lt;br /&gt;
  lc.setRow(0,3,n[3]);&lt;br /&gt;
  lc.setRow(0,4,n[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,o[0]);&lt;br /&gt;
  lc.setRow(0,1,o[1]);&lt;br /&gt;
  lc.setRow(0,2,o[2]);&lt;br /&gt;
  lc.setRow(0,3,o[3]);&lt;br /&gt;
  lc.setRow(0,4,o[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,0);&lt;br /&gt;
  lc.setRow(0,1,0);&lt;br /&gt;
  lc.setRow(0,2,0);&lt;br /&gt;
  lc.setRow(0,3,0);&lt;br /&gt;
  lc.setRow(0,4,0);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
  This function lights up a some Leds in a row.&lt;br /&gt;
 The pattern will be repeated on every row.&lt;br /&gt;
 The pattern will blink along with the row-number.&lt;br /&gt;
 row number 4 (index==3) will blink 4 times etc.&lt;br /&gt;
 */&lt;br /&gt;
void rows() {&lt;br /&gt;
  for(int row=0;row&amp;lt;8;row++) {&lt;br /&gt;
    delay(delaytime2);&lt;br /&gt;
    lc.setRow(0,row,B10100000);&lt;br /&gt;
    delay(delaytime2);&lt;br /&gt;
    lc.setRow(0,row,(byte)0);&lt;br /&gt;
    for(int i=0;i&amp;lt;row;i++) {&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      lc.setRow(0,row,B10100000);&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      lc.setRow(0,row,(byte)0);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
  This function lights up a some Leds in a column.&lt;br /&gt;
 The pattern will be repeated on every column.&lt;br /&gt;
 The pattern will blink along with the column-number.&lt;br /&gt;
 column number 4 (index==3) will blink 4 times etc.&lt;br /&gt;
 */&lt;br /&gt;
void columns() {&lt;br /&gt;
  for(int col=0;col&amp;lt;8;col++) {&lt;br /&gt;
    delay(delaytime2);&lt;br /&gt;
    lc.setColumn(0,col,B00100000);&lt;br /&gt;
    delay(delaytime2);&lt;br /&gt;
    lc.setColumn(0,col,(byte)0);&lt;br /&gt;
    for(int i=0;i&amp;lt;col;i++) {&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      lc.setColumn(0,col,B00100000);&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      lc.setColumn(0,col,(byte)0);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
 This function will light up every Led on the matrix.&lt;br /&gt;
 The led will blink along with the row-number.&lt;br /&gt;
 row number 4 (index==3) will blink 4 times etc.&lt;br /&gt;
 */&lt;br /&gt;
void single() {&lt;br /&gt;
  for(int row=0;row&amp;lt;8;row++) {&lt;br /&gt;
    for(int col=0;col&amp;lt;8;col++) {&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      lc.setLed(0,row,col,true);&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      for(int i=0;i&amp;lt;col;i++) {&lt;br /&gt;
        lc.setLed(0,row,col,false);&lt;br /&gt;
        delay(delaytime2);&lt;br /&gt;
        lc.setLed(0,row,col,true);&lt;br /&gt;
        delay(delaytime2);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() { &lt;br /&gt;
  writeArduinoOnMatrix();&lt;br /&gt;
  rows();&lt;br /&gt;
  columns();&lt;br /&gt;
  single();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ライブラリを使わず。渦巻きアニメーションを描くのは以下のような感じ&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
  ELEGOO Mega2560&lt;br /&gt;
  MAX7219 8x8 LED Matrix&lt;br /&gt;
  Spiral Animation&lt;br /&gt;
&lt;br /&gt;
  LedControlライブラリ不使用&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// ELEGOOの元コードに合わせたピン配置&lt;br /&gt;
const byte DIN_PIN = 12;&lt;br /&gt;
const byte CLK_PIN = 10;&lt;br /&gt;
const byte CS_PIN  = 11;&lt;br /&gt;
&lt;br /&gt;
// アニメーション速度&lt;br /&gt;
const int SPEED = 20;&lt;br /&gt;
&lt;br /&gt;
// 光の尾の長さ（1～64）&lt;br /&gt;
const int TAIL = 6;&lt;br /&gt;
&lt;br /&gt;
// 8行分の表示データ&lt;br /&gt;
byte matrix[8] = {0};&lt;br /&gt;
&lt;br /&gt;
// 渦巻き座標&lt;br /&gt;
byte spiralX[64];&lt;br /&gt;
byte spiralY[64];&lt;br /&gt;
&lt;br /&gt;
// MAX7219へデータ送信&lt;br /&gt;
void sendMAX7219(byte address, byte data) {&lt;br /&gt;
  digitalWrite(CS_PIN, LOW);//11ピン変更。データ受信状態へ&lt;br /&gt;
&lt;br /&gt;
  //12ピン、10ピン、最上位ビットから、アドレスを設定&lt;br /&gt;
  shiftOut(DIN_PIN, CLK_PIN, MSBFIRST, address);&lt;br /&gt;
&lt;br /&gt;
  //12ピン、10ピン、最上位ビットから、データを設定&lt;br /&gt;
  shiftOut(DIN_PIN, CLK_PIN, MSBFIRST, data);&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(CS_PIN, HIGH);//11ピン変更。受信データ反映&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 表示データをMAX7219へ送る&lt;br /&gt;
void updateDisplay() {&lt;br /&gt;
  for (int y = 0; y &amp;lt; 8; y++) {&lt;br /&gt;
    sendMAX7219(y + 1, matrix[y]);//y+1行目をmatrix y行目のデータにする。&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 全LED消灯&lt;br /&gt;
void clearMatrix() {&lt;br /&gt;
  for (int y = 0; y &amp;lt; 8; y++) {&lt;br /&gt;
    matrix[y] = 0;&lt;br /&gt;
  }&lt;br /&gt;
  updateDisplay();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 指定位置に点灯データを設定&lt;br /&gt;
void setPixel(int x, int y) {&lt;br /&gt;
  if (x &amp;lt; 0 || x &amp;gt;= 8 || y &amp;lt; 0 || y &amp;gt;= 8) {&lt;br /&gt;
    return;//x, yが行列の外の場合は何もしない。&lt;br /&gt;
  }&lt;br /&gt;
  //y行目 x列の値をmatrix[y]に反映&lt;br /&gt;
  matrix[y] |= (byte)(1 &amp;lt;&amp;lt; (7 - x));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 渦巻き座標を作成&lt;br /&gt;
void makeSpiral() {&lt;br /&gt;
  int left = 0;&lt;br /&gt;
  int right = 7;&lt;br /&gt;
  int top = 0;&lt;br /&gt;
  int bottom = 7;&lt;br /&gt;
  int index = 0;&lt;br /&gt;
&lt;br /&gt;
  while (left &amp;lt;= right &amp;amp;&amp;amp; top &amp;lt;= bottom) {&lt;br /&gt;
&lt;br /&gt;
    // 右へ&lt;br /&gt;
    for (int x = left; x &amp;lt;= right; x++) {&lt;br /&gt;
      spiralX[index] = x;&lt;br /&gt;
      spiralY[index] = top;&lt;br /&gt;
      index++;&lt;br /&gt;
    }&lt;br /&gt;
    top++;//一番上を左から右へ行ったから、上は済。一番上からひとつ下へ&lt;br /&gt;
&lt;br /&gt;
    // 下へ&lt;br /&gt;
    for (int y = top; y &amp;lt;= bottom; y++) {&lt;br /&gt;
      spiralX[index] = right;&lt;br /&gt;
      spiralY[index] = y;&lt;br /&gt;
      index++;&lt;br /&gt;
    }&lt;br /&gt;
    right--;//一番右を上から下へ行ったから、右は済。一番右からひとつ左へ&lt;br /&gt;
&lt;br /&gt;
    // 左へ&lt;br /&gt;
    if (top &amp;lt;= bottom) {&lt;br /&gt;
      for (int x = right; x &amp;gt;= left; x--) {&lt;br /&gt;
        spiralX[index] = x;&lt;br /&gt;
        spiralY[index] = bottom;&lt;br /&gt;
        index++;&lt;br /&gt;
      }&lt;br /&gt;
      bottom--;//一番下を右から左へ行ったから、下は済。一番下からひとつ上へ&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 上へ&lt;br /&gt;
    if (left &amp;lt;= right) {&lt;br /&gt;
      for (int y = bottom; y &amp;gt;= top; y--) {&lt;br /&gt;
        spiralX[index] = left;&lt;br /&gt;
        spiralY[index] = y;&lt;br /&gt;
        index++;&lt;br /&gt;
      }&lt;br /&gt;
      left++;//一番左を下から上へ行ったから、左は済。一番左からひとつ右へ&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 初期化&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(DIN_PIN, OUTPUT);//12&lt;br /&gt;
  pinMode(CLK_PIN, OUTPUT);//10&lt;br /&gt;
  pinMode(CS_PIN, OUTPUT);//11&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(CS_PIN, HIGH);//11ピンをHIGHへ&lt;br /&gt;
  digitalWrite(CLK_PIN, LOW);//10ピンをLOWへ&lt;br /&gt;
&lt;br /&gt;
  // MAX7219初期設定&lt;br /&gt;
  sendMAX7219(0x0F, 0x00); // テストモードOFF&lt;br /&gt;
  sendMAX7219(0x09, 0x00); // デコードなし&lt;br /&gt;
  sendMAX7219(0x0B, 0x07); // 8行使用&lt;br /&gt;
  sendMAX7219(0x0A, 0x00); // 最低輝度&lt;br /&gt;
&lt;br /&gt;
  clearMatrix();&lt;br /&gt;
  sendMAX7219(0x0C, 0x01); // 通常動作&lt;br /&gt;
&lt;br /&gt;
  makeSpiral();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// メインループ&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  // 64個のLEDを渦巻き状に通過&lt;br /&gt;
  for (int i = 0; i &amp;lt; 64 + TAIL - 1; i++) {&lt;br /&gt;
&lt;br /&gt;
    // 表示用データを消去&lt;br /&gt;
    for (int y = 0; y &amp;lt; 8; y++) {&lt;br /&gt;
      matrix[y] = 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 光の尾を描画&lt;br /&gt;
    for (int j = 0; j &amp;lt; TAIL; j++) {&lt;br /&gt;
      int index = i - j;&lt;br /&gt;
&lt;br /&gt;
      if (index &amp;gt;= 0 &amp;amp;&amp;amp; index &amp;lt; 64) {&lt;br /&gt;
        setPixel(spiralX[index], spiralY[index]);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    updateDisplay();&lt;br /&gt;
    delay(SPEED);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　MAX7219には、内部に複数のレジスタ（設定値や表示データを記憶する場所）があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　今回使用している命令を表にまとめると、次のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 アドレス   レジスタ         今回の設定&lt;br /&gt;
 0x0F       Display Test     0x00 テストOFF&lt;br /&gt;
 0x09       Decode Mode      0x00 デコードなし&lt;br /&gt;
 0x0B       Scan Limit       0x07 8行使用&lt;br /&gt;
 0x0A       Intensity        0x00 最低輝度&lt;br /&gt;
 0x01～0x08 Digit 0～7       各行のLED表示データ&lt;br /&gt;
 0x0C       Shutdown         0x01 通常動作&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:15_MAX7219_LED%E3%83%89%E3%83%83%E3%83%88%E8%A1%8C%E5%88%97%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14210</id>
		<title>Arduino Mega 2560 LESSON:15 MAX7219 LEDドット行列モジュール</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:15_MAX7219_LED%E3%83%89%E3%83%83%E3%83%88%E8%A1%8C%E5%88%97%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14210"/>
		<updated>2026-10-23T14:30:41Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　完成図は以下のようなもの&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　コードは以下のようなモノ&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2016.12.9&lt;br /&gt;
&lt;br /&gt;
//We always have to include the library&lt;br /&gt;
#include &amp;quot;LedControl.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 Now we need a LedControl to work with.&lt;br /&gt;
 ***** These pin numbers will probably not work with your hardware *****&lt;br /&gt;
 pin 12 is connected to the DataIn &lt;br /&gt;
 pin 11 is connected to LOAD(CS)&lt;br /&gt;
 pin 10 is connected to the CLK &lt;br /&gt;
 We have only a single MAX72XX.&lt;br /&gt;
 */&lt;br /&gt;
LedControl lc=LedControl(12,10,11,1);&lt;br /&gt;
&lt;br /&gt;
/* we always wait a bit between updates of the display */&lt;br /&gt;
unsigned long delaytime1=500;&lt;br /&gt;
unsigned long delaytime2=50;&lt;br /&gt;
void setup() {&lt;br /&gt;
  /*&lt;br /&gt;
   The MAX72XX is in power-saving mode on startup,&lt;br /&gt;
   we have to do a wakeup call&lt;br /&gt;
   */&lt;br /&gt;
  lc.shutdown(0,false);&lt;br /&gt;
  /* Set the brightness to a medium values */&lt;br /&gt;
  lc.setIntensity(0,8);&lt;br /&gt;
  /* and clear the display */&lt;br /&gt;
  lc.clearDisplay(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 This method will display the characters for the&lt;br /&gt;
 word &amp;quot;Arduino&amp;quot; one after the other on the matrix. &lt;br /&gt;
 (you need at least 5x7 leds to see the whole chars)&lt;br /&gt;
 */&lt;br /&gt;
void writeArduinoOnMatrix() {&lt;br /&gt;
  /* here is the data for the characters */&lt;br /&gt;
  byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};&lt;br /&gt;
  byte r[5]={B00010000,B00100000,B00100000,B00010000,B00111110};&lt;br /&gt;
  byte d[5]={B11111110,B00010010,B00100010,B00100010,B00011100};&lt;br /&gt;
  byte u[5]={B00111110,B00000100,B00000010,B00000010,B00111100};&lt;br /&gt;
  byte i[5]={B00000000,B00000010,B10111110,B00100010,B00000000};&lt;br /&gt;
  byte n[5]={B00011110,B00100000,B00100000,B00010000,B00111110};&lt;br /&gt;
  byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100};&lt;br /&gt;
&lt;br /&gt;
  /* now display them one by one with a small delay */&lt;br /&gt;
  lc.setRow(0,0,a[0]);&lt;br /&gt;
  lc.setRow(0,1,a[1]);&lt;br /&gt;
  lc.setRow(0,2,a[2]);&lt;br /&gt;
  lc.setRow(0,3,a[3]);&lt;br /&gt;
  lc.setRow(0,4,a[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,r[0]);&lt;br /&gt;
  lc.setRow(0,1,r[1]);&lt;br /&gt;
  lc.setRow(0,2,r[2]);&lt;br /&gt;
  lc.setRow(0,3,r[3]);&lt;br /&gt;
  lc.setRow(0,4,r[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,d[0]);&lt;br /&gt;
  lc.setRow(0,1,d[1]);&lt;br /&gt;
  lc.setRow(0,2,d[2]);&lt;br /&gt;
  lc.setRow(0,3,d[3]);&lt;br /&gt;
  lc.setRow(0,4,d[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,u[0]);&lt;br /&gt;
  lc.setRow(0,1,u[1]);&lt;br /&gt;
  lc.setRow(0,2,u[2]);&lt;br /&gt;
  lc.setRow(0,3,u[3]);&lt;br /&gt;
  lc.setRow(0,4,u[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,i[0]);&lt;br /&gt;
  lc.setRow(0,1,i[1]);&lt;br /&gt;
  lc.setRow(0,2,i[2]);&lt;br /&gt;
  lc.setRow(0,3,i[3]);&lt;br /&gt;
  lc.setRow(0,4,i[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,n[0]);&lt;br /&gt;
  lc.setRow(0,1,n[1]);&lt;br /&gt;
  lc.setRow(0,2,n[2]);&lt;br /&gt;
  lc.setRow(0,3,n[3]);&lt;br /&gt;
  lc.setRow(0,4,n[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,o[0]);&lt;br /&gt;
  lc.setRow(0,1,o[1]);&lt;br /&gt;
  lc.setRow(0,2,o[2]);&lt;br /&gt;
  lc.setRow(0,3,o[3]);&lt;br /&gt;
  lc.setRow(0,4,o[4]);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
  lc.setRow(0,0,0);&lt;br /&gt;
  lc.setRow(0,1,0);&lt;br /&gt;
  lc.setRow(0,2,0);&lt;br /&gt;
  lc.setRow(0,3,0);&lt;br /&gt;
  lc.setRow(0,4,0);&lt;br /&gt;
  delay(delaytime1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
  This function lights up a some Leds in a row.&lt;br /&gt;
 The pattern will be repeated on every row.&lt;br /&gt;
 The pattern will blink along with the row-number.&lt;br /&gt;
 row number 4 (index==3) will blink 4 times etc.&lt;br /&gt;
 */&lt;br /&gt;
void rows() {&lt;br /&gt;
  for(int row=0;row&amp;lt;8;row++) {&lt;br /&gt;
    delay(delaytime2);&lt;br /&gt;
    lc.setRow(0,row,B10100000);&lt;br /&gt;
    delay(delaytime2);&lt;br /&gt;
    lc.setRow(0,row,(byte)0);&lt;br /&gt;
    for(int i=0;i&amp;lt;row;i++) {&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      lc.setRow(0,row,B10100000);&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      lc.setRow(0,row,(byte)0);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
  This function lights up a some Leds in a column.&lt;br /&gt;
 The pattern will be repeated on every column.&lt;br /&gt;
 The pattern will blink along with the column-number.&lt;br /&gt;
 column number 4 (index==3) will blink 4 times etc.&lt;br /&gt;
 */&lt;br /&gt;
void columns() {&lt;br /&gt;
  for(int col=0;col&amp;lt;8;col++) {&lt;br /&gt;
    delay(delaytime2);&lt;br /&gt;
    lc.setColumn(0,col,B00100000);&lt;br /&gt;
    delay(delaytime2);&lt;br /&gt;
    lc.setColumn(0,col,(byte)0);&lt;br /&gt;
    for(int i=0;i&amp;lt;col;i++) {&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      lc.setColumn(0,col,B00100000);&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      lc.setColumn(0,col,(byte)0);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
 This function will light up every Led on the matrix.&lt;br /&gt;
 The led will blink along with the row-number.&lt;br /&gt;
 row number 4 (index==3) will blink 4 times etc.&lt;br /&gt;
 */&lt;br /&gt;
void single() {&lt;br /&gt;
  for(int row=0;row&amp;lt;8;row++) {&lt;br /&gt;
    for(int col=0;col&amp;lt;8;col++) {&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      lc.setLed(0,row,col,true);&lt;br /&gt;
      delay(delaytime2);&lt;br /&gt;
      for(int i=0;i&amp;lt;col;i++) {&lt;br /&gt;
        lc.setLed(0,row,col,false);&lt;br /&gt;
        delay(delaytime2);&lt;br /&gt;
        lc.setLed(0,row,col,true);&lt;br /&gt;
        delay(delaytime2);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() { &lt;br /&gt;
  writeArduinoOnMatrix();&lt;br /&gt;
  rows();&lt;br /&gt;
  columns();&lt;br /&gt;
  single();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ライブラリを使わず。渦巻きアニメーションを描くのは以下のような感じ&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
  ELEGOO Mega2560&lt;br /&gt;
  MAX7219 8x8 LED Matrix&lt;br /&gt;
  Spiral Animation&lt;br /&gt;
&lt;br /&gt;
  LedControlライブラリ不使用&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// ELEGOOの元コードに合わせたピン配置&lt;br /&gt;
const byte DIN_PIN = 12;&lt;br /&gt;
const byte CLK_PIN = 10;&lt;br /&gt;
const byte CS_PIN  = 11;&lt;br /&gt;
&lt;br /&gt;
// アニメーション速度&lt;br /&gt;
const int SPEED = 20;&lt;br /&gt;
&lt;br /&gt;
// 光の尾の長さ（1～64）&lt;br /&gt;
const int TAIL = 6;&lt;br /&gt;
&lt;br /&gt;
// 8行分の表示データ&lt;br /&gt;
byte matrix[8] = {0};&lt;br /&gt;
&lt;br /&gt;
// 渦巻き座標&lt;br /&gt;
byte spiralX[64];&lt;br /&gt;
byte spiralY[64];&lt;br /&gt;
&lt;br /&gt;
// MAX7219へデータ送信&lt;br /&gt;
void sendMAX7219(byte address, byte data) {&lt;br /&gt;
  digitalWrite(CS_PIN, LOW);//11ピン変更。データ受信状態へ&lt;br /&gt;
&lt;br /&gt;
  //12ピン、10ピン、最上位ビットから、アドレスを設定&lt;br /&gt;
  shiftOut(DIN_PIN, CLK_PIN, MSBFIRST, address);&lt;br /&gt;
&lt;br /&gt;
  //12ピン、10ピン、最上位ビットから、データを設定&lt;br /&gt;
  shiftOut(DIN_PIN, CLK_PIN, MSBFIRST, data);&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(CS_PIN, HIGH);//11ピン変更。受信データ反映&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 表示データをMAX7219へ送る&lt;br /&gt;
void updateDisplay() {&lt;br /&gt;
  for (int y = 0; y &amp;lt; 8; y++) {&lt;br /&gt;
    sendMAX7219(y + 1, matrix[y]);//y+1行目をmatrix y行目のデータにする。&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 全LED消灯&lt;br /&gt;
void clearMatrix() {&lt;br /&gt;
  for (int y = 0; y &amp;lt; 8; y++) {&lt;br /&gt;
    matrix[y] = 0;&lt;br /&gt;
  }&lt;br /&gt;
  updateDisplay();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 指定位置に点灯データを設定&lt;br /&gt;
void setPixel(int x, int y) {&lt;br /&gt;
  if (x &amp;lt; 0 || x &amp;gt;= 8 || y &amp;lt; 0 || y &amp;gt;= 8) {&lt;br /&gt;
    return;//x, yが行列の外の場合は何もしない。&lt;br /&gt;
  }&lt;br /&gt;
  //y行目 x列の値をmatrix[y]に反映&lt;br /&gt;
  matrix[y] |= (byte)(1 &amp;lt;&amp;lt; (7 - x));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 渦巻き座標を作成&lt;br /&gt;
void makeSpiral() {&lt;br /&gt;
  int left = 0;&lt;br /&gt;
  int right = 7;&lt;br /&gt;
  int top = 0;&lt;br /&gt;
  int bottom = 7;&lt;br /&gt;
  int index = 0;&lt;br /&gt;
&lt;br /&gt;
  while (left &amp;lt;= right &amp;amp;&amp;amp; top &amp;lt;= bottom) {&lt;br /&gt;
&lt;br /&gt;
    // 右へ&lt;br /&gt;
    for (int x = left; x &amp;lt;= right; x++) {&lt;br /&gt;
      spiralX[index] = x;&lt;br /&gt;
      spiralY[index] = top;&lt;br /&gt;
      index++;&lt;br /&gt;
    }&lt;br /&gt;
    top++;//一番上を左から右へ行ったから、上は済。一番上からひとつ下へ&lt;br /&gt;
&lt;br /&gt;
    // 下へ&lt;br /&gt;
    for (int y = top; y &amp;lt;= bottom; y++) {&lt;br /&gt;
      spiralX[index] = right;&lt;br /&gt;
      spiralY[index] = y;&lt;br /&gt;
      index++;&lt;br /&gt;
    }&lt;br /&gt;
    right--;//一番右を上から下へ行ったから、右は済。一番右からひとつ左へ&lt;br /&gt;
&lt;br /&gt;
    // 左へ&lt;br /&gt;
    if (top &amp;lt;= bottom) {&lt;br /&gt;
      for (int x = right; x &amp;gt;= left; x--) {&lt;br /&gt;
        spiralX[index] = x;&lt;br /&gt;
        spiralY[index] = bottom;&lt;br /&gt;
        index++;&lt;br /&gt;
      }&lt;br /&gt;
      bottom--;//一番下を右から左へ行ったから、下は済。一番下からひとつ上へ&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 上へ&lt;br /&gt;
    if (left &amp;lt;= right) {&lt;br /&gt;
      for (int y = bottom; y &amp;gt;= top; y--) {&lt;br /&gt;
        spiralX[index] = left;&lt;br /&gt;
        spiralY[index] = y;&lt;br /&gt;
        index++;&lt;br /&gt;
      }&lt;br /&gt;
      left++;//一番左を下から上へ行ったから、左は済。一番左からひとつ右へ&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 初期化&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(DIN_PIN, OUTPUT);//12&lt;br /&gt;
  pinMode(CLK_PIN, OUTPUT);//10&lt;br /&gt;
  pinMode(CS_PIN, OUTPUT);//11&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(CS_PIN, HIGH);//11ピンをHIGHへ&lt;br /&gt;
  digitalWrite(CLK_PIN, LOW);//10ピンをLOWへ&lt;br /&gt;
&lt;br /&gt;
  // MAX7219初期設定&lt;br /&gt;
  sendMAX7219(0x0F, 0x00); // テストモードOFF&lt;br /&gt;
  sendMAX7219(0x09, 0x00); // デコードなし&lt;br /&gt;
  sendMAX7219(0x0B, 0x07); // 8行使用&lt;br /&gt;
  sendMAX7219(0x0A, 0x00); // 最低輝度&lt;br /&gt;
&lt;br /&gt;
  clearMatrix();&lt;br /&gt;
  sendMAX7219(0x0C, 0x01); // 通常動作&lt;br /&gt;
&lt;br /&gt;
  makeSpiral();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// メインループ&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  // 64個のLEDを渦巻き状に通過&lt;br /&gt;
  for (int i = 0; i &amp;lt; 64 + TAIL - 1; i++) {&lt;br /&gt;
&lt;br /&gt;
    // 表示用データを消去&lt;br /&gt;
    for (int y = 0; y &amp;lt; 8; y++) {&lt;br /&gt;
      matrix[y] = 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 光の尾を描画&lt;br /&gt;
    for (int j = 0; j &amp;lt; TAIL; j++) {&lt;br /&gt;
      int index = i - j;&lt;br /&gt;
&lt;br /&gt;
      if (index &amp;gt;= 0 &amp;amp;&amp;amp; index &amp;lt; 64) {&lt;br /&gt;
        setPixel(spiralX[index], spiralY[index]);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    updateDisplay();&lt;br /&gt;
    delay(SPEED);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　MAX7219には、内部に複数のレジスタ（設定値や表示データを記憶する場所）があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　今回使用している命令を表にまとめると、次のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 アドレス   レジスタ         今回の設定&lt;br /&gt;
 0x0F       Display Test     0x00 テストOFF&lt;br /&gt;
 0x09       Decode Mode	     0x00 デコードなし&lt;br /&gt;
 0x0B       Scan Limit       0x07 8行使用&lt;br /&gt;
 0x0A       Intensity        0x00 最低輝度&lt;br /&gt;
 0x01～0x08 Digit 0～7       各行のLED表示データ&lt;br /&gt;
 0x0C       Shutdown         0x01 通常動作&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:14_%E8%B5%A4%E5%A4%96%E7%B7%9A%E5%8F%97%E4%BF%A1%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14209</id>
		<title>Arduino Mega 2560 LESSON:14 赤外線受信モジュール</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:14_%E8%B5%A4%E5%A4%96%E7%B7%9A%E5%8F%97%E4%BF%A1%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14209"/>
		<updated>2026-10-23T09:49:49Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　赤外線受信モジュールを接続するレッスンです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　完成図は以下のとおりです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L14 01 完成図.jpg|380px||none|完成図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KiCADで追加した部品&lt;br /&gt;
&lt;br /&gt;
*Conn_01x03：Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector)&lt;br /&gt;
*+5V&lt;br /&gt;
*GND&lt;br /&gt;
*PWR_FLAG&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KiCADで追加したフットプリント&lt;br /&gt;
&lt;br /&gt;
*Conn_01x03：Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical&lt;br /&gt;
*Conn_01x03：Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　PCB図は以下のようなもの。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 03 PCB図.png|380px||none|PCB図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　3DPreview図は以下のようなもの。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 04 3DPreview図.png|380px||none|3DPreview図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　コードは以下のとおりです。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2023.05.05&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;IRremote.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int receiver = 11; // Signal Pin of IR receiver to Arduino Digital Pin 11&lt;br /&gt;
&lt;br /&gt;
/*-----( Declare objects )-----*/&lt;br /&gt;
IRrecv irrecv(receiver);     // create instance of 'irrecv'&lt;br /&gt;
//vairable uses to store the last decodedRawData&lt;br /&gt;
uint32_t last_decodedRawData = 0;&lt;br /&gt;
/*-----( Function )-----*/&lt;br /&gt;
void translateIR() // takes action based on IR code received&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // 受信したプロトコル名を表示&lt;br /&gt;
  Serial.print(&amp;quot;Protocol: &amp;quot;);&lt;br /&gt;
  Serial.println(getProtocolString(irrecv.decodedIRData.protocol));&lt;br /&gt;
&lt;br /&gt;
  // Check if it is a repeat IR code &lt;br /&gt;
  if (irrecv.decodedIRData.flags)&lt;br /&gt;
  {&lt;br /&gt;
    //set the current decodedRawData to the last decodedRawData &lt;br /&gt;
    irrecv.decodedIRData.decodedRawData = last_decodedRawData;&lt;br /&gt;
    Serial.println(&amp;quot;REPEAT!&amp;quot;);&lt;br /&gt;
  } else&lt;br /&gt;
  {&lt;br /&gt;
    //output the IR code on the serial monitor&lt;br /&gt;
    Serial.print(&amp;quot;IR code:0x&amp;quot;);&lt;br /&gt;
    Serial.println(irrecv.decodedIRData.decodedRawData, HEX);&lt;br /&gt;
  }&lt;br /&gt;
  //map the IR code to the remote key&lt;br /&gt;
  switch (irrecv.decodedIRData.decodedRawData)&lt;br /&gt;
  {&lt;br /&gt;
    //標準NECプロトコル&lt;br /&gt;
    case 0xBA45FF00: Serial.println(&amp;quot;POWER&amp;quot;); break;&lt;br /&gt;
    case 0xB847FF00: Serial.println(&amp;quot;FUNC/STOP&amp;quot;); break;&lt;br /&gt;
    case 0xB946FF00: Serial.println(&amp;quot;VOL+&amp;quot;); break;&lt;br /&gt;
    case 0xBB44FF00: Serial.println(&amp;quot;FAST BACK&amp;quot;);    break;&lt;br /&gt;
    case 0xBF40FF00: Serial.println(&amp;quot;PAUSE&amp;quot;);    break;&lt;br /&gt;
    case 0xBC43FF00: Serial.println(&amp;quot;FAST FORWARD&amp;quot;);   break;&lt;br /&gt;
    case 0xF807FF00: Serial.println(&amp;quot;DOWN&amp;quot;);    break;&lt;br /&gt;
    case 0xEA15FF00: Serial.println(&amp;quot;VOL-&amp;quot;);    break;&lt;br /&gt;
    case 0xF609FF00: Serial.println(&amp;quot;UP&amp;quot;);    break;&lt;br /&gt;
    case 0xE619FF00: Serial.println(&amp;quot;EQ&amp;quot;);    break;&lt;br /&gt;
    case 0xF20DFF00: Serial.println(&amp;quot;ST/REPT&amp;quot;);    break;&lt;br /&gt;
    case 0xE916FF00: Serial.println(&amp;quot;0&amp;quot;);    break;&lt;br /&gt;
    case 0xF30CFF00: Serial.println(&amp;quot;1&amp;quot;);    break;&lt;br /&gt;
    case 0xE718FF00: Serial.println(&amp;quot;2&amp;quot;);    break;&lt;br /&gt;
    case 0xA15EFF00: Serial.println(&amp;quot;3&amp;quot;);    break;&lt;br /&gt;
    case 0xF708FF00: Serial.println(&amp;quot;4&amp;quot;);    break;&lt;br /&gt;
    case 0xE31CFF00: Serial.println(&amp;quot;5&amp;quot;);    break;&lt;br /&gt;
    case 0xA55AFF00: Serial.println(&amp;quot;6&amp;quot;);    break;&lt;br /&gt;
    case 0xBD42FF00: Serial.println(&amp;quot;7&amp;quot;);    break;&lt;br /&gt;
    case 0xAD52FF00: Serial.println(&amp;quot;8&amp;quot;);    break;&lt;br /&gt;
    case 0xB54AFF00: Serial.println(&amp;quot;9&amp;quot;);    break;&lt;br /&gt;
    default:&lt;br /&gt;
      Serial.println(&amp;quot; other button   &amp;quot;);&lt;br /&gt;
  }// End Case&lt;br /&gt;
  //store the last decodedRawData&lt;br /&gt;
  last_decodedRawData = irrecv.decodedIRData.decodedRawData;&lt;br /&gt;
  delay(500); // Do not get immediate repeat&lt;br /&gt;
} //END translateIR&lt;br /&gt;
&lt;br /&gt;
void setup()   /*----( SETUP: RUNS ONCE )----*/&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  Serial.println(&amp;quot;IR Receiver Button Decode&amp;quot;);&lt;br /&gt;
  irrecv.enableIRIn(); // Start the receiver&lt;br /&gt;
&lt;br /&gt;
}/*--(end setup )---*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/&lt;br /&gt;
{&lt;br /&gt;
  if (irrecv.decode()) // have we received an IR signal?&lt;br /&gt;
  {&lt;br /&gt;
    translateIR();&lt;br /&gt;
    irrecv.resume(); // receive the next value&lt;br /&gt;
  }&lt;br /&gt;
}/* --(end main loop )-- */&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　いろいろなリモコンコードを取得するのは以下のコード&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;#define RAW_BUFFER_LENGTH 750&lt;br /&gt;
#include &amp;lt;IRremote.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const int IR_RECEIVE_PIN = 11;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
&lt;br /&gt;
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&amp;quot;IR Remote Analyzer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;TV / Recorder / Air Conditioner&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;Toshiba / Daikin signal investigation&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (IrReceiver.decode()) {&lt;br /&gt;
&lt;br /&gt;
    Serial.println();&lt;br /&gt;
    Serial.println(&amp;quot;============================&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // 受信バッファが足りなかった場合&lt;br /&gt;
    if (IrReceiver.decodedIRData.flags &amp;amp;&lt;br /&gt;
        IRDATA_FLAGS_WAS_OVERFLOW) {&lt;br /&gt;
      Serial.println(&amp;quot;WARNING: Buffer overflow!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ライブラリによるプロトコル解析&lt;br /&gt;
    IrReceiver.printIRResultShort(&amp;amp;Serial);&lt;br /&gt;
&lt;br /&gt;
    // 受信ビット数&lt;br /&gt;
    Serial.print(&amp;quot;Bits: &amp;quot;);&lt;br /&gt;
    Serial.println(IrReceiver.decodedIRData.numberOfBits);&lt;br /&gt;
&lt;br /&gt;
    // リピート判定&lt;br /&gt;
    if (IrReceiver.decodedIRData.flags &amp;amp;&lt;br /&gt;
        IRDATA_FLAGS_IS_REPEAT) {&lt;br /&gt;
      Serial.println(&amp;quot;Repeat signal&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 生のパルスデータ&lt;br /&gt;
    Serial.println(&amp;quot;--- Raw Timing ---&amp;quot;);&lt;br /&gt;
    IrReceiver.printIRResultRawFormatted(&amp;amp;Serial, true);&lt;br /&gt;
&lt;br /&gt;
    Serial.println(&amp;quot;============================&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    IrReceiver.resume();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ライブラリを使わないIR読み取りコードは以下のとおりです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;const byte IR_PIN = 2;&lt;br /&gt;
&lt;br /&gt;
// 許容するパルス幅（マイクロ秒）&lt;br /&gt;
const unsigned long TIMEOUT_US = 12000;&lt;br /&gt;
&lt;br /&gt;
// 指定したレベルが続いた時間を測定する&lt;br /&gt;
// タイムアウトした場合は0を返す&lt;br /&gt;
unsigned long measurePulse(byte level) {&lt;br /&gt;
  unsigned long start = micros();&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(IR_PIN) == level) {&lt;br /&gt;
    if (micros() - start &amp;gt; TIMEOUT_US) {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return micros() - start;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// NEC信号の読み取り&lt;br /&gt;
bool readNEC(uint32_t &amp;amp;data) {&lt;br /&gt;
  // リーダーMARK（約9000us）&lt;br /&gt;
  unsigned long mark = measurePulse(LOW);&lt;br /&gt;
  if (mark &amp;lt; 8000 || mark &amp;gt; 11000) return false;&lt;br /&gt;
&lt;br /&gt;
  // リーダーSPACE（約4500us）&lt;br /&gt;
  unsigned long space = measurePulse(HIGH);&lt;br /&gt;
  if (space &amp;lt; 3500 || space &amp;gt; 6000) return false;&lt;br /&gt;
&lt;br /&gt;
  data = 0;&lt;br /&gt;
&lt;br /&gt;
  // NECは32ビット、LSBから送信&lt;br /&gt;
  for (byte i = 0; i &amp;lt; 32; i++) {&lt;br /&gt;
&lt;br /&gt;
    // データMARK（約560us）&lt;br /&gt;
    mark = measurePulse(LOW);&lt;br /&gt;
    if (mark &amp;lt; 300 || mark &amp;gt; 900) return false;&lt;br /&gt;
&lt;br /&gt;
    // データSPACE&lt;br /&gt;
    space = measurePulse(HIGH);&lt;br /&gt;
&lt;br /&gt;
    if (space &amp;gt;= 300 &amp;amp;&amp;amp; space &amp;lt; 1000) {&lt;br /&gt;
      // ビット0&lt;br /&gt;
    }&lt;br /&gt;
    else if (space &amp;gt;= 1200 &amp;amp;&amp;amp; space &amp;lt; 2200) {&lt;br /&gt;
      // ビット1&lt;br /&gt;
      data |= (uint32_t)1 &amp;lt;&amp;lt; i;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 最後のMARK（約560us）&lt;br /&gt;
  mark = measurePulse(LOW);&lt;br /&gt;
  if (mark &amp;lt; 300 || mark &amp;gt; 900) return false;&lt;br /&gt;
&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(IR_PIN, INPUT);&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  Serial.println(&amp;quot;NEC Receiver Ready&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // 通常はHIGH、受信開始でLOWになる&lt;br /&gt;
  if (digitalRead(IR_PIN) == LOW) {&lt;br /&gt;
&lt;br /&gt;
    uint32_t rawData;&lt;br /&gt;
&lt;br /&gt;
    if (readNEC(rawData)) {&lt;br /&gt;
      Serial.print(&amp;quot;RAW: 0x&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      // 8桁の16進数で表示&lt;br /&gt;
      for (int i = 7; i &amp;gt;= 0; i--) {&lt;br /&gt;
        byte nibble = (rawData &amp;gt;&amp;gt; (i * 4)) &amp;amp; 0x0F;&lt;br /&gt;
        Serial.print(nibble, HEX);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      Serial.println();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もっと汎用的な生データを取得するコードはこうだな。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const byte IR_PIN = 11;&lt;br /&gt;
&lt;br /&gt;
// ========================================&lt;br /&gt;
// 設定&lt;br /&gt;
// ========================================&lt;br /&gt;
&lt;br /&gt;
// true : RAW波形を表示する&lt;br /&gt;
// false: 復号結果だけ表示する&lt;br /&gt;
const bool SHOW_RAW = true;&lt;br /&gt;
&lt;br /&gt;
// true : 0/1のビット列も表示する&lt;br /&gt;
const bool SHOW_BINARY = true;&lt;br /&gt;
&lt;br /&gt;
// true : 1バイトを下位ビットから受信&lt;br /&gt;
// false: 1バイトを上位ビットから受信&lt;br /&gt;
const bool LSB_FIRST = true;&lt;br /&gt;
&lt;br /&gt;
// 無信号150msで受信終了&lt;br /&gt;
const uint32_t END_GAP_US = 150000;&lt;br /&gt;
&lt;br /&gt;
// 無信号15ms以上でフレーム分割&lt;br /&gt;
const uint32_t FRAME_GAP_US = 15000;&lt;br /&gt;
&lt;br /&gt;
// 異常に長いMARKへの対策&lt;br /&gt;
const uint32_t MAX_MARK_US = 500000;&lt;br /&gt;
&lt;br /&gt;
// RAW記録の最大数&lt;br /&gt;
const uint16_t MAX_TIMINGS = 1100;&lt;br /&gt;
&lt;br /&gt;
// HEX復号の最大バイト数&lt;br /&gt;
const uint16_t MAX_BYTES = 80;&lt;br /&gt;
&lt;br /&gt;
// ビット判定が曖昧になる幅（us）&lt;br /&gt;
const uint32_t AMBIGUOUS_MARGIN_US = 100;&lt;br /&gt;
&lt;br /&gt;
// ========================================&lt;br /&gt;
// 記録用メモリ&lt;br /&gt;
// ========================================&lt;br /&gt;
&lt;br /&gt;
uint32_t timings[MAX_TIMINGS];&lt;br /&gt;
uint16_t timingCount = 0;&lt;br /&gt;
&lt;br /&gt;
uint8_t decodedBytes[MAX_BYTES];&lt;br /&gt;
&lt;br /&gt;
unsigned long operationCount = 0;&lt;br /&gt;
&lt;br /&gt;
// ========================================&lt;br /&gt;
// 16進数表示&lt;br /&gt;
// ========================================&lt;br /&gt;
&lt;br /&gt;
void printHexByte(uint8_t value) {&lt;br /&gt;
  if (value &amp;lt; 0x10) {&lt;br /&gt;
    Serial.print('0');&lt;br /&gt;
  }&lt;br /&gt;
  Serial.print(value, HEX);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ========================================&lt;br /&gt;
// 2進数表示&lt;br /&gt;
// ========================================&lt;br /&gt;
&lt;br /&gt;
void printBinaryByte(uint8_t value) {&lt;br /&gt;
  for (int8_t i = 7; i &amp;gt;= 0; i--) {&lt;br /&gt;
    Serial.print((value &amp;gt;&amp;gt; i) &amp;amp; 1);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ========================================&lt;br /&gt;
// RAW波形表示&lt;br /&gt;
// ========================================&lt;br /&gt;
&lt;br /&gt;
void printRaw(uint16_t startIndex,&lt;br /&gt;
              uint16_t endIndex) {&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  Serial.println(&amp;quot;--- RAW TIMING (us) ---&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  uint8_t column = 0;&lt;br /&gt;
&lt;br /&gt;
  for (uint16_t i = startIndex;&lt;br /&gt;
       i &amp;lt; endIndex; i++) {&lt;br /&gt;
&lt;br /&gt;
    // 奇数インデックスがSPACE&lt;br /&gt;
    // 偶数インデックスがMARK&lt;br /&gt;
    if ((i &amp;amp; 1) == 0) {&lt;br /&gt;
      Serial.print('+');&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.print('-');&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Serial.print(timings[i]);&lt;br /&gt;
    Serial.print(' ');&lt;br /&gt;
&lt;br /&gt;
    column++;&lt;br /&gt;
&lt;br /&gt;
    if (column &amp;gt;= 8) {&lt;br /&gt;
      Serial.println();&lt;br /&gt;
      column = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ========================================&lt;br /&gt;
// パルス距離方式の解析&lt;br /&gt;
// ========================================&lt;br /&gt;
&lt;br /&gt;
void decodeFrame(uint16_t startIndex,&lt;br /&gt;
                 uint16_t endIndex) {&lt;br /&gt;
&lt;br /&gt;
  uint16_t rawCount = endIndex - startIndex;&lt;br /&gt;
&lt;br /&gt;
  // 単独MARKの場合&lt;br /&gt;
  if (rawCount == 1) {&lt;br /&gt;
    Serial.println();&lt;br /&gt;
    Serial.println(&amp;quot;Single MARK / Preamble&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;MARK (us): &amp;quot;);&lt;br /&gt;
    Serial.println(timings[startIndex]);&lt;br /&gt;
&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 想定する構造：&lt;br /&gt;
  // Header MARK&lt;br /&gt;
  // Header SPACE&lt;br /&gt;
  // Data MARK + SPACE を繰り返す&lt;br /&gt;
  // Stop MARK&lt;br /&gt;
  if (rawCount &amp;lt; 5 ||&lt;br /&gt;
      (rawCount &amp;amp; 1) == 0) {&lt;br /&gt;
&lt;br /&gt;
    Serial.println();&lt;br /&gt;
    Serial.println(&amp;quot;Unknown frame structure.&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Use RAW timing data.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  uint16_t bitCount = (rawCount - 3) / 2;&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  Serial.println(&amp;quot;--- FRAME INFORMATION ---&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Candidate Bits: &amp;quot;);&lt;br /&gt;
  Serial.println(bitCount);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Header MARK (us): &amp;quot;);&lt;br /&gt;
  Serial.println(timings[startIndex]);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Header SPACE (us): &amp;quot;);&lt;br /&gt;
  Serial.println(timings[startIndex + 1]);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Stop MARK (us): &amp;quot;);&lt;br /&gt;
  Serial.println(timings[endIndex - 1]);&lt;br /&gt;
&lt;br /&gt;
  // ======================================&lt;br /&gt;
  // SPACEの最小値・最大値を調査&lt;br /&gt;
  // ======================================&lt;br /&gt;
&lt;br /&gt;
  uint32_t minSpace = 0xFFFFFFFFUL;&lt;br /&gt;
  uint32_t maxSpace = 0;&lt;br /&gt;
&lt;br /&gt;
  for (uint16_t i = 0; i &amp;lt; bitCount; i++) {&lt;br /&gt;
&lt;br /&gt;
    uint16_t spaceIndex =&lt;br /&gt;
        startIndex + 3 + i * 2;&lt;br /&gt;
&lt;br /&gt;
    uint32_t value = timings[spaceIndex];&lt;br /&gt;
&lt;br /&gt;
    if (value &amp;lt; minSpace) {&lt;br /&gt;
      minSpace = value;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (value &amp;gt; maxSpace) {&lt;br /&gt;
      maxSpace = value;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Data SPACE min (us): &amp;quot;);&lt;br /&gt;
  Serial.println(minSpace);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Data SPACE max (us): &amp;quot;);&lt;br /&gt;
  Serial.println(maxSpace);&lt;br /&gt;
&lt;br /&gt;
  // ======================================&lt;br /&gt;
  // パルス距離方式か簡易判定&lt;br /&gt;
  // ======================================&lt;br /&gt;
&lt;br /&gt;
  // 最大SPACEが最小SPACEの&lt;br /&gt;
  // 1.7倍未満なら2値判定を保留&lt;br /&gt;
  //&lt;br /&gt;
  // 単一種類のビットしか含まれない&lt;br /&gt;
  // フレームもここでは復号を保留する。&lt;br /&gt;
  if (maxSpace &amp;lt;= minSpace ||&lt;br /&gt;
      (uint64_t)maxSpace * 10 &amp;lt;&lt;br /&gt;
      (uint64_t)minSpace * 17) {&lt;br /&gt;
&lt;br /&gt;
    Serial.println();&lt;br /&gt;
    Serial.println(&lt;br /&gt;
        &amp;quot;Pulse-distance decode unavailable.&amp;quot;&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    Serial.println(&lt;br /&gt;
        &amp;quot;Insufficient SPACE separation.&amp;quot;&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    Serial.println(&lt;br /&gt;
        &amp;quot;RAW timing is still available.&amp;quot;&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // SPACEの中間値を判定基準にする&lt;br /&gt;
  uint32_t threshold =&lt;br /&gt;
      minSpace + (maxSpace - minSpace) / 2;&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Auto threshold (us): &amp;quot;);&lt;br /&gt;
  Serial.println(threshold);&lt;br /&gt;
&lt;br /&gt;
  // ======================================&lt;br /&gt;
  // ビット復号&lt;br /&gt;
  // ======================================&lt;br /&gt;
&lt;br /&gt;
  uint16_t ambiguousCount = 0;&lt;br /&gt;
&lt;br /&gt;
  uint16_t byteCount = (bitCount + 7) / 8;&lt;br /&gt;
&lt;br /&gt;
  if (byteCount &amp;gt; MAX_BYTES) {&lt;br /&gt;
&lt;br /&gt;
    Serial.println(&lt;br /&gt;
        &amp;quot;ERROR: Decode buffer too small.&amp;quot;&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 復号バッファを初期化&lt;br /&gt;
  for (uint16_t i = 0; i &amp;lt; byteCount; i++) {&lt;br /&gt;
    decodedBytes[i] = 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (SHOW_BINARY) {&lt;br /&gt;
    Serial.println();&lt;br /&gt;
    Serial.println(&amp;quot;--- BINARY DATA ---&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;(Transmission order)&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  for (uint16_t i = 0; i &amp;lt; bitCount; i++) {&lt;br /&gt;
&lt;br /&gt;
    uint16_t spaceIndex =&lt;br /&gt;
        startIndex + 3 + i * 2;&lt;br /&gt;
&lt;br /&gt;
    uint32_t space = timings[spaceIndex];&lt;br /&gt;
&lt;br /&gt;
    uint8_t bitValue =&lt;br /&gt;
        (space &amp;gt; threshold) ? 1 : 0;&lt;br /&gt;
&lt;br /&gt;
    // 判定しきい値に近いビットを数える&lt;br /&gt;
    uint32_t difference =&lt;br /&gt;
        (space &amp;gt; threshold)&lt;br /&gt;
        ? space - threshold&lt;br /&gt;
        : threshold - space;&lt;br /&gt;
&lt;br /&gt;
    if (difference &amp;lt;= AMBIGUOUS_MARGIN_US) {&lt;br /&gt;
      ambiguousCount++;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ====================================&lt;br /&gt;
    // バイトへ格納&lt;br /&gt;
    // ====================================&lt;br /&gt;
&lt;br /&gt;
    uint16_t byteIndex = i / 8;&lt;br /&gt;
    uint8_t bitPosition = i % 8;&lt;br /&gt;
&lt;br /&gt;
    if (!LSB_FIRST) {&lt;br /&gt;
      bitPosition = 7 - bitPosition;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (bitValue) {&lt;br /&gt;
      decodedBytes[byteIndex] |=&lt;br /&gt;
          (uint8_t)(1U &amp;lt;&amp;lt; bitPosition);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ====================================&lt;br /&gt;
    // 送信順にビットを表示&lt;br /&gt;
    // ====================================&lt;br /&gt;
&lt;br /&gt;
    if (SHOW_BINARY) {&lt;br /&gt;
&lt;br /&gt;
      Serial.print(bitValue);&lt;br /&gt;
&lt;br /&gt;
      if ((i + 1) % 8 == 0) {&lt;br /&gt;
        Serial.print(' ');&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      if ((i + 1) % 64 == 0) {&lt;br /&gt;
        Serial.println();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (SHOW_BINARY) {&lt;br /&gt;
    Serial.println();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ======================================&lt;br /&gt;
  // HEX DATA&lt;br /&gt;
  // ======================================&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  Serial.println(&amp;quot;--- HEX DATA ---&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  for (uint16_t i = 0; i &amp;lt; byteCount; i++) {&lt;br /&gt;
&lt;br /&gt;
    printHexByte(decodedBytes[i]);&lt;br /&gt;
    Serial.print(' ');&lt;br /&gt;
&lt;br /&gt;
    if ((i + 1) % 10 == 0) {&lt;br /&gt;
      Serial.println();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  // ======================================&lt;br /&gt;
  // BYTE TABLE&lt;br /&gt;
  // ======================================&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  Serial.println(&amp;quot;--- BYTE TABLE ---&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  for (uint16_t i = 0; i &amp;lt; byteCount; i++) {&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;Byte &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if (i + 1 &amp;lt; 10) {&lt;br /&gt;
      Serial.print('0');&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Serial.print(i + 1);&lt;br /&gt;
    Serial.print(&amp;quot;: 0x&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    printHexByte(decodedBytes[i]);&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;  BIN: &amp;quot;);&lt;br /&gt;
    printBinaryByte(decodedBytes[i]);&lt;br /&gt;
&lt;br /&gt;
    Serial.println();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 8ビット未満の端数&lt;br /&gt;
  uint8_t remainingBits = bitCount % 8;&lt;br /&gt;
&lt;br /&gt;
  if (remainingBits != 0) {&lt;br /&gt;
&lt;br /&gt;
    Serial.println();&lt;br /&gt;
    Serial.print(&amp;quot;Partial last byte: &amp;quot;);&lt;br /&gt;
    Serial.print(remainingBits);&lt;br /&gt;
    Serial.println(&amp;quot; valid bits&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    Serial.println(&lt;br /&gt;
        &amp;quot;Unused positions are padded with 0.&amp;quot;&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ======================================&lt;br /&gt;
  // 解析結果&lt;br /&gt;
  // ======================================&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  Serial.println(&amp;quot;--- DECODE STATUS ---&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&amp;quot;Method: PULSE DISTANCE&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Bit order: &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (LSB_FIRST) {&lt;br /&gt;
    Serial.println(&amp;quot;LSB FIRST&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;MSB FIRST&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Decoded bits: &amp;quot;);&lt;br /&gt;
  Serial.println(bitCount);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Decoded bytes: &amp;quot;);&lt;br /&gt;
  Serial.println(byteCount);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Ambiguous bits: &amp;quot;);&lt;br /&gt;
  Serial.println(ambiguousCount);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&lt;br /&gt;
      &amp;quot;Protocol/checksum not identified.&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ========================================&lt;br /&gt;
// 1フレームの表示&lt;br /&gt;
// ========================================&lt;br /&gt;
&lt;br /&gt;
void printFrame(uint16_t startIndex,&lt;br /&gt;
                uint16_t endIndex,&lt;br /&gt;
                unsigned int frameNo,&lt;br /&gt;
                uint32_t gapBefore) {&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  Serial.println(&amp;quot;============================&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Frame No: &amp;quot;);&lt;br /&gt;
  Serial.println(frameNo);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Gap before (us): &amp;quot;);&lt;br /&gt;
  Serial.println(gapBefore);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Raw Count: &amp;quot;);&lt;br /&gt;
  Serial.println(endIndex - startIndex);&lt;br /&gt;
&lt;br /&gt;
  // フレーム合計時間&lt;br /&gt;
  uint32_t total = 0;&lt;br /&gt;
&lt;br /&gt;
  for (uint16_t i = startIndex;&lt;br /&gt;
       i &amp;lt; endIndex; i++) {&lt;br /&gt;
    total += timings[i];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Sum (us): &amp;quot;);&lt;br /&gt;
  Serial.println(total);&lt;br /&gt;
&lt;br /&gt;
  // 生波形&lt;br /&gt;
  if (SHOW_RAW) {&lt;br /&gt;
    printRaw(startIndex, endIndex);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 復号&lt;br /&gt;
  decodeFrame(startIndex, endIndex);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ========================================&lt;br /&gt;
// 全フレームを表示&lt;br /&gt;
// ========================================&lt;br /&gt;
&lt;br /&gt;
void printAllFrames(bool overflow,&lt;br /&gt;
                    bool abnormalMark) {&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  Serial.println(&amp;quot;############################&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Operation No: &amp;quot;);&lt;br /&gt;
  Serial.println(operationCount);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Total timings: &amp;quot;);&lt;br /&gt;
  Serial.println(timingCount);&lt;br /&gt;
&lt;br /&gt;
  if (overflow) {&lt;br /&gt;
    Serial.println(&lt;br /&gt;
        &amp;quot;WARNING: BUFFER OVERFLOW!&amp;quot;&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (abnormalMark) {&lt;br /&gt;
    Serial.println(&lt;br /&gt;
        &amp;quot;WARNING: Abnormally long MARK!&amp;quot;&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  uint16_t frameStart = 0;&lt;br /&gt;
  uint32_t gapBefore = 0;&lt;br /&gt;
  unsigned int frameNo = 1;&lt;br /&gt;
&lt;br /&gt;
  for (uint16_t i = 0; i &amp;lt; timingCount; i++) {&lt;br /&gt;
&lt;br /&gt;
    // 偶数がMARK、奇数がSPACE&lt;br /&gt;
    // 15ms以上のSPACEで分割&lt;br /&gt;
    if ((i &amp;amp; 1) == 1 &amp;amp;&amp;amp;&lt;br /&gt;
        timings[i] &amp;gt;= FRAME_GAP_US) {&lt;br /&gt;
&lt;br /&gt;
      if (i &amp;gt; frameStart) {&lt;br /&gt;
&lt;br /&gt;
        printFrame(&lt;br /&gt;
            frameStart,&lt;br /&gt;
            i,&lt;br /&gt;
            frameNo,&lt;br /&gt;
            gapBefore&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        frameNo++;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      gapBefore = timings[i];&lt;br /&gt;
      frameStart = i + 1;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 最終フレーム&lt;br /&gt;
  if (frameStart &amp;lt; timingCount) {&lt;br /&gt;
&lt;br /&gt;
    printFrame(&lt;br /&gt;
        frameStart,&lt;br /&gt;
        timingCount,&lt;br /&gt;
        frameNo,&lt;br /&gt;
        gapBefore&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  Serial.println(&lt;br /&gt;
      &amp;quot;######## END OPERATION ########&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ========================================&lt;br /&gt;
// 初期化&lt;br /&gt;
// ========================================&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
&lt;br /&gt;
  pinMode(IR_PIN, INPUT);&lt;br /&gt;
&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&lt;br /&gt;
      &amp;quot;Universal IR Multi-Frame Analyzer&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&lt;br /&gt;
      &amp;quot;Generic RAW + HEX Decoder&amp;quot;&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&amp;quot;Arduino Mega2560&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;Ready&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ========================================&lt;br /&gt;
// メインループ&lt;br /&gt;
// ========================================&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  // 赤外線信号が来るまで待機&lt;br /&gt;
  if (digitalRead(IR_PIN) != LOW) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  operationCount++;&lt;br /&gt;
  timingCount = 0;&lt;br /&gt;
&lt;br /&gt;
  bool overflow = false;&lt;br /&gt;
  bool abnormalMark = false;&lt;br /&gt;
&lt;br /&gt;
  byte lastLevel = LOW;&lt;br /&gt;
  uint32_t lastChange = micros();&lt;br /&gt;
&lt;br /&gt;
  // 受信中はSerial出力しない&lt;br /&gt;
  while (true) {&lt;br /&gt;
&lt;br /&gt;
    byte level = digitalRead(IR_PIN);&lt;br /&gt;
    uint32_t now = micros();&lt;br /&gt;
    uint32_t duration = now - lastChange;&lt;br /&gt;
&lt;br /&gt;
    // 信号レベルが変化した&lt;br /&gt;
    if (level != lastLevel) {&lt;br /&gt;
&lt;br /&gt;
      if (timingCount &amp;lt; MAX_TIMINGS) {&lt;br /&gt;
&lt;br /&gt;
        timings[timingCount++] = duration;&lt;br /&gt;
&lt;br /&gt;
      } else {&lt;br /&gt;
&lt;br /&gt;
        overflow = true;&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      lastLevel = level;&lt;br /&gt;
      lastChange = now;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 150ms以上HIGHなら受信終了&lt;br /&gt;
    if (lastLevel == HIGH &amp;amp;&amp;amp;&lt;br /&gt;
        (uint32_t)(now - lastChange) &amp;gt;= END_GAP_US) {&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // LOWが異常に長い場合&lt;br /&gt;
    if (lastLevel == LOW &amp;amp;&amp;amp;&lt;br /&gt;
        (uint32_t)(now - lastChange) &amp;gt;= MAX_MARK_US) {&lt;br /&gt;
&lt;br /&gt;
      abnormalMark = true;&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 全データの受信が完了してから出力&lt;br /&gt;
  printAllFrames(overflow, abnormalMark);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%A9%E3%82%B8%E3%82%AA_%E5%A4%A7%E9%98%AA%E3%81%AEAM_FM%E6%94%BE%E9%80%81%E5%B1%80%E4%B8%80%E8%A6%A7&amp;diff=14208</id>
		<title>ラジオ 大阪のAM FM放送局一覧</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%A9%E3%82%B8%E3%82%AA_%E5%A4%A7%E9%98%AA%E3%81%AEAM_FM%E6%94%BE%E9%80%81%E5%B1%80%E4%B8%80%E8%A6%A7&amp;diff=14208"/>
		<updated>2026-10-22T14:50:24Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[ラジオ]]へ戻る。&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　大阪のAM FM放送局についてまとめる記事です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''AM''' ==&lt;br /&gt;
 周波数     放送局                送信出力&lt;br /&gt;
 558 kHz    ラジオ関西（兵庫）     20 kW&lt;br /&gt;
 666 kHz    NHKラジオ第1（大阪）  100 kW&lt;br /&gt;
 1008 kHz   ABCラジオ              50 kW&lt;br /&gt;
 1143 kHz   KBS京都                20 kW&lt;br /&gt;
 1179 kHz   MBSラジオ              50 kW&lt;br /&gt;
 1314 kHz   ラジオ大阪（OBC）      50 kW&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
== '''FM''' ==&lt;br /&gt;
 周波数     放送局                送信出力&lt;br /&gt;
 76.5 MHz   FM COCOLO              10 kW&lt;br /&gt;
 80.2 MHz   FM802                  10 kW&lt;br /&gt;
 85.1 MHz   FM大阪                 10 kW&lt;br /&gt;
 88.1 MHz   NHK-FM 大阪            10 kW&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
== '''ワイドFM''' ==&lt;br /&gt;
 周波数     放送局                送信出力&lt;br /&gt;
 90.6 MHz   MBSラジオ               7 kW&lt;br /&gt;
 91.9 MHz   ラジオ大阪（OBC）       7 kW&lt;br /&gt;
 93.3 MHz   ABCラジオ               7 kW&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[ラジオ]]へ戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%A9%E3%82%B8%E3%82%AA_%E5%A4%A7%E9%98%AA%E3%81%AEAM_FM%E6%94%BE%E9%80%81%E5%B1%80%E4%B8%80%E8%A6%A7&amp;diff=14207</id>
		<title>ラジオ 大阪のAM FM放送局一覧</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%A9%E3%82%B8%E3%82%AA_%E5%A4%A7%E9%98%AA%E3%81%AEAM_FM%E6%94%BE%E9%80%81%E5%B1%80%E4%B8%80%E8%A6%A7&amp;diff=14207"/>
		<updated>2026-10-22T14:49:44Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[ラジオ]]へ戻る。&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　大阪のAM FM放送局についてまとめる記事です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''AM''' ==&lt;br /&gt;
 周波数     放送局                送信出力&lt;br /&gt;
 558 kHz    ラジオ関西（兵庫）     20 kW&lt;br /&gt;
 666 kHz    NHKラジオ第1（大阪）  100 kW&lt;br /&gt;
 1008 kHz   ABCラジオ              50 kW&lt;br /&gt;
 1143 kHz   KBS京都                20 kW&lt;br /&gt;
 1179 kHz   MBSラジオ              50 kW&lt;br /&gt;
 1314 kHz   ラジオ大阪（OBC）      50 kW&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
== '''FM''' ==&lt;br /&gt;
 周波数     放送局                送信出力&lt;br /&gt;
 76.5 MHz   FM COCOLO              10 kW&lt;br /&gt;
 80.2 MHz   FM802                  10 kW&lt;br /&gt;
 85.1 MHz   FM大阪                 10 kW&lt;br /&gt;
 88.1 MHz   NHK-FM 大阪            10 kW&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
== '''ワイドFM''' ==&lt;br /&gt;
周波数      放送局                送信出力&lt;br /&gt;
90.6 MHz    MBSラジオ               7 kW&lt;br /&gt;
91.9 MHz    ラジオ大阪（OBC）       7 kW&lt;br /&gt;
93.3 MHz    ABCラジオ               7 kW&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[ラジオ]]へ戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%A9%E3%82%B8%E3%82%AA_%E5%A4%A7%E9%98%AA%E3%81%AEAM_FM%E6%94%BE%E9%80%81%E5%B1%80%E4%B8%80%E8%A6%A7&amp;diff=14206</id>
		<title>ラジオ 大阪のAM FM放送局一覧</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%A9%E3%82%B8%E3%82%AA_%E5%A4%A7%E9%98%AA%E3%81%AEAM_FM%E6%94%BE%E9%80%81%E5%B1%80%E4%B8%80%E8%A6%A7&amp;diff=14206"/>
		<updated>2026-10-22T14:46:56Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: ページの作成:「ラジオへ戻る。 == '''概要''' == 　大阪のAM FM放送局についてまとめる記事です。   == '''AM''' ==  周波数     放送局                送信出力  558 kHz    ラジオ関西（兵庫）     20 kW  666 kHz    NHKラジオ第1（大阪）  100 kW  1008 kHz   ABCラジオ              50 kW  1143 kHz   KBS京都                20 kW  1179 kHz   MBSラジオ              50 kW  1314 kHz   ラジオ大阪（OBC）      50 kW  == '''FM''…」&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[ラジオ]]へ戻る。&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　大阪のAM FM放送局についてまとめる記事です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''AM''' ==&lt;br /&gt;
 周波数     放送局                送信出力&lt;br /&gt;
 558 kHz    ラジオ関西（兵庫）     20 kW&lt;br /&gt;
 666 kHz    NHKラジオ第1（大阪）  100 kW&lt;br /&gt;
 1008 kHz   ABCラジオ              50 kW&lt;br /&gt;
 1143 kHz   KBS京都                20 kW&lt;br /&gt;
 1179 kHz   MBSラジオ              50 kW&lt;br /&gt;
 1314 kHz   ラジオ大阪（OBC）      50 kW&lt;br /&gt;
&lt;br /&gt;
== '''FM''' ==&lt;br /&gt;
 周波数     放送局                送信出力&lt;br /&gt;
 76.5 MHz   FM COCOLO              10 kW&lt;br /&gt;
 80.2 MHz   FM802                  10 kW&lt;br /&gt;
 85.1 MHz   FM大阪                 10 kW&lt;br /&gt;
 88.1 MHz   NHK-FM 大阪            10 kW&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[ラジオ]]へ戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%A9%E3%82%B8%E3%82%AA&amp;diff=14205</id>
		<title>ラジオ</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%A9%E3%82%B8%E3%82%AA&amp;diff=14205"/>
		<updated>2026-10-22T14:39:34Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[メインページ#メディア]]へ戻る。&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　ラジオはAM(Amplitude Modulation:振幅変調)とFM(Frequency Modulation:周波数変調)とがあります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:AM FMの違い.svg|380px||none|AMとFM]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
日本の放送周波数	531～1602kHz	76～95MHz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　AM放送は廃止になっていく動きがあり、90MHz帯のワイドFMというあたりに移行しているところです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ラジオ 大阪のAM FM放送局一覧]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[メインページ#メディア]]へ戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%A9%E3%82%B8%E3%82%AA&amp;diff=14204</id>
		<title>ラジオ</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%A9%E3%82%B8%E3%82%AA&amp;diff=14204"/>
		<updated>2026-10-22T14:33:22Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: ページの作成:「メインページ#メディアへ戻る。 == '''概要''' == 　ラジオはAM(Amplitude Modulation:振幅変調)とFM(Frequency Modulation:周波数変調)とがあります。   AMとFM   メインページ#メディアへ戻る。」&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[メインページ#メディア]]へ戻る。&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　ラジオはAM(Amplitude Modulation:振幅変調)とFM(Frequency Modulation:周波数変調)とがあります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:AM FMの違い.svg|380px||none|AMとFM]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[メインページ#メディア]]へ戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:AM_FM%E3%81%AE%E9%81%95%E3%81%84.svg&amp;diff=14203</id>
		<title>ファイル:AM FMの違い.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:AM_FM%E3%81%AE%E9%81%95%E3%81%84.svg&amp;diff=14203"/>
		<updated>2026-10-22T14:31:18Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8&amp;diff=14202</id>
		<title>メインページ</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8&amp;diff=14202"/>
		<updated>2026-10-22T14:16:35Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: /* メディア */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''案内''' ==&lt;br /&gt;
 ようこそ。ここは一方通行の情報発信基地です。双方向はありません。ここの管理人とやりとりしたい場合は、トップのプロフィールの一番下にhotmailのアドレスが記載されていますので、そちらからメールを送ってみてください。全然使ってないので、メール確認することはほとんどありませんが、極まれに確認してますので、興味がわくような内容であれば、そのうち返事があるでしょう。信憑性のあるハニートラップなんかには、ホイホイ出向いて、被害に合うことでしょう。それ以外はSNSで売れっ子芸能人と双方向するよりも双方向の可能性は低いです。各外部サイトから、このサイトへの参照リンクは自由に貼ってください。許可確認は不要です。今のところ、あまり需要はないみたいなので、自由にって言われても困るでしょうけど。反社会的勢力のサイトからのリンクはお断りしています。社会・情報社会の迷惑になるようなサイトからのリンクはやめて下さい。また、記事のまるまる転載はご遠慮下さい。参考にして大幅に編集した独自記事を作っていただくのは良いと思います。&lt;br /&gt;
*[http://www.yo-net.jp/ よねっとろ～るxx トップページ]&lt;br /&gt;
:上記がトップページですが、最近はココばっかり更新しています。CMS(Contents Management System)としてのUI(User Interface)が優れているのが起因していると思います。&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
:*CMS:このwikiのようなコンテンツを更新するための管理機能を有するもので、入力フォームを利用して対話形式でWebを更新していけるシステムです。また、連動して複数のページを更新しなければならない手間についても、ある一定の解決策を提供するような試みも盛り込まれています。&lt;br /&gt;
:*UI:ユーザインタフェースは、情報機器のUIの場合、情報機器を使う人と情報機器の'''境'''をつなぐモノです。入力画面の構成や仕組み。あるいはキーボードの形や押しやすさもユーザインタフェースの一部にあたります。&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
*[http://www.yo-net.jp/blog/ よねろぐ]&lt;br /&gt;
:管理人ブログその1です。公開日記みたいな感じです。本来のblogの体はなしていないです。あしからず。個人的な非公開日記はスマートフォンのプリインストールアプリの瞬間日記 for auでつけてます。公開する日記の意味。それは誰かの心に響くことがあったらいいなっていうそういう思いがある出来事なのです。誰かの役に立つ情報かもとか、そんなことです。あと、ココを含めて、全体的にあんまりおもしろくないけど、本気出したら、笑い死ぬんで、本気出してないだけ、本気出して面白いこと書き出したらマジやばいんだからな！な…マジで…笑い死ぬを食い止めるためのコントロールが難しい。つまんないのは管理人の優しさ。&lt;br /&gt;
*[http://www.yo-net.jp/devlog/ Devlog]&lt;br /&gt;
:管理人ブログその2です。公開プログラム活動日誌みたいな感じです。コチラも本来のblogの体はなしていないです。あしからず。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
== '''目次''' ==&lt;br /&gt;
　一時期は1日1万ページビューを超えていましたが、httpsへの切り替えや/yonewikiのwikiシステムが完全停止するなどのトラブルによりwiki.yo-net.jpへ移行し1.32にしてからはgoogleのランキングがかなり低下したり、インデックスされにくくなって、1日10ページビューまで失速。280万くらいのページビューがあったアクセスカウンターも一旦リセットしてやり直しています。2026年3月時点では1日5000ページビューくらいまでに戻ってきたかな。2026年2月時点:426万PV。2026年3月末時点:469万PV。2026年8月末時点:633万PV。ユニークホストは一日1000ユニークくらいってことになってます。役に立つ情報発信を目指します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
※ □の項目は未完成の記事です。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''言語と開発環境'''===&lt;br /&gt;
　'''太字'''の項目は言語リファレンス、詳細な利用方法に関する記事が存在する記事を示しています。作成途中ですが(汗 というか、全分野において、包括的に完成させた記事はありません。掘り下げ切った記事はあるものの。力不足だな。そう考えると参考書とか出稿している人達はすごいよね。全体を網羅して言及してるもんね。&lt;br /&gt;
&lt;br /&gt;
*'''ソフトウェア配布'''&lt;br /&gt;
サポートX&lt;br /&gt;
[https://x.com/yonetechstudio2 https://x.com/yonetechstudio2]&lt;br /&gt;
:●'''楽譜テンプレート作成ツール・楽譜レイアウト生成エンジン STMK''' &lt;br /&gt;
:*'''[[STMK_ScoreTemplateMaker(ja)]]''' 無料版と有料版154円～の2種類を配布&lt;br /&gt;
:●'''フォント構造を簡単に見ることができるツール FTCK''' &lt;br /&gt;
:*'''[[FTCK_FontStructChecker(ja)]]''' 無料版と有料版154円の2種類を配布&lt;br /&gt;
:●'''クリップボードのコードを対話生成AI自動伝達するツール CLIP''' &lt;br /&gt;
:*'''[[CLIP_Clip_Conv(ja)]]''' 154円&lt;br /&gt;
:*'''[[CLIP_Clip_Conv(en)]]''' 154JPY&lt;br /&gt;
:●'''IK Multimedia Sounds Library 自動ダウロードツール IKDL''' &lt;br /&gt;
:*'''[[IKDL IK_SoundLibAutoDL(ja)]]''' 154円&lt;br /&gt;
:*'''[[IKDL IK_SoundLibAutoDL(en)]]''' 154JPY&lt;br /&gt;
:●'''エッジ/クローム自動制御ドライバ更新ツール'''&lt;br /&gt;
:*'''[[vba_browser_driver_updater(ja)]]''' 無料&lt;br /&gt;
:*'''[[vba_browser_driver_updater(en)]]''' Free&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''[[VC PlusPlus|VC++]]'''&lt;br /&gt;
:*'''[[VC PlusPlus UTF-8によるプログラミングを推進するための大切な設定]]'''&lt;br /&gt;
*'''[[C PlusPlus|C++]]''' ('''C++''') C++入門的な説明書を作成。&lt;br /&gt;
:*'''[[C PlusPlus#Cリファレンス|Cリファレンス]]'''&lt;br /&gt;
:*'''[[C PlusPlus#C++リファレンス|C++リファレンス]]'''&lt;br /&gt;
:　'''文字列操作'''の記事は'''10万'''アクセスを突破する珍しい記事になっているようです。&lt;br /&gt;
:　われながらよく頑張って書いたと思う。&lt;br /&gt;
:*[[Win32/64 アプリケーション開発]]&lt;br /&gt;
:*[[深層学習]]ディープラーニング　機械学習&lt;br /&gt;
:*[[2次元画像処理]]&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[3次元画像処理]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[音声信号処理]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:*[[Win32/64 ネットワーク処理開発]]&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[各種ユーザインターフェイス]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:*ライブラリの導入作業記録&lt;br /&gt;
::*'''[[Boost.Regex ライブラリの導入]]'''&lt;br /&gt;
::*'''[[Microsoft GSL(Guidelines Support Library) ライブラリの導入]]'''&lt;br /&gt;
::*'''[[ライブラリ*.libから関数名を抽出する]]'''&lt;br /&gt;
:*ライブラリの使用方法&lt;br /&gt;
::*&amp;lt;nowiki&amp;gt;[[Boost.Regex 利用方法]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:*オープンソースをとにかくビルドしてみる&lt;br /&gt;
:想像もつかない大きなプロジェクトをビルドするだけで実用性の高いプログラムの構成の仕方が理解出来る。改造とかコードリーディングをしないときでもやってみるとスキルアップするよ。&lt;br /&gt;
::*'''[[オープンソースのビルド zlib]]'''&lt;br /&gt;
::*'''[[オープンソースのビルド libzip]]'''&lt;br /&gt;
::*'''[[オープンソースのビルド ffftp]]'''&lt;br /&gt;
::*'''[[オープンソースのビルド MuseScore]]'''&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[STL]]&amp;lt;/nowiki&amp;gt; C++ Standard Template Liblary&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[C++/CLI]]&amp;lt;/nowiki&amp;gt; .NetFrameworksに準拠したアプリ開発のためのC++拡張言語&lt;br /&gt;
*[[C PlusPlus/CX]] (C++/CX)Windows8以降のストアアプリ向けWindows Runtime用のC++拡張言語&lt;br /&gt;
*[[Windows]]&lt;br /&gt;
:*[[AutoHotKey]]&lt;br /&gt;
:*[[Intel Architecture プログラミング]] Visual C++やGCCコンパイラで対応していインテル命令言語の使い方&lt;br /&gt;
:*[[W32 W64プログラミング]] Windowプログラミング基礎&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[API]]&amp;lt;/nowiki&amp;gt; Application Programing Interface&lt;br /&gt;
::*[[Wintab API]] ペンデバイス産業のシェア独占に近いwacomも使っている技術&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[MFC]]&amp;lt;/nowiki&amp;gt; Microsoft Foundation Class マイクロソフト製 Classライブラリ&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[ATL]]&amp;lt;/nowiki&amp;gt; Active Template Liblary マイクロソフト製 STL&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[DotNetFramework]]&amp;lt;/nowiki&amp;gt; JAVA VMのWindows版みたいな感じ。Windowsのバージョンの垣根を繋ぐので、Windows以外に搭載されたのはみたことは無いです。&lt;br /&gt;
:*[[Universal Windows Platform]] WPF→UWP Windows10をはじめとする、ありとあらゆる生みの親… &lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[Command Prompt]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:*[[Windows PowerShell]]&lt;br /&gt;
::*[[bat バッチ処理]] Jscript 5.8まで Javascript1.5系の技術まで利用可能。&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[OpenCL]]&amp;lt;/nowiki&amp;gt;GPCPU利用のためのライブラリ C++言語対応&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[OpenCV]]&amp;lt;/nowiki&amp;gt; OpenCLを包括するGPCPU利用のためのライブラリ C++言語対応&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[OpenGL]]&amp;lt;/nowiki&amp;gt; GPCPU利用のためのライブラリ C++言語対応&lt;br /&gt;
::*&amp;lt;nowiki&amp;gt;[[OpenGL ES]]&amp;lt;/nowiki&amp;gt;GPCPU利用のためのライブラリ モバイルプラットフォーム向け C++言語対応&lt;br /&gt;
::*[[WebGL]] openGL ESのWebプラットフォーム向け 主にJava言語&lt;br /&gt;
:*[[Windows Driver Model]] WDM:Windows外部機器および周辺機器のドライバ開発&lt;br /&gt;
:*[[フォント]]&lt;br /&gt;
::*'''[[フォント TrueType 構造解析]]'''&lt;br /&gt;
::*'''[[フォント OpenType 構造解析]]'''&lt;br /&gt;
::*'''[[フォント METAFONT]]'''&lt;br /&gt;
::*[[フォント Font Forge]]&lt;br /&gt;
:*'''[[PDF 内部構造]]'''&lt;br /&gt;
:*[[Qt]] キュート GUIライブラリ 個人的に使う分には無償ですが、商用利用は有償の凄いライブラリです。&lt;br /&gt;
:　これくらいの規模のライブラリを自分で作るのは難しいでしょうけど、まずは勉強にもなりますし、&lt;br /&gt;
:　オープンソースをうまく利用するのも大事だと思います。表エディタ形式のGUIとかは、こういうので勉強しないと&lt;br /&gt;
:　素人には無理ですね。Excelとコピペもしたいし。&lt;br /&gt;
*[[Perl]]&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[PHP]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*'''[[Python]]'''&lt;br /&gt;
:*[[Pythonista3]] iOS用の開発環境です。Pythonista3が記事作成時点での最新版で価格は1200円です。&lt;br /&gt;
*[[KOMODO IDE4.4]]&lt;br /&gt;
*'''[[VBA]]'''&lt;br /&gt;
*[[HTML5]]&lt;br /&gt;
*'''[[JAVA Script]]''' 入門的な記事を作成中。&lt;br /&gt;
:*'''[[JavaScript 正規表現]]'''&lt;br /&gt;
:*[[Node.js]]&lt;br /&gt;
:*[[Vue.js]]&lt;br /&gt;
:'''オーディオ埋め込み'''&lt;br /&gt;
:*[[audio.js]] HTML5ベース音声ファイル埋め込み再生&lt;br /&gt;
:'''ビデオ埋め込み'''&lt;br /&gt;
:*[[Plyr.js]] HTML5ベース動画ファイル埋め込み再生&lt;br /&gt;
*[[GitBook]]&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[Android App]]&amp;lt;/nowiki&amp;gt;Google Playにアプリを登録する場合は、ディベロッパーアカウント作成が必要で初回のみの$25(3000円くらい)が必要。&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[iOS App]]&amp;lt;/nowiki&amp;gt; アプリ配信アカウント作成には初回のみの1847円が必要です。&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[MySQL]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*[[MongoDB]]&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[PostgreSQL]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*[[CSS]]&lt;br /&gt;
:*[[CSSフレームワーク]] [https://getbootstrap.com/　Bootstrap]/[https://semantic-ui.com/ Semantic UI]/[https://bulma.io/ Bulma]/[https://materializecss.com/ Materialize]/[https://tailwindcss.com/ TailwindCSS]&lt;br /&gt;
*'''[[VexFlow]]''' 楽譜描画言語&lt;br /&gt;
*'''[[MathJax]]''' 数式描画言語&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[R]]&amp;lt;/nowiki&amp;gt; 統計処理システム&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[Maxima]]&amp;lt;/nowiki&amp;gt; コンピュータアルジェブラシステム(コンピュータによる数式処理システム)&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[Mathmetical]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*[[VirtualBox]] Oracle VM 仮想端末ってやつです。Windowsの中でLinux使うみたいなこと。&lt;br /&gt;
:*[[Vagrant]] ベイグラント VirtualBoxのスナップショットが作れます。OSの設定状態そのものを保管・配布&lt;br /&gt;
:'''*[[Ubuntu]]''' Linuxの仲間です。&lt;br /&gt;
:*[[jupyter notebook]] ipython notebookが新しくなったものです。&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[ソーシャルデータ]]&amp;lt;/nowiki&amp;gt; Twitter/Instagram/Facebook/Google+/LinkedInのデータを活用するいわゆるビッグデータ利用の技術。&lt;br /&gt;
*'''&amp;lt;nowiki&amp;gt;[[プラグイン開発]]&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
:*[[プラグイン VST]] DAW向け VSTe VSTi&lt;br /&gt;
:*'''&amp;lt;nowiki&amp;gt;[[プラグイン Adobe]]&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
::*PhotoShop/illustrater&lt;br /&gt;
:*'''画像編集ツール'''&lt;br /&gt;
::*&amp;lt;nowiki&amp;gt;[[プラグイン ClipStudioPaint]]&amp;lt;/nowiki&amp;gt; 画像フィルターや編集&lt;br /&gt;
::*&amp;lt;nowiki&amp;gt;[[プラグイン AviUtl]]&amp;lt;/nowiki&amp;gt; 動画・画像・音声用フィルターや編集。&lt;br /&gt;
:*'''3Dモデリングツール'''&lt;br /&gt;
::*&amp;lt;nowiki&amp;gt;[[プラグイン Lightwave]]&amp;lt;/nowiki&amp;gt;　&lt;br /&gt;
::*&amp;lt;nowiki&amp;gt;[[プラグイン Metasequoia]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
::*&amp;lt;nowiki&amp;gt;[[プラグイン Shade]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''電子回路工学'''===&lt;br /&gt;
*'''[[Arduino Mega 2560]]''' ELEGOOが提供しているスターターキットでの実験体験記事です。&lt;br /&gt;
*'''[[KiCad]]''' 基盤発注する時に使うガーバーファイル一式を生成できるツールです。&lt;br /&gt;
*'''[[LTspice]]''' AnalogDevicesが提供している無料の電子回路シミュレータです。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''情報処理技術者試験'''===&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[基本情報処理技術者]] FE&amp;lt;/nowiki&amp;gt; 管理人は試験に合格しています。いぇい！&lt;br /&gt;
*'''[[応用情報処理技術者]]''' AP 挑戦中です。合格しても継続して勉強して深く理解しておきたいかなと思っています。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''パソコン'''===&lt;br /&gt;
*'''[[TMPGEnc WMV→DivX Avi変換手順]]'''&lt;br /&gt;
*[[Lame コーデックインストール手順 for Windows7]]&lt;br /&gt;
*■[[⧅ffmpeg]] 動画音声ファイル編集機能&lt;br /&gt;
:*'''[[⧅ffmpeg DivX HomeTheater形式の生成]]''' DivX HomeTheater対応機器で再生&lt;br /&gt;
:*'''[[⧅ffmpeg DivX HomeTheater形式の生成 2#ssa形式の字幕を作る|Subtitle Editによる動画字幕ファイル.ssaの生成]]'''&lt;br /&gt;
:*[[⧅ffmpeg 5.1ch形式の生成]] 6つのwaveファイルから作れます。&lt;br /&gt;
:*[[⧅ffmpeg DVDから抽出したVOBファイルをmp4に変換する]]&lt;br /&gt;
:*[[⧅ffmpeg AVCHD形式のmtsに変換する]]&lt;br /&gt;
*[[Avidemux]]&lt;br /&gt;
:*'''[[⧅ffmpeg DivX HomeTheater形式の生成 2#字幕をつける|Avidemux 動画に字幕をつける]]''' ssaファイルを活用する&lt;br /&gt;
*[[AviUtl]]&lt;br /&gt;
:*'''[[AviUtl 動画に凝った字幕をつける]]''' ssaファイルを使わない手法&lt;br /&gt;
*[[Daemon Tools Lite]]&lt;br /&gt;
*'''[[Windows10]]'''&lt;br /&gt;
*'''[[Windows11]]'''&lt;br /&gt;
:*[[Windowsレジストリ]]&lt;br /&gt;
:*[[Windowsネットワーク]]&lt;br /&gt;
:*[[Edge]]&lt;br /&gt;
::*[[Edge ChatGPTのチャットウィンドウでスクロールバーが表示されない]]&lt;br /&gt;
::*[[日本語IME 日本語が入力できなくなる現象が起きるときの対策方法]]&lt;br /&gt;
:*[[MeiryoKe_Console]]&lt;br /&gt;
*[[Unicode]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''基本アプリケーション'''===&lt;br /&gt;
*[[Excel]]&lt;br /&gt;
*[[Word]]&lt;br /&gt;
:*'''[[小説制作]]'''&lt;br /&gt;
*[[TeraPad]]&lt;br /&gt;
*[[Windows11 メモ帳]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''Web技術'''===&lt;br /&gt;
*'''[[Google Search Console]]'''&lt;br /&gt;
*[[MediaWiki]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''Adobe'''===&lt;br /&gt;
*[[Adobe Master Collection CS6]]&lt;br /&gt;
:[[ファイル:Icon AfterEffect.png|20px]] 動画効果編集ツール&lt;br /&gt;
*[[Adobe After Effects CS6]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:[[ファイル:Icon_Animate MobileDevicePackaging.png|20px]] swf mpg アニメーション・動画作成ツール&lt;br /&gt;
*[[Adobe Flash Professional CC]]&lt;br /&gt;
:[[ファイル:Icon_FlashProfessional MobileDevicePackaging.png|20px]] swf形式動画作成ツール ※ Adobe Animateに名称が変わりました。&lt;br /&gt;
*[[Adobe Premiere Pro CC]]&lt;br /&gt;
:[[ファイル:Icon_PremeirePro.png|20px]] ビデオ制作・編集&amp;lt;br /&amp;gt;&lt;br /&gt;
*[[Adobe Media Encoer CC]]&lt;br /&gt;
:[[ファイル:Icon_MediaEncoder.png|20px]] 様々な形式に対応するメディアエンコーダ&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''Macromedia'''===&lt;br /&gt;
*[[Macromedia FLASH 8]]&lt;br /&gt;
&amp;lt;span style = &amp;quot;background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; &amp;quot;&amp;gt;強調表示は雑誌に掲載された映像作品です。&amp;lt;/span&amp;gt;&lt;br /&gt;
:*[[Macromedia FLASH ＊50レス目のネタでFLASHを作れ お題「車だって」]]&lt;br /&gt;
:*[[Macromedia FLASH ＊50レス目のネタでFLASHを作れ お題「凄絶(せいぜつ)」]]&lt;br /&gt;
:*&amp;lt;span style = &amp;quot;background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; &amp;quot;&amp;gt;[[Macromedia FLASH ＊50レス目のネタでFLASHを作れ お題「怖いよな」]]&amp;lt;/span&amp;gt;&lt;br /&gt;
:*[[Macromedia FLASH ＊50レス目のネタでFLASHを作れ お題「足つぼ」]]&lt;br /&gt;
:*&amp;lt;span style = &amp;quot;background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; &amp;quot;&amp;gt;[[Macromedia FLASH num1000Remix～It's all yours.～テーマ「1000はまり＋おまけ」]]&amp;lt;/span&amp;gt;&lt;br /&gt;
:*[[Macromedia FLASH ゴールドX不具合発覚事件]]&lt;br /&gt;
:*[[Macromedia FLASH 阪神優勝記念FLASH2003]]&lt;br /&gt;
:*[[Macromedia FLASH (ﾟдﾟ)ｳﾏｰなアニメ展覧会作品 特殊部隊「白風」 Chapter2-戦いの火蓋-]]&lt;br /&gt;
:*Macromedia FLASH 第2回紅白FLASH合戦作品「Present of a dictionary」は原作が手元にありません。&lt;br /&gt;
:*[[Macromedia FLASH 阪神優勝記念FLASH2005]]&lt;br /&gt;
:*[[Macromedia FLASH 夕波亜津子の深呼吸]]&lt;br /&gt;
:*&amp;lt;span style = &amp;quot;background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; &amp;quot;&amp;gt;[[Macromedia FLASH 第3回紅白FLASH合戦作品「なにかとうまくいく」]]&amp;lt;/span&amp;gt;&lt;br /&gt;
*[[Macromedia DreamWeaver 8]]&lt;br /&gt;
*[[Macromedia FireWorks 8]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''Electric rain'''===&lt;br /&gt;
*[[Swift 3D]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''New Tek　D-STORM'''===&lt;br /&gt;
*[[Lightwave3D]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''セルシス 創作活動応援サイト CLIP'''===&lt;br /&gt;
*[[Clip Studio]]&lt;br /&gt;
*'''[[Clip Studio Paint EX]]'''&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''&amp;lt;span style=&amp;quot;color: blue;!impotant;&amp;quot;&amp;gt;最近、買って良かった！というモノ&amp;lt;/span&amp;gt;'''===&lt;br /&gt;
&lt;br /&gt;
'''【道具】'''&lt;br /&gt;
&lt;br /&gt;
*[[自撮り棒 iphone Android 対応 bluetooth 無線 シャッターボタン付き スマホ セルカ棒 三脚付き 小型]] [https://amzn.to/3RoWAGd 商品リンク]&lt;br /&gt;
*[[2022新版【MFi正規認証品】iPhone イヤホン 変換 アダプタ 充電 2in1]] [https://amzn.to/3Ho7qI7 商品リンク]&lt;br /&gt;
*■[[BLUECRAFT メモリーカード ケース SDカードケース microSD ホルダー アルミ スリム 静電対応 (両面 18枚収納【 SD6枚 + microSD12枚 】, レッド)]] [https://amzn.to/3DscZEo 商品リンク]&lt;br /&gt;
*[[ORICO USBハブ 超小型 3ポート コンパクト 直付 USB3.0＋USB2.0コンボハブ バスパワー MINI-U32-BK]]  [https://amzn.to/3WUj0jO 商品リンク]&lt;br /&gt;
*■[[(L型/L字変換プラグ) φ3.5mm ステレオミニプラグ L型/L字変換コネクター/PLG-N6207GD]] [https://amzn.to/3RjKizb 商品リンク]&lt;br /&gt;
*[[Wuernine L型エレキギターケーブルアダプタ モノラル標準フォンジャック-モノラル標準フｫンプラグ 1個]]  [https://amzn.to/3HlZFSV 商品リンク]&lt;br /&gt;
*[[Amazonベーシック ステレオオーディオ延長ケーブル 3.5mm×3.7m]] [https://amzn.to/3HpQkcJ 商品リンク]&lt;br /&gt;
*■[[Amazonベーシック USB3.0延長ケーブル 3.0m (タイプAオス - タイプAメス)]] [https://amzn.to/3HK1HO6 商品リンク]&lt;br /&gt;
*■[[アテックス(ATEX) 指圧器 ルルド グリグリ ブラック ATX-2030bk]] [https://amzn.to/3JuIjpA 商品リンク]&lt;br /&gt;
*[[Cable Matters USB Type C Micro B 変換ケーブル 1m USB Type C Microusb 変換ケーブル USB C Micro B 変換ケーブル USB 2.0 Micro B 5ピン 480Mbps Android対応 充電可能 ブラック]] [https://amzn.to/3XPO1H0 商品リンク]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[ロジテック HDDスタンド 2ベイ デュプリケーター HDD SSD対応 USB3.0 データバックアップ/消去ソフト無償ダウンロード可能 LGB-2BDPU3ES]] [https://amzn.to/3XVjxmX 商品リンク]&lt;br /&gt;
*[[WD Blue（SMR）内蔵ハードディスク 4TB HDD 3.5インチ ロジテックの保証・無償ダウンロード可能なソフト付 ウエデジ LHD-WD40EZAZ]] [https://amzn.to/3Y504A2 商品リンク]&lt;br /&gt;
*[[Owon OW18B Bluetooth Digital Multimeter True RMS Electronic Test Lead TLP20157]] [https://amzn.to/3HKrBl0 商品リンク]&lt;br /&gt;
*[[ELEGOO Arduino用のMega2560スタータキット最終版 初心者向け、チュートリアル付、MEGA 2560ボード, LCD1602]] [https://amzn.to/3RkKSwz 商品リンク]&lt;br /&gt;
*[[【41点セット】端子除去ツール カプラー コネクター 配線 端子 外し 抜き自動ターミナル 工具 取り外しキーツール ピン抜き ワイヤーハーネス 自動ターミナル取り外し]] [https://amzn.to/40imW0R 商品リンク]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''【USB充電機器】'''&lt;br /&gt;
&lt;br /&gt;
*[[エレコム USB 充電器 ACアダプター EC-ACD01WH]] ELECOM 60W USB TypeA 3portx2group 各port最大2.4A 1groupあたり最大6A 電源ケーブル PSE認証済 1.5ｍ ホワイト 100Vコンセント&amp;amp;lt;-&amp;amp;gt;USBTypeAメスx6port給電機&lt;br /&gt;
*[[ANE バッテリー充電器 ANE-USB-05]] 3.7V 3.8V 600mA 7.0-7.4V 400mA-800mA 端子間3mm～46mm バッテリサイズ24mm～56mm対応 (電圧/+-)自動認識&lt;br /&gt;
*[[Syncwire TypeAオス-TypeBmicro USBケーブル2m]] 2.4A給電対応 2本組 USBケーブル&lt;br /&gt;
*[[BUFFALO USB充電器 2.4A急速 USB BSMPA2402P1BK]] 100Vコンセント&amp;amp;lt;-&amp;amp;gt;USB TypeAメスx1port 給電器&lt;br /&gt;
*■[[エレコム USB コンセント 充電器 68W ( USB PD対応 ) Type-C×1 / USB-A×1 スイングプラグ ホワイト EC-YAC06WH]] [https://amzn.to/3DqViVF 商品リンク] &lt;br /&gt;
&lt;br /&gt;
'''【文具】'''&lt;br /&gt;
&lt;br /&gt;
*[[PILOT 3＋1 RIDGE DL]] 多機能筆記具 3+1RIDGE スリープラスワンリッジ ダークブルー 3色ボールペン＋シャーペン&lt;br /&gt;
*[[マルマン ノート ニーモシネ A5 無地 N183A]]&lt;br /&gt;
&lt;br /&gt;
'''【ドライブ】'''&lt;br /&gt;
&lt;br /&gt;
*[[東芝 microSDHCカード 32GB CLASS10 UHS-I]] TOSHIBA 読み込み：10[MByte/s] メモリカード&lt;br /&gt;
&lt;br /&gt;
'''【小物】'''&lt;br /&gt;
&lt;br /&gt;
*[[ANZOBEN Apple Pencil キャップ ペン先カバー 3セット]] Apple Pencil第一世代用 備品&lt;br /&gt;
&lt;br /&gt;
'''【楽譜】'''&lt;br /&gt;
&lt;br /&gt;
*[[音楽の友 ラヴェル ダフニスとクロエ 第２組曲 楽譜 OGTー225]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''モバイル機器'''===&lt;br /&gt;
*[[SIM]] Subscriber Identity Module Card&lt;br /&gt;
*[[SIM変換]] 標準⇔マイクロ⇔ナノ&lt;br /&gt;
*[[SIM契約]] docomo softbank au UQ_Comunications(WiMAX2+) MVNO=Mobile Virtual Network Operator:仮想移動体通信事業者&lt;br /&gt;
*[[SIM端末]] (携帯電話・スマートフォン・タブレット・モバイルルータ)&lt;br /&gt;
*[[SIMロック・フリー端末]]&lt;br /&gt;
*[[SIMモバイルナンバーポータビリティMNP]]&lt;br /&gt;
*[[SIM契約変更]]&lt;br /&gt;
*[[SIM新規契約]]&lt;br /&gt;
*[[SIM通話・データ契約]]&lt;br /&gt;
*[[SIMデータ専用契約]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''電子機器'''===&lt;br /&gt;
*'''[[REGZA 55X830 (東芝)]]''' 有機ELデジタルテレビ 自分の2代目TV&lt;br /&gt;
*■[[REGZA Z2000 (東芝)]]△ 液晶デジタルテレビ&lt;br /&gt;
*[[WIDE BAZOOKA 28DW7X (東芝)]]△ ブラウン管アナログテレビ 自分の1代目TV&lt;br /&gt;
*■[[REGZA Blu-ray RD-BZ710 (東芝)]] デジタル放送録画ブルーレイHDDレコーダー 自分の3代目録画機(SVHSビデオレコーダーA-BX3→RD-H2→)&lt;br /&gt;
*■[[REGZA Blu-ray RD-BZ700 (東芝)]]△ Blu-ray HDD Recorder&lt;br /&gt;
*■[[REGZA B5 (東芝)]] 液晶デジタルチューナーテレビ&lt;br /&gt;
*[[REGZA A2 (東芝)]] 液晶デジタルチューナーテレビ&lt;br /&gt;
&lt;br /&gt;
*'''■[[Surface Pro 8 8PQ-00026 (Microsoft)]]''' タブレットパソコン 3Way 5.2V 1A&lt;br /&gt;
*'''■[[Dynapad N72 N72TGP-NWA (東芝)]]''' タブレットパソコン 3Way 5.2V 2A&lt;br /&gt;
:*[[Dynapad N72 ファイル救出]] Windows復元処理が失敗する問題に遭遇&lt;br /&gt;
*[[iPad Pro 10.5インチ Wi-Fi 512GB MPGL2J/A ローズゴールド (Apple)]] タブレットパソコン 3Way 5.2V 2.4A&lt;br /&gt;
*■[[CosmioG50 Series PQG50W95HLN10W (東芝)]]△ ノートパソコン 19V 6.32A&lt;br /&gt;
*■[[DynabookT552/58FBD PT55258FBFBD (東芝)]] ノートパソコン 19V 3.95A&lt;br /&gt;
*'''■[[ArrowsZ ISW-11F (富士通東芝モバイルコミュニケーションズ)]]''' スマートフォン &lt;br /&gt;
:※'''ルート(root)化'''の記事があります。沢山のアクセスがあります。興味のある人は、参考にしていただければと思います。&lt;br /&gt;
*■[[WX05 (NEC)]]△ モバイルルータ 5V 2A&lt;br /&gt;
*[[W04 (HUAWEI ファーウェイ)]]△ モバイルルータ 5V 2A&lt;br /&gt;
*■[[BookPlaceReader DB50 (東芝)]]△ 電子書籍&lt;br /&gt;
*■[[マイクロドライプリンタ MD-5500 (アルプス電機)]]△ 昇華型インクリボンプリンタ&lt;br /&gt;
*[[PIXUS MP630 (キャノン)]]△ プリンタ&lt;br /&gt;
*[[MiWAND L2 Pro MiWand2LPro-BK(Avsion(台湾)-東芝テック)]] シートフィードアタッチメント付きハンディスキャナー&lt;br /&gt;
*■[[23000 POWER 700-BTL017BK (サンワサプライ)]]△ 23000mhA PC/スマホ/タブレット充電モバイルバッテリー&lt;br /&gt;
*■[[HD-AA10TK (東芝)]] USBハードディスク&lt;br /&gt;
*■[[スーパーファミコン (任天堂)]]△ 家庭用据え置き型ゲーム機&lt;br /&gt;
*■[[Playstation2 (SONY)]] 家庭用据え置き型ゲーム機&lt;br /&gt;
*[[Wii (任天堂)]] 家庭用据え置き型ゲーム機&lt;br /&gt;
*[[Nintendo 3DS (任天堂)]] 家庭用携帯ゲーム機&lt;br /&gt;
*■[[パーソナルオーディオシステム ZS-E70 (SONY)]]△ ラジCD &lt;br /&gt;
*[[SG-W2 (National)]] アナログレコードWラジカセオーディオコンポ&lt;br /&gt;
*■[[SP-HR200H (スカパー！)]]△ スカパー！プレミアムチューナー&lt;br /&gt;
*■[[MDR-EX31BN (SONY)]] カナル型ノイズキャンセラ機能付きBluetoothステレオヘッドフォン&lt;br /&gt;
*■[[fireTV stick (amazon)]]△ 各種web配信動画視聴用機器&lt;br /&gt;
*■[[chrome cast (google)]] chromecast対応デバイスの無線接続による画面・音声視聴機器&lt;br /&gt;
*■[[HDMI Lightning-Digital AVアダプタ (Apple他)]]&lt;br /&gt;
*■[[Bluetooth5.0マルチペアリングマウス(3台M750MGR)]]&lt;br /&gt;
*[[Bluetooth5.0マルチペアリングマウス(2台)M-XGM10BBBK(エレコム)]]△&lt;br /&gt;
*■[[Bluetooth3.0マルチペアリングマウス(3台)MA-BTBL121BK(サンワサプライ)]]△&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''生活家電'''===&lt;br /&gt;
*■[[NA-VR5500L HEATPUMP Jet Dancing (パナソニック)]] 洗濯機&lt;br /&gt;
*■[[TW-2000VC (東芝)]]△ 洗濯機&lt;br /&gt;
*[[CS-V281A (パナソニック)]]△ エアコン(National)&lt;br /&gt;
*■[[AY-Y25SV-W (シャープ)]] セパレート型ルームエアコン &lt;br /&gt;
*[[RH-C8 (Mitsubishi)]] 電気ストーブ&lt;br /&gt;
*■[[圧力IH NP-HJ10 (象印)]] 炊飯器&lt;br /&gt;
*■[[STEAM SENSOR NE-TZ15A (パナソニック)]]△ 電子レンジ National &lt;br /&gt;
*■[[SD-BH-101 (パナソニック)]] お手製パン焼き器&lt;br /&gt;
*■[[TS-D404 (ツインバード)]]△ ポップアップトースター(1口大開口型2枚サイズ)&lt;br /&gt;
*■[[HTR-C6 (東芝)]]△ オーブントースター&lt;br /&gt;
*[[VITESSE+ BF203 (T-fal)]] 電気ケトル 1450W&lt;br /&gt;
*[[HHF4308 (パナソニック)]] シーリングライト&lt;br /&gt;
*■[[6C526-L6 (NEC)]]△ 照明器具 昼光色30型FCL32EX-D/30-HGと30/28&lt;br /&gt;
*[[HHPFZ410AJ (パナソニック)]] 個室シーリングライト&lt;br /&gt;
*[[MortorHead DC45 (Dyson)]] 掃除機&lt;br /&gt;
*[[KC-W45 (シャープ)]] 空気清浄器&lt;br /&gt;
*[[HV-Z30CX-C (シャープ)]]△ 気化式加湿器&lt;br /&gt;
*■[[HV-Y30CX (シャープ)]]△ 加湿器&lt;br /&gt;
*■[[DesktopShredder A12X (GBC)]] シュレッダー&lt;br /&gt;
*[[MP-S15-H (パナソニック)]]△ シュレッダー&lt;br /&gt;
*[[CW8092(LIFELEX)]]多機能デジタルクロック&lt;br /&gt;
*■[[IAC-5584-WTD (CREPHA Design by NEXUS)]] 置き時計液晶デジタル&lt;br /&gt;
*■[[エアーマッサージャー エアーキュット EP1611 (パナソニック)]] エアーマッサージャー &lt;br /&gt;
*■[[タタキバイブ EV278 (パナソニック)]] タタキバイブ(松下電工) &lt;br /&gt;
*■[[KaradaScan HBF-361 (オムロン)]] 体重計&lt;br /&gt;
*■[[ER430P (パナソニック)]] 鼻毛カッター&lt;br /&gt;
*■[[AFLOA+ (株式会社クレイツ)]] プレスドライヤー &lt;br /&gt;
*[[ナノケア EH-NA94 (パナソニック)]] ドライヤー&lt;br /&gt;
*[[Oral-B Vitality 3709 (BROWN)]] 電動歯磨き&lt;br /&gt;
*[[GC PRINA MI-0003 (パナソニック)]] 電動歯磨き&lt;br /&gt;
*■[[ラムダッシュ ES-LA92 (パナソニック)]] シェーバー　替刃ES9025&lt;br /&gt;
*■[[VEGETA GR-D55F(XK) 東芝]]△ 冷蔵庫&lt;br /&gt;
*[[マジック大容量 GR-H510FV(ZC) 東芝]] 冷蔵庫&lt;br /&gt;
*[[AFC-154 東芝]] 餅つき器&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''サービスとしての経済 EaaS(Economy as a Service)'''===&lt;br /&gt;
　EaaSとか、そんな言葉は今のところ世の中には存在していません。あしからず。&lt;br /&gt;
*'''買い物 by Web'''&lt;br /&gt;
*[[Amazon]]&lt;br /&gt;
&lt;br /&gt;
*'''お金 by Electronic'''&lt;br /&gt;
*[[Amazon Gift Card]]&lt;br /&gt;
*[[Amazon Pay]]&lt;br /&gt;
*[[YahooAuction]] ヤフオク！&lt;br /&gt;
*[[Apple Pay]]&lt;br /&gt;
*[[suica]]&lt;br /&gt;
*[[merPay メルペイ iD]]&lt;br /&gt;
*[[paypay TPoint]]&lt;br /&gt;
*[[auPay QuickPay pontaP]]&lt;br /&gt;
*[[d払い docomo Point]]　&lt;br /&gt;
*[[nanaco]]　&lt;br /&gt;
*[[waon]]　&lt;br /&gt;
*[[rakuten point]]　&lt;br /&gt;
*[[sugi point]]　&lt;br /&gt;
*[[VANDLE CARD バンドルカード]]&lt;br /&gt;
:デビッドカードみたいな奴の銀行機能無し版。審査なし。Webだけで速攻作れる。&lt;br /&gt;
:作りたければ、カードも作れる。&lt;br /&gt;
*'''[[債務整理]]'''&lt;br /&gt;
:お金借りてて、返せなくなったときに無利子で少しづつ返す手段。&lt;br /&gt;
:お金の問題で死なないで下さい。破産もあるし、カラダを悪くしてしまったりしても生活保護だってあるんだし、生き方変えればいい。こまったときは都道府県市町村の無料弁護相談もあったりで、相談するとなんとかなると思う。窃盗とか犯罪とかに手を染める必要もない。相談して「死ぬしかないですね」って言われたら、そうなのかもしれませんけど。たぶん、無いと思う。どんなことでも死ぬほど困っているときはいろんな人に相談すると新しい道がひらけるものです。やってみて。意外と楽しい人生があとあとに待っている可能性もある。世界を変えるのは君なのかもしれないのだし。最後まで社会の一員として一緒にすすみましょ。&lt;br /&gt;
*'''[[デビットカード]]'''&lt;br /&gt;
&lt;br /&gt;
*'''[[ETCパーソナルカード]]'''  &lt;br /&gt;
*'''広告 by Website'''&lt;br /&gt;
*'''[[AdSense]]'''&lt;br /&gt;
&lt;br /&gt;
　電子マネーでネット決済が出来るショッピングサイトも少しありますが、電子マネーでの決済はあまり普及していません。Amazonで楽天エディやsuicaやJCB premoが使えるくらいかな。楽天でも楽天エディがつかえたりイオンネットショッピングやホームセンターDCMでWAONが使えたり、そんな感じです。Dショッピングではd払いは使えないくらいです。ドコモ払いは出来ます。どの店がどの支払いに対応しているかが複雑で混沌としているクレジットカード、電子マネー、ポイント業界、恐るべし。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''[[サイバー犯罪の通報手順]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''メディア'''===&lt;br /&gt;
*[[MediaWiki]]&lt;br /&gt;
:*[[SyntaxHighlight Version2]]　Pygments&lt;br /&gt;
*[[Google検索]]&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[FACEBOOK]]&amp;lt;/nowiki&amp;gt;※使ったことないですけど。気になる記事あれば&lt;br /&gt;
*[[X]] 自作アプリの販売をしているYoneTechStudioのためにサポート用アカウント作りました。&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[Instagram]]&amp;lt;/nowiki&amp;gt;※使ったことないですけど。気になる記事あれば&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[LINE]]&amp;lt;/nowiki&amp;gt;※気になる記事あれば&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[TikTok]]&amp;lt;/nowiki&amp;gt;※使ったことないですけど。気になる記事あれば&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[Youtube]]&amp;lt;/nowiki&amp;gt;※気になった記事とか…&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[大規模サイト]]&amp;lt;/nowiki&amp;gt;※気になった記事とか…&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[個人サイト]]&amp;lt;/nowiki&amp;gt;※自動とかでやってない素晴らしいサイトがあれば…&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[まとめサイト]]&amp;lt;/nowiki&amp;gt;※感動するような個人運営サイトがあれば…いまんとこ自動収集系は全部駄目やね。つまんね。&lt;br /&gt;
*[[テレビ]]&lt;br /&gt;
*[[ラジオ]]&lt;br /&gt;
*[[芸能]]&lt;br /&gt;
*[[コンテンツ販売]]&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[ネットショップ]]&amp;lt;/nowiki&amp;gt;※気になった記事とか…&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[国内政治]]&amp;lt;/nowiki&amp;gt;※気になった記事とか…&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;[[国際情勢]]&amp;lt;/nowiki&amp;gt;※気になった記事とか…&lt;br /&gt;
*[[地域]]※気になったこととか…　&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''スポーツ'''===&lt;br /&gt;
*[[F1 楽しみ方]]&lt;br /&gt;
*[[SUPER GT 楽しみ方]]&lt;br /&gt;
:*[[GSR HATSUNE MIKU]]&lt;br /&gt;
*[[Jリーグ 楽しみ方]]&lt;br /&gt;
:*'''[[ガンバ大阪]]'''&lt;br /&gt;
*[[ラグビー 楽しみ方]]&lt;br /&gt;
*[[プロ野球 楽しみ方]]&lt;br /&gt;
:*[[阪神タイガース]]&lt;br /&gt;
*管理人は打ちっぱなししかやりません。&lt;br /&gt;
*[[NFL 楽しみ方]]&lt;br /&gt;
*&lt;br /&gt;
:*[[2016リオ オリンピック 閉会式]]&lt;br /&gt;
*[[テニス 楽しみ方]]&lt;br /&gt;
:*[[テニス 錦織 圭 選手]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''カキモノ'''===&lt;br /&gt;
*'''[[夕波亜津子の深呼吸]]''' 2016年頃に作成。 138ページくらいまで。2022年時点プロット再見直し中。延々。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''音楽制作'''===&lt;br /&gt;
'''ギター録音環境整備'''&lt;br /&gt;
&lt;br /&gt;
★新たに買ったモノ&lt;br /&gt;
&lt;br /&gt;
*[[CAHAYA プロジェクタースタンド]]&lt;br /&gt;
:　録音作業をするために目の前にパソコンを置いたり、オーディオインターフェイス、楽譜を置いたりするのに使う三脚です。&lt;br /&gt;
&lt;br /&gt;
*[[elitehood アルミニウム製 iPadホルダー]]&lt;br /&gt;
:　上の三脚に取り付けれる、楽譜表示用iPadホルダーです。&lt;br /&gt;
&lt;br /&gt;
*[[オーディオテクニカ ATH-EP1000IR 楽器用ワイヤレスヘッドホン]]&lt;br /&gt;
:　アンプで鳴らす環境はないのでヘッドフォンがいります。ギターを弾くのにやはり上半身を自由にしたいからワイヤレスです。&lt;br /&gt;
&lt;br /&gt;
*[[LEKATO ループステーション用外部フットペダルループページターナー]]&lt;br /&gt;
:　録音を開始したり、失敗したりする耽美にパソコンを手で触るのは、下手くそギタリストには無理ゲーなので、足で手軽に操作するためのものです。譜面めくりもできます。演奏する曲の譜面は短期記憶で覚えるから譜めくりとしては、あまりいらないけどね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
他にいるものは以下にもありますが、&lt;br /&gt;
&lt;br /&gt;
*ギター FGZ-400-LHとアクティブピックアップ F･G･I Technology&lt;br /&gt;
*ピック&lt;br /&gt;
*シールドケーブル&lt;br /&gt;
*ミニプラグ延長ケーブル 3m&lt;br /&gt;
*ミニプラグ オス-オスケーブル1m&lt;br /&gt;
*TRSケーブル 60cm&lt;br /&gt;
*パソコン 管理人は Surface Pro 8&lt;br /&gt;
*電源二つ パソコン充電用とヘッドホン充電用でヘッドホン充電用はスイッチ付きがいいな。&lt;br /&gt;
*Image Line FL STUDIO 2024 All Plugins Edition&lt;br /&gt;
*IK Multimedia Amplitube MAX 5&lt;br /&gt;
*IK Multimedia TOTAL STUDIO MAX 3.5&lt;br /&gt;
*IK Multimedia axe i/o solo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
全部、真似をすると、パソコンが16万、FL STUDIOが今は新規が8万円くらい、IK Multimedia axe i/o soloが中古で7000円でした。今から手に入れるならもうちょっとするかな。ヘッドホン、ケーブル、三脚セット4万円、ギター本体は自分は大昔に5万円くらい？忘れたな。ピックアップ交換は、今はF･G･I Technologyは入手困難だと思いますが、中古で手に入るかな。新品のEMG製品を買った方がいいだろうね。シールドは2000円。ピックは100円。IK Multimedia TOTAL STUDIO MAX5は今は新規で500€でおよそ84,535円。これくらいを買うと同じ環境になる。電源タップ100均とJoshinとかを合わせて2000円くらいだったな。あとは、細かいところまでいうとヘッドホンを充電するアダプタ兼送信装置を置く必要があるので、棚が一個入りますね。ざっと計算すると合計で43万円くらいかかります。同じことをしようとして、仮に何も持っていなかった場合ですよ。管理人も一気にそろえた訳ではありませんので、ゆっくり揃えて下さい。あとは、弾くところとして椅子かベッドが必要ですし、エレキギターを弾いても生音だけで弾くレベルならクレームが来ないような部屋が必要です。ソフトウェアもいきなりMAXを買ったわけではありませんので、もう少しお得に今のEditionのソフトウェアになっていますので、少しづつグレードアップしてみてはいかがでしょうか？管理人は、精神衛生上の問題でグレードアップしているものが多いだけです。ほとんどは使っていません。なんかね。メインの機能を使っているときに、その近くにこれは使えないけど表示しておくね。っていうのがホント駄目で、耐えられない。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''[[コピー作品No.001 ハルカミライ ライダース 制作記録]]'''&lt;br /&gt;
*'''[[コピー作品No.002 ハルカミライ ベターライフ 制作記録]]'''&lt;br /&gt;
*'''[[コピー作品No.003 JUDY AND MARY BATHROOM 制作記録]]'''&lt;br /&gt;
*'''[[コピー作品No.004 JUDY AND MARY 小さな頃から 制作記録]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
△は手放したことを意味するマークです。&lt;br /&gt;
&lt;br /&gt;
手放したくは無かったのですが、手狭になったので、引っ越し時に新品同様のものも含めて、廃棄しました。中古にも出していません。売りさばく時間もなかったので廃棄という道しかありませんでした。欲しかった人いただろうけどね。友達もいないし、あげることもできず、もったいないことです。めぐり合わせが悪いだけで、こんなことになるんすね。また同じような環境が整えられる日が来るといいな。&lt;br /&gt;
&lt;br /&gt;
*[[エレキギター]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''音楽理論'''&lt;br /&gt;
*'''[[音楽理論 和音の種類]]'''&lt;br /&gt;
*'''[[音楽理論 五度圏]]'''&lt;br /&gt;
*'''[[音楽理論 管理人所有のスコアで使われている和音の種類]]'''&lt;br /&gt;
*'''[[音楽理論 ギターのトーン回路の仕組み]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[音声波形科学]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
'''楽譜'''&lt;br /&gt;
*[[ギター用楽譜フォント]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
'''DAW'''&lt;br /&gt;
*[[ASIO4ALL インストール]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
'''Image Line'''&lt;br /&gt;
*'''[[FL Studio]]''' DAW ソフトウェア&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
'''IK Multimedia'''&lt;br /&gt;
*'''[[TOTAL STUDIO MAX 3.5]]'''&lt;br /&gt;
*'''[[TOTAL STUDIO MAX 4]]''' 2023-04-12リリース&lt;br /&gt;
*'''[[TOTAL STUDIO MAX 5]]''' 2025-04-29リリース&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''[[TOTAL STUDIO最新版に含まれない新製品]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''[[IK Multimedia Group Buy 2025年9月18日～2025年10月31日まで]]''' &lt;br /&gt;
:参加したので、Total Studio MAX 3.5や4を持っていたりするとプレゼントで何を選択すると良いか考える記事。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[Amplitube]] ギターアンプソフトウェアシミュレータ&lt;br /&gt;
*[[Amplitube2]]　２！&lt;br /&gt;
*[[Amplitube3]]　３！&lt;br /&gt;
*[[Amplitube4]]　４！&lt;br /&gt;
*'''[[AmplitubeMAX]]'''　MAX! 付随しているペダル名一覧あり。&lt;br /&gt;
*[[Amplitube5]]　５！&lt;br /&gt;
*'''[[Amplitube5MAX]]'''　５！ &amp;lt;span style=&amp;quot;color: darkred; font-weight: 900;&amp;quot;&amp;gt;TOTAL STUDIO MAX 3.5に含まれる &amp;lt;/span&amp;gt;&lt;br /&gt;
::&amp;lt;span style=&amp;quot;color: darkgreen; font-weight: 900;&amp;quot;&amp;gt;Amplitube全体の総合的な記事はしばらくココかな。取り扱い説明記事もあります。&amp;lt;/span&amp;gt;&lt;br /&gt;
*'''[[Amplitube5MAXv2]]'''&lt;br /&gt;
*'''[[Pianoverse]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''[[TONEX MAX]]''' €199&lt;br /&gt;
*'''[[iRig HD]]''' ギター用USBオーディオインターフェイス&lt;br /&gt;
*'''[[axe i/o solo]]''' ギター用USBオーディオインターフェイス2in/3out&lt;br /&gt;
*'''[[T-RackS]]''' 5MAX/CS MAX版&amp;lt;span style=&amp;quot;color: darkred; font-weight: 900;&amp;quot;&amp;gt;TOTAL STUDIO MAX 3.5に含まれる&amp;lt;/span&amp;gt;Rack紹介記事あり&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
以下 2022年12月の&amp;lt;span style=&amp;quot;color: darkred; font-weight: 900;&amp;quot;&amp;gt;TOTAL STUDIO 3.5 MAXに含まれる&amp;lt;/span&amp;gt;製品2022-12-某日から管理人所有！€69&lt;br /&gt;
*'''[[SampleTank4]]'''&lt;br /&gt;
:*'''[[SampleTank4#SampleTank 4 拡張音源のプリセットが表示されない|SampleTank 4 拡張音源のプリセットが表示されない]]''' &lt;br /&gt;
*[[SampleTank Editor]]&lt;br /&gt;
*[[SampleTron2]]&lt;br /&gt;
*[[Syntronik2]]&lt;br /&gt;
*[[Hammond B-3X]]&lt;br /&gt;
*[[Miroslav Philharmonik2]]&lt;br /&gt;
*[[MODO BASS 1.5]]&lt;br /&gt;
*[[MODO DRUM 1.0]]&lt;br /&gt;
*[[ARC System 3]]&lt;br /&gt;
*[[MixBox]]&lt;br /&gt;
*[[Lurssen Mastering Console]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
'''Fernandes'''&lt;br /&gt;
*[[FGZ-400-LH]] 左利き用SSHストラトス型ギター&lt;br /&gt;
*'''[[FGI TECHNOLOGY]]''' SSH型アクティブ(電池による増幅機能アンプ付き)ギターピックアップ&lt;br /&gt;
*[[ギター配線 整備]]&lt;br /&gt;
*[[ギター TONE容量別聞き比べ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
'''E-MU''' ※現在は、販売の取扱い中止のため、購入不可となっています。素晴らしいメーカだったのですが、残念です。中古でたまにみかけるものもあります。&lt;br /&gt;
*[[1212m]]△ 12in12outのPCIスロット型オーディオインターフェイス&lt;br /&gt;
*'''[[Emurator X3]]''' ソフトウェアサンプラー Emulator X と Emulator X2からのアップグレード&lt;br /&gt;
:'''E-MU Sound Central'''&lt;br /&gt;
:*[[Modern Symphonic Orchestra]] DVD 5枚組&lt;br /&gt;
:*[[Beat Shop One Acoustic Drums &amp;amp; Grooves]] X2 付属&lt;br /&gt;
:*'''■[[Beat Shop Two Acoustic Drums &amp;amp; Grooves]]''' 説明書の内容について記載有り&lt;br /&gt;
:*[[Old World Instruments World Sound Library]] 未所有&lt;br /&gt;
:*[[Virtuoso X Orchestra Sound Library]]&lt;br /&gt;
:*[[Planet Earth X World Sound Library]]&lt;br /&gt;
:*[[Mo'Phatt X Urban Dance Sound Library]]&lt;br /&gt;
:*[[Protean Drums X Acoustic/Electronic Drum Sound Library]]&lt;br /&gt;
:*[[Techno Synth Construction Yard X Electronica/Dance Sound Library Vol.1]]&lt;br /&gt;
:*[[Beat Garden X Electronica/Dance Sound Library Vol.2]]&lt;br /&gt;
:*[[Xtreme Lead X Electro/Dance Sound Library]]&lt;br /&gt;
:*'''[[Platinum 88 Grand Piano Sound Library]]''' DVD2枚組 説明書の内容について記載有り&lt;br /&gt;
:*[[Street Kits Urban Dance/Drum Sound Library]]&lt;br /&gt;
:*[[Vintage X Pro Volume1 ｰ Synthesizers]] CD 4枚組&lt;br /&gt;
:*[[Vintage X Pro Volume2 ｰ Synthesizers]] CD 4枚組&lt;br /&gt;
:*[[Vintage X Pro Volume3 ｰ Keyboards]] CD 3枚組&lt;br /&gt;
:※太字以外の全てCD。DVDは破棄していて、メディア複製品isoファイルしかありません。一つだけ未所有。せめて説明書のコピーくらいして棄てればよかったな。8年のブランクを経て今(2023年1月某日)、EmulatorXの利用が再燃中。使いこなせるか？！ほとんど曲なんか完成まで作らない人生だからな。だっさい未完成品のワンフレーズをつくるのが精いっぱい。とても表に出せるようにモノではないです。でも、この先、どう転ぶかわからんよね。継続は力なりっていうし…。99.999%は芽がでないまま死ぬと思いますけど。&lt;br /&gt;
&lt;br /&gt;
*[[Orbit 9090 V2]]△ ハードウェア音源モジュール(テクノ系)&lt;br /&gt;
*[[Proteus/1 plus Orchestral]]△ ハードウェア音源モジュール(クラシック系)&lt;br /&gt;
*[[Proteus/2 XR Orchestral]]△ ハードウェア音源モジュール(クラシック系)&lt;br /&gt;
*[[Vintage Key Plus]]△ ハードウェア音源モジュール(キーボード系)&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
'''Roland'''&lt;br /&gt;
*[[MMP-2]]△ 2ch in USB/MIDI制御系デジタルマルチアンプエミュレート機能付きマイクプリアンプ&lt;br /&gt;
*[[VM-3100Pro]]△ 簡易版デジタルミキサー R-Bus搭載&lt;br /&gt;
*[[DIF-AT]]△ R-Bus⇔ADAT(8IN/8OUT)、R-Bus⇔TASCAM TDIF-1変換をサポートする変換Box1/3Uサイズ&lt;br /&gt;
*[[INTEGRA-7]]△ ハードウェア音源モジュール(全ジャンル系)&lt;br /&gt;
*[[PCR-M30]]△ MIDIキーボードコントローラ 38鍵盤&lt;br /&gt;
*[[A-88]]△ MIDIキーボードコントローラ&lt;br /&gt;
*[[UA-1000]]△ 10in10outUSBオーディオインターフェイス ADAT搭載&lt;br /&gt;
*[[XV-5050]]△ ハードウェア音源モジュール(シンセサイザー系)&lt;br /&gt;
*[[UM-3EX]]△ 3ch USB-MIDIインターフェイス&lt;br /&gt;
*[[RAF-70]]△ UM-3EX 他 用3連取付専用ラックマウント&lt;br /&gt;
*[[ME-30]]△ ハードウェア型ギターマルチアンプエフェクター&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
'''zplane'''&lt;br /&gt;
*[[deCoda]] オーディオファイルリズム・音程解析ツール 6000円くらい&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
'''SHURE'''&lt;br /&gt;
*[[SM-10A-CN]]△ ヘッドセット型ダイナミックマイク&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
'''CLAMPOM'''&lt;br /&gt;
*[[R-13]]△ 標準型グラナディラ材仕様クラリネット&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
'''Misc.'''(miscellaneous=種々雑多の)&lt;br /&gt;
*[[CST-100]] キョーリツコーポレーション ギターソフトケース&lt;br /&gt;
*[[SPS-2000TC]] Aria ギターストラップ&lt;br /&gt;
*[[GB-1]] KORG pitchjack プラグイン・チューナー&lt;br /&gt;
*[[CA1400B]] Morris  EAGLE CAPO BLACK&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''ショップ'''===&lt;br /&gt;
*[[コナズ珈琲]]CONA'S COFFEE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''車両'''===&lt;br /&gt;
*[[PIAGGIO VESPA50S Vintage]]△&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[HONDA beat]]△&lt;br /&gt;
*[[SUZUKI WAGON R]]△&lt;br /&gt;
*[[HONDA HR-V]]△&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[TOYOTA ROOMY]]&lt;br /&gt;
&lt;br /&gt;
==='''塗装技術 実車'''===&lt;br /&gt;
HR-Vのボンネット塗装をやった時の[http://www.yo-net.jp/wagon_r/this.html 知識]を広げていこうかと考えております。&lt;br /&gt;
*[[塗装 準備と片付け]]&lt;br /&gt;
====='''My 機材'''=====&lt;br /&gt;
*[[塗装 エアーコンプレッサー 藤原産業 PUMA SK11 AM15-25]]△ 100V 1.5馬力 0.8MPa 25L エアー接続部 ハイカプラ メス&lt;br /&gt;
*[[塗装 スプレーガン アネスト岩田 W-50-136BGC]]△ エアー接続部G1/4オス&lt;br /&gt;
*[[塗装 スプレーガン エアホース 接続ジョイント 日東工器 20PFF]]△ G1/4メス - ハイカプラ オス&lt;br /&gt;
*[[塗装 アートルータ RELIEF]]△&lt;br /&gt;
*[[塗装 グラインダー VivaHomeプライベートブランド]]△&lt;br /&gt;
*[[塗装 グラインダー 塗料研磨用10cm替え円盤]]△&lt;br /&gt;
*[[塗装 保護メガネ VivaHomeプライベートブランド]]△&lt;br /&gt;
*[[塗装 エアホース 5m]]△ ハイカプラ メス - ハイカプラ オス&lt;br /&gt;
*[[塗装 電源コードリール 30m]]△&lt;br /&gt;
*[[塗装 ビニール繊維養生ガムテープ 緑 白]]&lt;br /&gt;
*[[塗装 マスキングテープ 3M]]&lt;br /&gt;
*[[塗装 使い捨てウエスロール]] コーナン&lt;br /&gt;
*[[塗装 布ウエス]] 2枚組とか&lt;br /&gt;
*[[塗装 ゴムヘラ]]△&lt;br /&gt;
*[[塗装 スプレーガン洗浄器具]]△&lt;br /&gt;
*[[塗装 デジタル重量メータ TANITA]]△&lt;br /&gt;
*[[塗装 塗料調合器具 使い捨て]]&lt;br /&gt;
&lt;br /&gt;
====='''作業記録'''=====&lt;br /&gt;
*[[160329 HR-V補修]]&lt;br /&gt;
&lt;br /&gt;
==='''ラジコン'''===&lt;br /&gt;
*[[EPツーリング]] 電動カー&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[M-03]]△&amp;lt;/nowiki&amp;gt;TAMIYA ミニシリーズ&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[TA-04R]]△&amp;lt;/nowiki&amp;gt;TAMIYA 1/10 ツーリングカーシリーズ&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[F201]]△&amp;lt;/nowiki&amp;gt;TAMIYA 1/10 F1シリーズ&lt;br /&gt;
*エンジンカー&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[TG10]]△&amp;lt;/nowiki&amp;gt;TAMIYA 1/10 ツーリングカーシリーズ&lt;br /&gt;
:*&amp;lt;nowiki&amp;gt;[[FW05]]△&amp;lt;/nowiki&amp;gt;KYOSHO 1/10 ツーリングカーシリーズ&lt;br /&gt;
*塗装超入門&lt;br /&gt;
:*'''[[ホビー塗装 継手・コネクタ]]△'''G1/8(L) G1/4(S) PS(細)について &lt;br /&gt;
:*'''[[ホビー塗装 No.5 エアブラシ バジャー350Ⅱ]]△'''使いにくさレベル ★★★ ある意味上級者じゃないと使えない。&lt;br /&gt;
:*'''[[ホビー塗装 No.15 スプレーワーク HG コンプレッサー レボ （AC専用）]]△''' どこが入門なの？っていうツッコミ。わかります。&lt;br /&gt;
:*'''[[ホビー塗装 アネスト岩田 コンプレッサー IS-800 （AC専用）]]△''' スプレーガン用だと思って間違えて買っちゃった。&lt;br /&gt;
&lt;br /&gt;
==='''模型作成'''===&lt;br /&gt;
*[[模型 ESTIMA AERAS ]]&lt;br /&gt;
*[[模型 ガールズアンドパンツァー劇場版 あんこうさんチーム]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''放送大学'''===&lt;br /&gt;
*[[放送大学 教養学部 自然の理解専攻 学習進度]] '16-09-30で卒業に必要な条件の単位を全て習得し、学位を取得しました。&lt;br /&gt;
科目履修性とか選科履修生として、引き続き好きな学問を学んでいます。&lt;br /&gt;
&lt;br /&gt;
主に英語を勉強しようと思っています。多分無理だけど、あきらめてはいけない！出会った女性に教えられました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
世の中には、まだまだ自分の知らなかった面白い発見があったりして、そこが面白い。で、自分なりに確かめたり、さらに応用してみたりっていうのがいいんだろうね。仕事にも役立つような気がするし。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''外国語'''===&lt;br /&gt;
*[[韓国語]]&lt;br /&gt;
*[[中国語]]&lt;br /&gt;
*'''[[英語]]'''&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''経営学'''===&lt;br /&gt;
*[[シックスシグマ ジャックウェルチ]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''科学技術情報(先端技術・サイエンス)'''===&lt;br /&gt;
&lt;br /&gt;
*[[化学]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''思想'''===&lt;br /&gt;
*[[人格]]&lt;br /&gt;
*[[犯罪処罰]]&lt;br /&gt;
*'''[[意思疎通]]'''&lt;br /&gt;
&lt;br /&gt;
==='''周知事項'''===&lt;br /&gt;
　自分も知らないことで、違反していたということもあるかもしれないですが、そういった類いのことを記す項目です。他にも一般的な仕組みで知っておいた方がいいみたいな奴を記すトコです。&lt;br /&gt;
&lt;br /&gt;
*[[さすべえ]]は積載違反を誘うモノです。 安全運転義務違反。但し、警察からの回答はマナーを守って使用して下さいと返答があったようです。&lt;br /&gt;
*[[密漁]] 海・河・海岸・川岸において定着した食用生物と魚の捕獲は犯罪です。&lt;br /&gt;
*[[𪚥]] この文字をファイル名やフォルダ名の最強使者として扱おうって話。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''未来予想'''===&lt;br /&gt;
*[[iWatch問題]]&lt;br /&gt;
*[[ロボット社会]]&lt;br /&gt;
*[[家電技術]]&lt;br /&gt;
*[[自動運転車両]]&lt;br /&gt;
*[[ウェアラブル端末問題]]&lt;br /&gt;
*[[地球外移住]]&lt;br /&gt;
*[[世界平和]]&lt;br /&gt;
*[[エネルギー獲得手法]]&lt;br /&gt;
*[[水および食糧の調達]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''アニメ'''===&lt;br /&gt;
※作品紹介の商品リンクは主にアマゾンアフィリエイトになっています。他人に経済的効果をもたらしたくないと強固に考えている方は自力で回避して下さい。購入しない分には経済効果は発生しないので、気軽にAmazonの紹介ページへいっていただければと思います。でも少ないリンク数でついで買いとかするとなんか影響あるので、その場合はいったんブラウザをリセットした方がよいでしょう。アフィリエイト回避により米国Amazon側の最大利益を確保できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
以下の作品全部を見たら、管理人と同等のアニメ知識レベルです。コアな人はもっともっと見てると思いますよ。&lt;br /&gt;
*[[攻殻機動隊]]&lt;br /&gt;
*[[ヘルシング]]&lt;br /&gt;
*[[アカギ]]&lt;br /&gt;
*[[あずまんが大王]]&lt;br /&gt;
*[[日常]]&lt;br /&gt;
*[[化物語]]&lt;br /&gt;
*[[みなみけ]]&lt;br /&gt;
*[[咲]]&lt;br /&gt;
*[[神霊狩]]&lt;br /&gt;
*[[涼宮ハルヒの憂鬱]]&lt;br /&gt;
*[[氷菓]]&lt;br /&gt;
*[[機動警察パトレイバー]]&lt;br /&gt;
*[[エヴァンゲリオン]]&lt;br /&gt;
*[[秒速5センチメートル]]&lt;br /&gt;
*[[ほしのこえ]]&lt;br /&gt;
*[[雲のむこう、約束の場所]]&lt;br /&gt;
*[[星を追う子ども]]&lt;br /&gt;
*[[言の葉の庭]]&lt;br /&gt;
*[[逮捕しちゃうぞ]]&lt;br /&gt;
*[[名探偵コナン]]&lt;br /&gt;
*[[ドラえもん]]&lt;br /&gt;
*[[ブラックジャック]]&lt;br /&gt;
*[[サザエさん]]&lt;br /&gt;
*[[ドラゴンボール]]&lt;br /&gt;
*[[カウボーイビバップ]]&lt;br /&gt;
*[[シティハンター]]&lt;br /&gt;
*[[荒川アンダーザブリッジ]]&lt;br /&gt;
*[[ルパン三世]]&lt;br /&gt;
*[[時をかける少女]]&lt;br /&gt;
*[[ブレイブストーリー]]&lt;br /&gt;
*[[サマーウォーズ]]&lt;br /&gt;
*[[東のエデン]]&lt;br /&gt;
*[[東京ゴッドファザーズ]]&lt;br /&gt;
*[[AKIRA]]&lt;br /&gt;
*[[緑山高校]]&lt;br /&gt;
*[[タッチ]]&lt;br /&gt;
*[[プロジェクトA子]]&lt;br /&gt;
*[[あさりちゃん]]&lt;br /&gt;
*[[ちびまる子ちゃん]]&lt;br /&gt;
*[[怪物くん]]&lt;br /&gt;
*[[パーマン]]&lt;br /&gt;
*[[The かぼちゃワイン]]&lt;br /&gt;
*[[おはよう！スパンク ]]&lt;br /&gt;
*[[ドラゴンクエスト]]&lt;br /&gt;
*[[南国少年パプワ君]]&lt;br /&gt;
*[[ビックリマン]]&lt;br /&gt;
*[[ヤッターマン]]&lt;br /&gt;
*[[デビルマン]]&lt;br /&gt;
*[[宇宙船サジタリウス]]&lt;br /&gt;
*[[ハイスクール奇面組]]&lt;br /&gt;
*[[あんみつ姫]]&lt;br /&gt;
*[[ハイカラさんが通る]]&lt;br /&gt;
*[[小公女セーラ]]&lt;br /&gt;
*[[キャンディキャンディ]]&lt;br /&gt;
*[[未来少年コナン]]&lt;br /&gt;
*[[母をたずねて三千里]]&lt;br /&gt;
*[[フランダースの犬]]&lt;br /&gt;
*[[アルプスの少女ハイジ]]&lt;br /&gt;
*[[みつばちハッチ]]&lt;br /&gt;
*[[パタリロ！]]&lt;br /&gt;
*[[元祖天才バカボン]]&lt;br /&gt;
*[[おそ松くん]]&lt;br /&gt;
*[[モーレツあ太郎]]&lt;br /&gt;
*[[カリメロ]]&lt;br /&gt;
*[[あらいぐまラスカル]]&lt;br /&gt;
*[[まじかる☆タルるートくん]]&lt;br /&gt;
*[[めぞん一刻]]&lt;br /&gt;
*[[エスパー魔美]]&lt;br /&gt;
*[[きんぎょ注意報!]]&lt;br /&gt;
*[[ど根性ガエル]]&lt;br /&gt;
*[[忍者ハットリくん]]&lt;br /&gt;
*[[魔法使いサリー]]&lt;br /&gt;
*[[オバケのQ太郎]]&lt;br /&gt;
*[[きまぐれオレンジ☆ロード]]&lt;br /&gt;
*[[海がきこえる]]&lt;br /&gt;
*[[３×３ ＥＹＥＳ]]&lt;br /&gt;
*[[強殖装甲ガイバー]]&lt;br /&gt;
*[[けっこう仮面]]&lt;br /&gt;
*[[アプッルシード]]&lt;br /&gt;
*[[傷追い人]]&lt;br /&gt;
*[[装甲騎兵ボトムズ]]&lt;br /&gt;
*[[金田一少年の事件簿]]&lt;br /&gt;
*[[Dr.スランプあられちゃん]]&lt;br /&gt;
*[[怪盗キッド1412]]&lt;br /&gt;
*[[白鳥麗子でございます！]]&lt;br /&gt;
*[[プリキュアシリーズ]]&lt;br /&gt;
*[[黒魔女さんが通る!!]]&lt;br /&gt;
*[[メジャー]]&lt;br /&gt;
*[[クロスゲーム]]&lt;br /&gt;
*[[おじゃまんが山田くん]]&lt;br /&gt;
*[[はじめ人間ギャートルズ]]&lt;br /&gt;
*[[あんぱんマン]]&lt;br /&gt;
*[[毎日かあさん]]&lt;br /&gt;
*[[あたしンち]]&lt;br /&gt;
*[[笑うせぇるすまん]]&lt;br /&gt;
*[[ベルサイユの薔薇]]&lt;br /&gt;
*[[海月姫]]&lt;br /&gt;
*[[俺の妹がこんなにかわいいわけがない]]&lt;br /&gt;
*[[アニメまんが日本昔ばなし]]&lt;br /&gt;
*[[BLOOD+]]&lt;br /&gt;
*[[MEMORIES]]&lt;br /&gt;
*[[スチームボーイ]]&lt;br /&gt;
*[[PERFECT BLUE]]&lt;br /&gt;
*[[妄想代理人]]&lt;br /&gt;
*[[人狼 JIN-ROH]]&lt;br /&gt;
*[[YAWARA]]&lt;br /&gt;
*[[MONSTER]]&lt;br /&gt;
*[[おぼっちゃまくん]]&lt;br /&gt;
*[[らんま1/2]]&lt;br /&gt;
*[[北斗の拳]]&lt;br /&gt;
*[[うる星やつら]]&lt;br /&gt;
*[[ミスター味っ子]]&lt;br /&gt;
*[[キテレツ大百科]]&lt;br /&gt;
*[[弱虫ペダル]]&lt;br /&gt;
*[[ムーミン]]&lt;br /&gt;
*[[進撃の巨人]]&lt;br /&gt;
*[[天空の城ラピュタ]]&lt;br /&gt;
*[[風の谷のナウシカ]]&lt;br /&gt;
*[[魔女の宅急便]]&lt;br /&gt;
*[[もののけ姫]]&lt;br /&gt;
*[[借り暮らしのアリエッティ]]&lt;br /&gt;
*[[となりのトトロ]]&lt;br /&gt;
*[[ドルアーガの塔]]&lt;br /&gt;
*[[キャッツアイ]]&lt;br /&gt;
*[[デスノート]]&lt;br /&gt;
*[[キン肉マン]]&lt;br /&gt;
*[[文豪ストレイドッグス]]&lt;br /&gt;
*[[黒執事]]&lt;br /&gt;
*[[風夏]]&lt;br /&gt;
*[[放課後さいころ倶楽部]]&lt;br /&gt;
*[[ケムリクサ]]&lt;br /&gt;
*[[女子高生の無駄遣い]]&lt;br /&gt;
*[[ワンパンマン]]&lt;br /&gt;
*[[モブサイコ100]]&lt;br /&gt;
*[[Re:ゼロから始める異世界空間]]&lt;br /&gt;
*[[PSYCHO-PASS]]&lt;br /&gt;
*[[キングダム]]&lt;br /&gt;
*[[ダンベル何キロ持てる]]&lt;br /&gt;
*[[盾の勇者の成り上がり]]&lt;br /&gt;
*[[通常攻撃が全体攻撃で二回攻撃のお母さんは好きですか？]]&lt;br /&gt;
*[[この美術部には問題がある]]&lt;br /&gt;
*[[手品先輩]]&lt;br /&gt;
*[[交響詩篇エウレカセブン]]&lt;br /&gt;
*[[ガヴリールドロップアウト]]&lt;br /&gt;
*[[僕たちは勉強が出来ない]]&lt;br /&gt;
*[[博多豚骨ラーメンズ]]&lt;br /&gt;
*[[異世界食堂]]&lt;br /&gt;
*[[からかい上手の高木さん]]&lt;br /&gt;
*[[幸腹グラフティー]]&lt;br /&gt;
*[[アルスラーン戦記]]&lt;br /&gt;
*[[転生したらスライムだった件]]&lt;br /&gt;
*[[響けユーフォニアム]]&lt;br /&gt;
*[[RD 洗脳調査室]]&lt;br /&gt;
*[[だがしかし]]&lt;br /&gt;
*[[ブギーポップは笑わない]]&lt;br /&gt;
*[[ジョーカー・ゲーム]]&lt;br /&gt;
*[[ソウナンですか？]]&lt;br /&gt;
*[[灼熱カバディ]]&lt;br /&gt;
*[[青のオーケストラ]]&lt;br /&gt;
WEBアニメーション&lt;br /&gt;
*[[CAT MAN]]&lt;br /&gt;
*[[終わらない鎮魂歌を歌おう]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''漫画'''===&lt;br /&gt;
*[[攻殻機動隊]]&lt;br /&gt;
*[[恨み屋本舗]]&lt;br /&gt;
*[[ツルモク独身寮]]&lt;br /&gt;
　&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''書籍'''===&lt;br /&gt;
*'''名探偵ポワロシリーズ アガサ・クリスティ'''&lt;br /&gt;
:*[[オリエント急行]]&lt;br /&gt;
:*[[アクロイド殺人事件]]&lt;br /&gt;
:*[[そして誰もいなくなった]]&lt;br /&gt;
:*[[カーテン]]&lt;br /&gt;
*'''図書館戦争シリーズ 有川 浩'''&lt;br /&gt;
:*[[図書館戦争]]&lt;br /&gt;
*[[理由 宮部 みゆき]]&lt;br /&gt;
*[[レベル7 宮部 みゆき]]&lt;br /&gt;
*[[スナーク狩り 宮部 みゆき]]&lt;br /&gt;
*[[我らが隣人の犯罪 宮部みゆき]]&lt;br /&gt;
*[[火車 宮部みゆき]]&lt;br /&gt;
*[[パーフェクトブルー 宮部みゆき]]&lt;br /&gt;
*[[名もなき毒 宮部みゆき]]&lt;br /&gt;
*[[バトルロワイヤル 高見 広春]]&lt;br /&gt;
*[[夢をかなえるゾウ 水野敬也]]&lt;br /&gt;
*[[フリーター家を買う 有川 浩]]&lt;br /&gt;
*[[県庁おもてなし課 有川 浩]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''映画'''===&lt;br /&gt;
*[[CHECKERS in TANTAN たぬき]]&lt;br /&gt;
*[[マルサの女]]&lt;br /&gt;
*[[レオン]]&lt;br /&gt;
*[[不撓不屈]]&lt;br /&gt;
*[[陽はまた昇る]]&lt;br /&gt;
*[[タイタニック]]&lt;br /&gt;
*[[キルビル]]&lt;br /&gt;
*[[39]]&lt;br /&gt;
*[[理由(映画)]]&lt;br /&gt;
*[[模倣犯]]&lt;br /&gt;
*[[嫌われ松子の一生]]&lt;br /&gt;
*[[カイジ]]&lt;br /&gt;
*[[ライアーゲーム]]&lt;br /&gt;
*[[ラヂオの時間]]&lt;br /&gt;
*[[みんなのいえ]]&lt;br /&gt;
*[[THE 有頂天ホテル]]&lt;br /&gt;
*[[マジックアワー]]&lt;br /&gt;
*[[すてきな金縛り]]&lt;br /&gt;
*[[めがね]]&lt;br /&gt;
*[[プリンセス・トヨトミ]]&lt;br /&gt;
*[[ミッションインポッシブル]]&lt;br /&gt;
*[[インデペンデンスデイ]]&lt;br /&gt;
*[[イレイザー]]&lt;br /&gt;
*[[at Home]]&lt;br /&gt;
*■[[進撃の巨人(実写)前編/後編]]&lt;br /&gt;
*[[劇場版アニメ 心が叫びたがっているんだ]]&lt;br /&gt;
*[[アンフェア the end]]&lt;br /&gt;
*[[グラスホッパー]]&lt;br /&gt;
*[[ミッションインポッシブル ローグネーション(吹替) 初2D+4DX]]&lt;br /&gt;
*[[orange]]&lt;br /&gt;
*[[ドラえもん 新・のび太の日本誕生]]&lt;br /&gt;
*[[ガールズ＆パンツァー 劇場版 4DX(2回目)]]&lt;br /&gt;
*[[劇場版アニメ 名探偵コナン 純黒の悪夢]]&lt;br /&gt;
*[[カツベン]]&lt;br /&gt;
*[[劇場版アニメ 名探偵コナン 黒鉄の魚影]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''演劇'''===&lt;br /&gt;
*[[人間になりたがった猫]]&lt;br /&gt;
*[[ベッジ・パードン]]&lt;br /&gt;
*[[90ミニッツ]]&lt;br /&gt;
*[[コンフィダント・絆]]&lt;br /&gt;
*[[returns 東京サンシャインボーイズ]]&lt;br /&gt;
*[[悼む人]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''舞台'''===&lt;br /&gt;
*[[上海雑技団]]&lt;br /&gt;
*[[BLUE MAN]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''ドラマ(全話みたもの)'''===&lt;br /&gt;
*[[スケバン刑事]]&lt;br /&gt;
*[[アンフェア]]&lt;br /&gt;
*[[ヤヌスの鏡]]&lt;br /&gt;
*[[古畑任三郎]]&lt;br /&gt;
*[[あぶない刑事]]&lt;br /&gt;
*[[君の瞳にタイホする]]&lt;br /&gt;
*[[家裁の人]]&lt;br /&gt;
*[[離婚弁護士]]&lt;br /&gt;
*[[殴る女]]&lt;br /&gt;
*[[人間の証明]]&lt;br /&gt;
*[[電車男]]&lt;br /&gt;
*[[ドラゴン桜]]&lt;br /&gt;
*[[野ブタ。をプロデュース]]&lt;br /&gt;
*[[女王の教室]]&lt;br /&gt;
*[[富豪刑事]]&lt;br /&gt;
*[[のだめカンタービレ]]&lt;br /&gt;
*[[トップキャスター]]&lt;br /&gt;
*[[弁護士のくず]]&lt;br /&gt;
*[[喰いタン]]&lt;br /&gt;
*[[嫌われ松子の一生]]&lt;br /&gt;
*[[ガリレオ]]&lt;br /&gt;
*[[ハケンの品格]]&lt;br /&gt;
*[[斉藤さん]]&lt;br /&gt;
*[[夢をかなえるゾウ]]&lt;br /&gt;
*[[臨場]]&lt;br /&gt;
*[[BOSS]]&lt;br /&gt;
*[[ストロベリーナイト]]&lt;br /&gt;
*[[GTO]]&lt;br /&gt;
*[[リーガル・ハイ]]&lt;br /&gt;
*[[信長協奏曲]]&lt;br /&gt;
*[[戦力外捜査官]]&lt;br /&gt;
*[[問題のあるレストラン]]&lt;br /&gt;
*[[ずっとあなたが好きだった]]&lt;br /&gt;
*[[101回目のプロポーズ]]&lt;br /&gt;
*[[高校教師]]&lt;br /&gt;
*[[一つ屋根の下]]&lt;br /&gt;
*[[家なき子]]&lt;br /&gt;
*[[銭ゲバ]]&lt;br /&gt;
*[[世にも奇妙な物語]]&lt;br /&gt;
*[[ごくせん]]&lt;br /&gt;
*[[半沢直樹]]&lt;br /&gt;
*[[ロッカーの花子さん]]&lt;br /&gt;
*[[私の嫌いな探偵]]&lt;br /&gt;
*[[紙の月]]&lt;br /&gt;
*[[ライアーゲーム]]&lt;br /&gt;
*[[実験刑事トトリ]]&lt;br /&gt;
*[[「ハードナッツ！～数学girlの恋する事件簿～」]]&lt;br /&gt;
*[[恨みや本舗]]&lt;br /&gt;
*[[オリエント急行殺人事件]]&lt;br /&gt;
*'''[[ダメな私に恋して下さい]]'''&lt;br /&gt;
*[[ヒガンバナ]]&lt;br /&gt;
*[[孤独のグルメ]]&lt;br /&gt;
*[[深夜食堂]]&lt;br /&gt;
*[[忘却のサチコ]]&lt;br /&gt;
*[[ワカコ酒]]&lt;br /&gt;
*[[ルームロンダリング]]&lt;br /&gt;
*[[スナーク狩り]]&lt;br /&gt;
*[[レベル7]]&lt;br /&gt;
*[[緊急取調室]]&lt;br /&gt;
*[[シグナル]]&lt;br /&gt;
*[[過保護のカホコ]]&lt;br /&gt;
*[[Chef〜三ツ星の給食〜]]&lt;br /&gt;
*[[下克上受験]]&lt;br /&gt;
*[[99.9 -刑事専門弁護士-]]&lt;br /&gt;
*[[TOKYO MER〜走る緊急救命室〜]]&lt;br /&gt;
*[[ハコヅメ]]&lt;br /&gt;
*[[ドラゴン桜]]&lt;br /&gt;
*[[天国と地獄〜サイコな二人〜]]&lt;br /&gt;
*[[君と世界が終わる日に]]&lt;br /&gt;
*[[テセウスの船]]&lt;br /&gt;
*[[和田家のおとこたち]]&lt;br /&gt;
*[[日本沈没]]&lt;br /&gt;
*[[となりのチカラ]]&lt;br /&gt;
*[[ファーストペンギン]]&lt;br /&gt;
*[[イチケイのカラス]]&lt;br /&gt;
*[[ネメシス]]&lt;br /&gt;
*[[エルピス]]&lt;br /&gt;
*[[合理的にありえない]]&lt;br /&gt;
*[[LAST MAN]]&lt;br /&gt;
*[[PENDING TRAIN]]&lt;br /&gt;
*'''ドラマW長編'''&lt;br /&gt;
:*[[長い長い殺人]]&lt;br /&gt;
:*[[震度0]]&lt;br /&gt;
:*[[結婚詐欺師]]&lt;br /&gt;
:*[[蒼い瞳とニュアージュ]]&lt;br /&gt;
:*[[扉は閉ざされたまま]]&lt;br /&gt;
:*[[君の望む死に方]]&lt;br /&gt;
:*[[シリウスの道]]&lt;br /&gt;
:*[[6時間後に君は死ぬ]]&lt;br /&gt;
:*[[Go Ape ゴー・エイプ]]&lt;br /&gt;
:*[[結党！老人党]]&lt;br /&gt;
:*[[第三のミス〜まず石を投げよ〜]]&lt;br /&gt;
:*[[一応の推定]]&lt;br /&gt;
:*[[パーフェクト・ブルー]]&lt;br /&gt;
:*[[蛇のひと]]&lt;br /&gt;
:*[[横山秀夫サスペンス1:18番ホール2:誤報3:自伝4:他人の家]]&lt;br /&gt;
:*[[横山秀夫サスペンスⅡ 1:深追い2:引き継ぎ3:締め出し4:仕返し]]&lt;br /&gt;
:*[[なぜ君は絶望と闘えたのか]]&lt;br /&gt;
:*[[再生巨流]]&lt;br /&gt;
:*[[死刑基準]]&lt;br /&gt;
:*[[尾根のかなたに〜父と息子の日航機墜落事故〜]]&lt;br /&gt;
:*[[short cut]]&lt;br /&gt;
:*[[大空港2013]]&lt;br /&gt;
:*[[罪人の嘘]]&lt;br /&gt;
*'''連続ドラマW'''&lt;br /&gt;
:*[[隠蔽指令]]&lt;br /&gt;
:*[[空飛ぶタイヤ]]&lt;br /&gt;
:*[[プリズナー]]&lt;br /&gt;
:*[[パンドラ]]&lt;br /&gt;
:*[[パンドラII 飢餓列島]]&lt;br /&gt;
:*[[マークスの山]]&lt;br /&gt;
:*[[東野圭吾 幻夜]]&lt;br /&gt;
:*[[CO 移植コーディネーター]]&lt;br /&gt;
:*[[下町ロケット]]&lt;br /&gt;
:*[[造花の蜜]]&lt;br /&gt;
:*[[分身]]&lt;br /&gt;
:*[[推定有罪]]&lt;br /&gt;
:*[[罪と罰 A Falsified Romance]]&lt;br /&gt;
:*[[配達されたい私たち]]&lt;br /&gt;
:*[[震える牛]]&lt;br /&gt;
:*[[パンとスープとネコ日和]]&lt;br /&gt;
:*[[鍵のない夢を見る]]&lt;br /&gt;
*'''WOWOW ミッドナイト☆ドラマ'''&lt;br /&gt;
:*[[藤子・F・不二雄のパラレル・スペース]]&lt;br /&gt;
:*[[借王-銭の達人-]]&lt;br /&gt;
:*[[SOIL]]&lt;br /&gt;
:*[[TOKYO23〜サバイバルシティ]]&lt;br /&gt;
:*[[借王II-運命の報酬-]]&lt;br /&gt;
:*[[人間昆虫記]]&lt;br /&gt;
*[[踊る大捜査線]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''海外ドラマ(半分以上見たもの)'''===&lt;br /&gt;
　&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''韓流ドラマ(半分以上見たもの)'''===&lt;br /&gt;
*'''[[韓流ドラマ 全般]]'''&lt;br /&gt;
*'''[[トンイ]]'''&lt;br /&gt;
*[[イ・サン]]&lt;br /&gt;
*[[天命]]&lt;br /&gt;
*[[九家の書]](くがのしょ)&lt;br /&gt;
*[[伝説の医師 ホ・ジュン]]&lt;br /&gt;
*[[ペク・ドンス]]&lt;br /&gt;
*'''[[奇皇后]]'''(きこうごう)&lt;br /&gt;
*'''[[尊徳女王]]'''(そんどくじょおう)&lt;br /&gt;
*[[イニョプの道]]&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''音楽'''===&lt;br /&gt;
*[[全日本吹奏楽コンクール]]&lt;br /&gt;
*[[全日本マーチングコンテスト]]&lt;br /&gt;
●クラシック この分野の音楽に全く興味の無い人達にもお勧めしたい楽曲一覧 記事タイトルが微妙間違ってたりするのは後で修正予定。&lt;br /&gt;
:この分野は楽曲が様々な楽団に演奏してもらうために描かれているため、基本的には楽団オリジナルではなく、カヴァーする感じの演奏が多いです。アレンジしてしまったり、楽団メンバや指揮者独自の解釈によって演奏されます。&lt;br /&gt;
*'''[[アルメニアンダンス パートⅠ　リード]]''' '''★★大注目楽曲★★'''&lt;br /&gt;
*'''[[大阪俗用による幻想曲]] □'''&lt;br /&gt;
*[[パルス・モーションII]]&lt;br /&gt;
*[[饗応夫人 太宰治作「饗応夫人」のための音楽]]&lt;br /&gt;
*[[ベリーを摘んだらダンスにしよう]]&lt;br /&gt;
*[[雲のコラージュ]]&lt;br /&gt;
*[[ポップス・マーチ「すてきな日々」]]&lt;br /&gt;
*[[スターパズルマーチ]]&lt;br /&gt;
*[[マーチエイプリルメイ]]&lt;br /&gt;
*[[ムービングオン]]&lt;br /&gt;
*[[テイクオフ]]&lt;br /&gt;
*[[スプリングマーチ]]&lt;br /&gt;
*[[海兵隊]]&lt;br /&gt;
*[[ワシントンポスト]]&lt;br /&gt;
*[[雷神]]&lt;br /&gt;
*[[威風堂々]]&lt;br /&gt;
*[[星条旗よ永遠なれ]]&lt;br /&gt;
*[[美中の美]]&lt;br /&gt;
*[[士官候補生]]&lt;br /&gt;
*[[エルカピタン]]&lt;br /&gt;
*[[クシコスポスト]]&lt;br /&gt;
*[[そよ風のマーチ]]&lt;br /&gt;
*[[マーチ「オーシャン・ブルー」]]&lt;br /&gt;
*[[マーチ エレガント]]&lt;br /&gt;
*[[祝典行進曲　だん　いくま]]&lt;br /&gt;
*[[東京オリンピックマーチ　]]&lt;br /&gt;
*[[東京オリンピック ファンファーレ　]]&lt;br /&gt;
*[[栄冠は君に輝く 古関祐二]]&lt;br /&gt;
*[[歌劇 仮面舞踏会]] 組曲 仮面舞踏会&lt;br /&gt;
*[[歌劇 ガイーヌ]] 剣の舞&lt;br /&gt;
*[[歌劇 パリの喜び]]&lt;br /&gt;
*[[歌劇 コッペリア]]&lt;br /&gt;
*[[歌劇 アイーダ]]&lt;br /&gt;
*[[歌劇 白鳥の湖]]&lt;br /&gt;
*[[歌劇 カルメン]]&lt;br /&gt;
*[[歌劇 イーゴリ公]] ダッタン人(ポロヴィッツ族)の踊り&lt;br /&gt;
*[[神曲]]ダンテ「神曲」より 4.天国編&lt;br /&gt;
*[[G線上のアリア]]&lt;br /&gt;
*[[「カルミナ・ブラーナ」より「O Fortuna」 カール・オルフ]]&lt;br /&gt;
*[[「レクイエム」から「DIES IRAE」ヴェルディ]]&lt;br /&gt;
*[[ラプソディーインブルー]]&lt;br /&gt;
*[[エルサロンメヒコ]]&lt;br /&gt;
*[[カバレリアルスティカーナ]] 間奏曲&lt;br /&gt;
*[[ムーンライト セレナーデ]]&lt;br /&gt;
*[[イン ザ ムード]]&lt;br /&gt;
*[[オーバー ザ レインボウ]]&lt;br /&gt;
*[[トッカータとフーガ 二短調]]&lt;br /&gt;
*[[展覧会の絵]]&lt;br /&gt;
*[[はげ山の一夜]] 禿山の一夜&lt;br /&gt;
*[[くるみ割り人形]]&lt;br /&gt;
*[[大序曲 1812年]]&lt;br /&gt;
*[[３つのディベルティメント トマジ]]&lt;br /&gt;
*[[シバの女王ベルキス　レスピーギ]]&lt;br /&gt;
*[[教会のステンドグラス　レスピーギ]]&lt;br /&gt;
*[[ローマの松　レスピーギ]]&lt;br /&gt;
*[[ローマの祭り　レスピーギ]]&lt;br /&gt;
*[[ディオニソスの祭り　]]&lt;br /&gt;
*[[ダフニスとクロエ　ラヴェル]]&lt;br /&gt;
*[[スペイン狂詩曲　ラヴェル]]&lt;br /&gt;
*[[ボレロ　ラヴェル]]&lt;br /&gt;
*[[祝典序曲　ショスタコーヴッチ]]&lt;br /&gt;
*[[サウスランストリートパレード]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
●その他&lt;br /&gt;
*[[JUDY AND MARY]]&lt;br /&gt;
*[[THE BOOM]]&lt;br /&gt;
*[[Mr.Chileren]]&lt;br /&gt;
*[[9mm Paraberam Bullet]]&lt;br /&gt;
*[[Amazarashi]]&lt;br /&gt;
*[[THE COLLECTORS]]&lt;br /&gt;
*[[BONNY PINK]]&lt;br /&gt;
*[[東京事変]]&lt;br /&gt;
*[[椎名 林檎]]&lt;br /&gt;
*[[LIND BERG]]&lt;br /&gt;
*[[LINKIN PARK]]&lt;br /&gt;
*[[Cyndi Lauper]]&lt;br /&gt;
*[[OZZY OSBOURN]]&lt;br /&gt;
*[[GARNET CROW]]&lt;br /&gt;
*[[ゆず]]&lt;br /&gt;
*[[Globe]]&lt;br /&gt;
*[[B'z]]&lt;br /&gt;
*[[LAST ALLIANCE]]&lt;br /&gt;
*[[東京スカパラダイスオーケストラ]]&lt;br /&gt;
*[[上原 ひろみ]]&lt;br /&gt;
*[[いきものがかり]]&lt;br /&gt;
*[[SEKAI NO OWARI]]&lt;br /&gt;
*[[BUMP OF CHICKEN ]]&lt;br /&gt;
*[[ケツメイシ]]&lt;br /&gt;
*[[藍坊主]]&lt;br /&gt;
*[[渡辺 美里]]&lt;br /&gt;
*[[荒井 由美]]&lt;br /&gt;
*[[サザン オールスターズ]]&lt;br /&gt;
*[[原 由子]]&lt;br /&gt;
*[[supercell]]&lt;br /&gt;
*[[神聖かまってちゃん]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''遊び'''===&lt;br /&gt;
*[[麻雀]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''ゲーム'''===&lt;br /&gt;
*[[メガポリス]] MEGAPOLICE 箱庭系街作りゲーム&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[プライズゲーム]] いわゆるUFOキャッチャー 未確認飛行物体があやつれる訳ではないが、俗にいうUFOで操って商品をとるゲーム&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''ゲームセンター'''===&lt;br /&gt;
※ 管理人がよく行くお店です。会えるかもしれません。おやじ狩りとかしないで下さい。フリでもありません。お金持ちではありませんので、飛び跳ねても、あまりお金は出てこない体質です。基本メダルゲームコーナーで遊びます。タダで遊ぼうとは思わない主義です。あまり深く考えず遊ぶ。お金使ってでも遊んで面白いかがそのゲームの価値だとも思う。大型マスプッシャーともなると大体一台あたり軽の新車が買える値段以上はするので、養分になっても悔しいと思ったことは無いです。物によっては家が建つくらいの機種もあります。大事にしましょう。アーケードゲーム。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''大阪府'''&lt;br /&gt;
*[[ラウンドワン 高槻店]] 2023-07-14 最終調査日&lt;br /&gt;
::[[ラウンドワン 高槻店 ゲーム記録|ゲーム記録]]&lt;br /&gt;
*[[ラウンドワン 枚方店]] 2023-07-14 最終調査日&lt;br /&gt;
*[[ラウンドワン 守口店]] 2023-07-08 最終調査日&lt;br /&gt;
::[[ラウンドワン 守口店 ゲーム記録|ゲーム記録]]&lt;br /&gt;
*[[ラウンドワン 東大阪店]] 2023-07-20 最終調査日&lt;br /&gt;
*[[ラウンドワン 城東放出店]] 2023-07-20 最終調査日&lt;br /&gt;
*[[RakuichiRakuza イオン四条畷店]] 2023-07-03 最終調査日&lt;br /&gt;
*[[モーリーファンタジー イオンモール鶴見緑地店]] 2023-07-20 最終調査日&lt;br /&gt;
*[[モーリーファンタジー 四條畷店]] 2023-07-03 最終調査日&lt;br /&gt;
::[[モーリーファンタジー 四條畷店 ゲーム記録|ゲーム記録]]&lt;br /&gt;
*[[モーリーファンタジー 大日店]] 2023-07-08 最終調査日&lt;br /&gt;
*[[namco イオンモール鶴見緑地店]] 2023-07-20 最終調査日&lt;br /&gt;
*[[namco イオンモール大日店]] 2023-07-08 最終調査日&lt;br /&gt;
*[[YAZ 寝屋川店]] 2023-07-05 最終調査日&lt;br /&gt;
::[[YAZ 寝屋川店 ゲーム記録|ゲーム記録]]&lt;br /&gt;
*[[セガワールド ビバホーム寝屋川店]] 屋号変更&lt;br /&gt;
*[[GiGO(ギーゴ) 東大阪店]] 2023-07-20 最終調査日&lt;br /&gt;
*[[GiGO(ギーゴ) ビバホーム寝屋川店]] 2023-06-20 最終調査日&lt;br /&gt;
::■[[GiGO(ギーゴ) ビバホーム寝屋川店 ゲーム記録|ゲーム記録]]&lt;br /&gt;
*[[アミパラ 大東店]]  2023-07-03 最終調査日&lt;br /&gt;
::[[アミパラ 大東店 ゲーム記録|ゲーム記録]]&lt;br /&gt;
*[[アミパラ 守口店]] 2023-07-08 最終調査日&lt;br /&gt;
::[[アミパラ 守口店 ゲーム記録|ゲーム記録]]&lt;br /&gt;
*[[タイトーステーション 住道店]] 2023-07-20 最終調査日&lt;br /&gt;
::[[タイトーステーション 住道店 ゲーム記録|ゲーム記録]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''三重県'''&lt;br /&gt;
*[[ラウンドワン みえ川越IC店]] 2013-05-25 最終調査日&lt;br /&gt;
*[[namco イオン桑名SC店]] 2013-05-25 最終調査日&lt;br /&gt;
*[[ゲームオフ 四日市店]] 閉鎖&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
==='''スロット　複数回打った機種'''===&lt;br /&gt;
*[[スロット一般]]&lt;br /&gt;
*[[ドリームセブンジュニア]]&lt;br /&gt;
*[[スーパーバニーガール]]&lt;br /&gt;
*[[クランキーコンドル]]&lt;br /&gt;
*[[ニューパルサー]]&lt;br /&gt;
*[[花火]]&lt;br /&gt;
*[[ゲッターマウス]]&lt;br /&gt;
*[[ゲッターマウス２]]&lt;br /&gt;
*[[ウルトラマン倶楽部]]&lt;br /&gt;
*[[B-MAX]]&lt;br /&gt;
*[[ゴールデンベル]]&lt;br /&gt;
*[[花月]]&lt;br /&gt;
*[[サンダー]]&lt;br /&gt;
*[[バーサス]]&lt;br /&gt;
*[[イプシロンR]]&lt;br /&gt;
*[[アストロライナー7]]&lt;br /&gt;
*[[ドクターA7]]&lt;br /&gt;
*[[タイムクロスA]]&lt;br /&gt;
*[[タイムパーク]]&lt;br /&gt;
*[[サクセション]]&lt;br /&gt;
*[[ペンギンパラダイス]]&lt;br /&gt;
*[[キングパルサー]]&lt;br /&gt;
*[[サイバードラゴン]]&lt;br /&gt;
*[[大花火]]&lt;br /&gt;
*[[花火百景E]]&lt;br /&gt;
*[[花火の親方]]&lt;br /&gt;
*[[緑ドン VIVA!情熱南米編]]&lt;br /&gt;
*[[ALEX]]&lt;br /&gt;
*[[グランシエル]]&lt;br /&gt;
*[[クラブロデオ]]&lt;br /&gt;
*[[サラリーマン金太郎]]&lt;br /&gt;
*[[獣王]]&lt;br /&gt;
*[[アラジンA]]&lt;br /&gt;
*[[ナイツ]]&lt;br /&gt;
*[[ハイパーラッシュ]]&lt;br /&gt;
*[[巨人の星]]&lt;br /&gt;
*[[ハードボイルド]]&lt;br /&gt;
*[[ガメラ]]&lt;br /&gt;
*[[アステカ]]&lt;br /&gt;
*[[バベル]]&lt;br /&gt;
*[[ダイナマイト]]&lt;br /&gt;
*[[マリーンバトル]]&lt;br /&gt;
*[[吉宗]]&lt;br /&gt;
*[[番長]]&lt;br /&gt;
*[[ネオプラネット]]&lt;br /&gt;
*[[スーパーリノ]]&lt;br /&gt;
*[[ダブルチャレンジ]]&lt;br /&gt;
*[[爆裂王]]&lt;br /&gt;
*[[スロット 北斗の拳]]&lt;br /&gt;
*[[猛獣王]]&lt;br /&gt;
*[[ミリオンゴッド]]&lt;br /&gt;
*[[スーパーブラックジャック]]&lt;br /&gt;
*[[リオデカーニバル]]&lt;br /&gt;
*[[スパイガール]]&lt;br /&gt;
*[[バジリスク〜甲賀忍法帖〜]]&lt;br /&gt;
*[[鬼武者]]&lt;br /&gt;
*[[旋風の用心棒]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[パチスロ交響詩篇エウレカセブン]]&lt;br /&gt;
*[[スロット 攻殻機動隊]]&lt;br /&gt;
*[[スロット BLOOD+]]&lt;br /&gt;
*[[マジカルハロウィン]]&lt;br /&gt;
*[[マジカルハロウィンR]]&lt;br /&gt;
*[[マジカルハロウィン2]]&lt;br /&gt;
*[[マジカルハロウィン3]]&lt;br /&gt;
*[[マジカルハロウィン4]]&lt;br /&gt;
*[[マジカルハロウィン5]]&lt;br /&gt;
*[[快盗天使ツインエンジェル]]&lt;br /&gt;
*[[快盗天使ツインエンジェル2]]&lt;br /&gt;
*[[快盗天使ツインエンジェル3]]&lt;br /&gt;
*[[機動戦士ガンダムⅢ　めぐりあい宇宙編]]&lt;br /&gt;
*[[ミリオンゴッド～神々の系譜～]]&lt;br /&gt;
*[[ミリオンゴッド～神々の系譜～ZEUS ver.]]&lt;br /&gt;
*[[秘宝伝〜封じられた女神〜]]&lt;br /&gt;
*[[忍魂]]&lt;br /&gt;
*[[SLOT魔法少女まどか☆マギカ]]&lt;br /&gt;
*■[[B-MAX(5号機)]]&lt;br /&gt;
*[[スタードライブ]]&lt;br /&gt;
*[[アナザーゴッドオブハーデス]]&lt;br /&gt;
*[[ミリオンゴッド～神々の凱旋～]]&lt;br /&gt;
*[[キングハナハナ]]&lt;br /&gt;
*[[クイーンハナハナ]]&lt;br /&gt;
*[[SLOT魔法少女まどか☆マギカ2]]&lt;br /&gt;
*[[スーパービンゴ プレミアム]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[アナザーゴッドオブハーデス解き放たれし槍撃]]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
== '''現在はWikiMediaシステム半壊状態→かなり解決したので、[[MediaWiki]]に記録を移しました。''' ==&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
== '''MediaWiki編集 記述手法''' ==&lt;br /&gt;
*[[SyntaxHighLight Lang]]&lt;br /&gt;
*[[よく使う記法 マーカー]]&lt;br /&gt;
*[[文字の16進表記]]&lt;br /&gt;
*[[MediaWiki記述 よく使う表の形式]]&lt;br /&gt;
*[[Highlight.jsの編集方法について]]&lt;br /&gt;
&lt;br /&gt;
== '''yonewiki(よねwiki)について''' ==&lt;br /&gt;
　個人的に興味のあることをまとめようとするwikiです。本家wikiとは全く異なる性質の情報になっています。ほとんどが書きかけの記事ですが、次第に埋まっていく予定です。管理人の知識がいかに狭くて浅いものであるかが、じっくりと味わえるwikiになっています。もし、この中に誰かのお役に立てる知識があったのであれば、幸せなことであります。少なくとも管理人(自分)が面白いと思った事をまとめて記事にしているはずなので、世の中がつまらないと感じている人は、ひとつづつ拾い上げていってもらえればどこかで共感していただけるかもしれません。蓄積型の記事ですので、意外と有用です。管理人の趣味や知識のほぼ全容がタダで読めるなんて！記事が無くてもタイトルだけでも有り難いことです。どこが？ 160801時点で'''46万[PV](460,000[PV])を超えました！その後、79万PVも突破。更に281万PVも超えました。たぶん、多くの来客者はロボットなんでしょうけど…'''やる気でるね♪人知れず役にたっているのかもしれない。その後、www.yo-net.jp/yonewikiから wiki.yo-net.jpにシステムを移動させました。そこでカウンターをリセットしてから、PageViewの伸びが鈍化するという事態に。引っ越し失敗した感じです。Googleから低評価をうけるサイトに生まれ変わりました。しょうがないっすね。またすこしづづ頑張ります。リセットして今は13万PageViewくらいですかね。あいたたたた。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　最近は、世の中の役に立つ崇高なWebSiteだと勘違いしているフシがあります。このWebSiteは無くても何ら問題はないのでしょうけれど。気を引き締めて記事を書いていきたいと思います。人知れず、役に立ちたい。&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[yonewikiについて履歴150220]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[既定のメインページ]]&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:15_MAX7219_LED%E3%83%89%E3%83%83%E3%83%88%E8%A1%8C%E5%88%97%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14201</id>
		<title>Arduino Mega 2560 LESSON:15 MAX7219 LEDドット行列モジュール</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:15_MAX7219_LED%E3%83%89%E3%83%83%E3%83%88%E8%A1%8C%E5%88%97%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14201"/>
		<updated>2026-10-22T14:13:54Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: ページの作成:「&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;script&amp;gt;     // 最初に実行されるスクリプト     document.addEventListener('DOMContentLoaded', () =&amp;gt; {       const observer = new MutationObserver((mutations) =&amp;gt; {         mutations.forEach((mutation) =&amp;gt; {           mutation.addedNodes.forEach((node) =&amp;gt; {             if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {                 // JavaScriptコードを変換                 const originalCode = node.textContent;…」&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;　&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560&amp;diff=14200</id>
		<title>Arduino Mega 2560</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560&amp;diff=14200"/>
		<updated>2026-10-22T14:13:35Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[メインページ#電子回路工学]]に戻る。&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　Mega 2560は非営利団体Arduino Foundationや営利団体Arduino Holdingが管理するマイクロコンピュータです。ELEGOOがこのマイクロコンピュータのスターターキットを販売していて、いろいろ部品がついてきて5000円ほどで手に入る。電子工作初心者向けのキットです。ELEGOO Mega 2560のスターターキットには30のレッスン項目があるので、レッスンの実験体験記事をここに残す感じになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://link.amazon/A05YVziyD ELEGOO Mega 2560スターターキット]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
== '''体験記事''' ==&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:0 Arduino IDEの導入]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:2 Board上のLEDの点滅速度の調整]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:3 異なる値の抵抗を使用してLEDの輝度を変更する]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:4 RGB LED]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:5 LEDをオン/オフするためにデジタル入力付きのプッシュボタンを使用する方法]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:6 アクティブブザー]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:7 パッシブブザー]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:8 チルトボールスイッチ]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:9 サーボ]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:10 超音波センサーモジュール]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:11 メンブレンスイッチ]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:13 ジョイスティック]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:14 赤外線受信モジュール]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:15 MAX7219 LEDドット行列モジュール]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;　&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[メインページ#電子回路工学]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:14_%E8%B5%A4%E5%A4%96%E7%B7%9A%E5%8F%97%E4%BF%A1%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14199</id>
		<title>Arduino Mega 2560 LESSON:14 赤外線受信モジュール</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:14_%E8%B5%A4%E5%A4%96%E7%B7%9A%E5%8F%97%E4%BF%A1%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14199"/>
		<updated>2026-10-22T13:56:47Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　赤外線受信モジュールを接続するレッスンです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　完成図は以下のとおりです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L14 01 完成図.jpg|380px||none|完成図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KiCADで追加した部品&lt;br /&gt;
&lt;br /&gt;
*Conn_01x03：Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector)&lt;br /&gt;
*+5V&lt;br /&gt;
*GND&lt;br /&gt;
*PWR_FLAG&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KiCADで追加したフットプリント&lt;br /&gt;
&lt;br /&gt;
*Conn_01x03：Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical&lt;br /&gt;
*Conn_01x03：Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　PCB図は以下のようなもの。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 03 PCB図.png|380px||none|PCB図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　3DPreview図は以下のようなもの。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 04 3DPreview図.png|380px||none|3DPreview図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　コードは以下のとおりです。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2023.05.05&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;IRremote.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int receiver = 11; // Signal Pin of IR receiver to Arduino Digital Pin 11&lt;br /&gt;
&lt;br /&gt;
/*-----( Declare objects )-----*/&lt;br /&gt;
IRrecv irrecv(receiver);     // create instance of 'irrecv'&lt;br /&gt;
//vairable uses to store the last decodedRawData&lt;br /&gt;
uint32_t last_decodedRawData = 0;&lt;br /&gt;
/*-----( Function )-----*/&lt;br /&gt;
void translateIR() // takes action based on IR code received&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // 受信したプロトコル名を表示&lt;br /&gt;
  Serial.print(&amp;quot;Protocol: &amp;quot;);&lt;br /&gt;
  Serial.println(getProtocolString(irrecv.decodedIRData.protocol));&lt;br /&gt;
&lt;br /&gt;
  // Check if it is a repeat IR code &lt;br /&gt;
  if (irrecv.decodedIRData.flags)&lt;br /&gt;
  {&lt;br /&gt;
    //set the current decodedRawData to the last decodedRawData &lt;br /&gt;
    irrecv.decodedIRData.decodedRawData = last_decodedRawData;&lt;br /&gt;
    Serial.println(&amp;quot;REPEAT!&amp;quot;);&lt;br /&gt;
  } else&lt;br /&gt;
  {&lt;br /&gt;
    //output the IR code on the serial monitor&lt;br /&gt;
    Serial.print(&amp;quot;IR code:0x&amp;quot;);&lt;br /&gt;
    Serial.println(irrecv.decodedIRData.decodedRawData, HEX);&lt;br /&gt;
  }&lt;br /&gt;
  //map the IR code to the remote key&lt;br /&gt;
  switch (irrecv.decodedIRData.decodedRawData)&lt;br /&gt;
  {&lt;br /&gt;
    //標準NECプロトコル&lt;br /&gt;
    case 0xBA45FF00: Serial.println(&amp;quot;POWER&amp;quot;); break;&lt;br /&gt;
    case 0xB847FF00: Serial.println(&amp;quot;FUNC/STOP&amp;quot;); break;&lt;br /&gt;
    case 0xB946FF00: Serial.println(&amp;quot;VOL+&amp;quot;); break;&lt;br /&gt;
    case 0xBB44FF00: Serial.println(&amp;quot;FAST BACK&amp;quot;);    break;&lt;br /&gt;
    case 0xBF40FF00: Serial.println(&amp;quot;PAUSE&amp;quot;);    break;&lt;br /&gt;
    case 0xBC43FF00: Serial.println(&amp;quot;FAST FORWARD&amp;quot;);   break;&lt;br /&gt;
    case 0xF807FF00: Serial.println(&amp;quot;DOWN&amp;quot;);    break;&lt;br /&gt;
    case 0xEA15FF00: Serial.println(&amp;quot;VOL-&amp;quot;);    break;&lt;br /&gt;
    case 0xF609FF00: Serial.println(&amp;quot;UP&amp;quot;);    break;&lt;br /&gt;
    case 0xE619FF00: Serial.println(&amp;quot;EQ&amp;quot;);    break;&lt;br /&gt;
    case 0xF20DFF00: Serial.println(&amp;quot;ST/REPT&amp;quot;);    break;&lt;br /&gt;
    case 0xE916FF00: Serial.println(&amp;quot;0&amp;quot;);    break;&lt;br /&gt;
    case 0xF30CFF00: Serial.println(&amp;quot;1&amp;quot;);    break;&lt;br /&gt;
    case 0xE718FF00: Serial.println(&amp;quot;2&amp;quot;);    break;&lt;br /&gt;
    case 0xA15EFF00: Serial.println(&amp;quot;3&amp;quot;);    break;&lt;br /&gt;
    case 0xF708FF00: Serial.println(&amp;quot;4&amp;quot;);    break;&lt;br /&gt;
    case 0xE31CFF00: Serial.println(&amp;quot;5&amp;quot;);    break;&lt;br /&gt;
    case 0xA55AFF00: Serial.println(&amp;quot;6&amp;quot;);    break;&lt;br /&gt;
    case 0xBD42FF00: Serial.println(&amp;quot;7&amp;quot;);    break;&lt;br /&gt;
    case 0xAD52FF00: Serial.println(&amp;quot;8&amp;quot;);    break;&lt;br /&gt;
    case 0xB54AFF00: Serial.println(&amp;quot;9&amp;quot;);    break;&lt;br /&gt;
    default:&lt;br /&gt;
      Serial.println(&amp;quot; other button   &amp;quot;);&lt;br /&gt;
  }// End Case&lt;br /&gt;
  //store the last decodedRawData&lt;br /&gt;
  last_decodedRawData = irrecv.decodedIRData.decodedRawData;&lt;br /&gt;
  delay(500); // Do not get immediate repeat&lt;br /&gt;
} //END translateIR&lt;br /&gt;
&lt;br /&gt;
void setup()   /*----( SETUP: RUNS ONCE )----*/&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  Serial.println(&amp;quot;IR Receiver Button Decode&amp;quot;);&lt;br /&gt;
  irrecv.enableIRIn(); // Start the receiver&lt;br /&gt;
&lt;br /&gt;
}/*--(end setup )---*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/&lt;br /&gt;
{&lt;br /&gt;
  if (irrecv.decode()) // have we received an IR signal?&lt;br /&gt;
  {&lt;br /&gt;
    translateIR();&lt;br /&gt;
    irrecv.resume(); // receive the next value&lt;br /&gt;
  }&lt;br /&gt;
}/* --(end main loop )-- */&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　いろいろなリモコンコードを取得するのは以下のコード&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;#define RAW_BUFFER_LENGTH 750&lt;br /&gt;
#include &amp;lt;IRremote.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const int IR_RECEIVE_PIN = 11;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
&lt;br /&gt;
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&amp;quot;IR Remote Analyzer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;TV / Recorder / Air Conditioner&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;Toshiba / Daikin signal investigation&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (IrReceiver.decode()) {&lt;br /&gt;
&lt;br /&gt;
    Serial.println();&lt;br /&gt;
    Serial.println(&amp;quot;============================&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // 受信バッファが足りなかった場合&lt;br /&gt;
    if (IrReceiver.decodedIRData.flags &amp;amp;&lt;br /&gt;
        IRDATA_FLAGS_WAS_OVERFLOW) {&lt;br /&gt;
      Serial.println(&amp;quot;WARNING: Buffer overflow!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ライブラリによるプロトコル解析&lt;br /&gt;
    IrReceiver.printIRResultShort(&amp;amp;Serial);&lt;br /&gt;
&lt;br /&gt;
    // 受信ビット数&lt;br /&gt;
    Serial.print(&amp;quot;Bits: &amp;quot;);&lt;br /&gt;
    Serial.println(IrReceiver.decodedIRData.numberOfBits);&lt;br /&gt;
&lt;br /&gt;
    // リピート判定&lt;br /&gt;
    if (IrReceiver.decodedIRData.flags &amp;amp;&lt;br /&gt;
        IRDATA_FLAGS_IS_REPEAT) {&lt;br /&gt;
      Serial.println(&amp;quot;Repeat signal&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 生のパルスデータ&lt;br /&gt;
    Serial.println(&amp;quot;--- Raw Timing ---&amp;quot;);&lt;br /&gt;
    IrReceiver.printIRResultRawFormatted(&amp;amp;Serial, true);&lt;br /&gt;
&lt;br /&gt;
    Serial.println(&amp;quot;============================&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    IrReceiver.resume();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ライブラリを使わないIR読み取りコードは以下のとおりです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;const byte IR_PIN = 2;&lt;br /&gt;
&lt;br /&gt;
// 許容するパルス幅（マイクロ秒）&lt;br /&gt;
const unsigned long TIMEOUT_US = 12000;&lt;br /&gt;
&lt;br /&gt;
// 指定したレベルが続いた時間を測定する&lt;br /&gt;
// タイムアウトした場合は0を返す&lt;br /&gt;
unsigned long measurePulse(byte level) {&lt;br /&gt;
  unsigned long start = micros();&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(IR_PIN) == level) {&lt;br /&gt;
    if (micros() - start &amp;gt; TIMEOUT_US) {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return micros() - start;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// NEC信号の読み取り&lt;br /&gt;
bool readNEC(uint32_t &amp;amp;data) {&lt;br /&gt;
  // リーダーMARK（約9000us）&lt;br /&gt;
  unsigned long mark = measurePulse(LOW);&lt;br /&gt;
  if (mark &amp;lt; 8000 || mark &amp;gt; 11000) return false;&lt;br /&gt;
&lt;br /&gt;
  // リーダーSPACE（約4500us）&lt;br /&gt;
  unsigned long space = measurePulse(HIGH);&lt;br /&gt;
  if (space &amp;lt; 3500 || space &amp;gt; 6000) return false;&lt;br /&gt;
&lt;br /&gt;
  data = 0;&lt;br /&gt;
&lt;br /&gt;
  // NECは32ビット、LSBから送信&lt;br /&gt;
  for (byte i = 0; i &amp;lt; 32; i++) {&lt;br /&gt;
&lt;br /&gt;
    // データMARK（約560us）&lt;br /&gt;
    mark = measurePulse(LOW);&lt;br /&gt;
    if (mark &amp;lt; 300 || mark &amp;gt; 900) return false;&lt;br /&gt;
&lt;br /&gt;
    // データSPACE&lt;br /&gt;
    space = measurePulse(HIGH);&lt;br /&gt;
&lt;br /&gt;
    if (space &amp;gt;= 300 &amp;amp;&amp;amp; space &amp;lt; 1000) {&lt;br /&gt;
      // ビット0&lt;br /&gt;
    }&lt;br /&gt;
    else if (space &amp;gt;= 1200 &amp;amp;&amp;amp; space &amp;lt; 2200) {&lt;br /&gt;
      // ビット1&lt;br /&gt;
      data |= (uint32_t)1 &amp;lt;&amp;lt; i;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 最後のMARK（約560us）&lt;br /&gt;
  mark = measurePulse(LOW);&lt;br /&gt;
  if (mark &amp;lt; 300 || mark &amp;gt; 900) return false;&lt;br /&gt;
&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(IR_PIN, INPUT);&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  Serial.println(&amp;quot;NEC Receiver Ready&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // 通常はHIGH、受信開始でLOWになる&lt;br /&gt;
  if (digitalRead(IR_PIN) == LOW) {&lt;br /&gt;
&lt;br /&gt;
    uint32_t rawData;&lt;br /&gt;
&lt;br /&gt;
    if (readNEC(rawData)) {&lt;br /&gt;
      Serial.print(&amp;quot;RAW: 0x&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      // 8桁の16進数で表示&lt;br /&gt;
      for (int i = 7; i &amp;gt;= 0; i--) {&lt;br /&gt;
        byte nibble = (rawData &amp;gt;&amp;gt; (i * 4)) &amp;amp; 0x0F;&lt;br /&gt;
        Serial.print(nibble, HEX);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      Serial.println();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:14_%E8%B5%A4%E5%A4%96%E7%B7%9A%E5%8F%97%E4%BF%A1%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14198</id>
		<title>Arduino Mega 2560 LESSON:14 赤外線受信モジュール</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:14_%E8%B5%A4%E5%A4%96%E7%B7%9A%E5%8F%97%E4%BF%A1%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14198"/>
		<updated>2026-10-22T08:24:32Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　赤外線受信モジュールを接続するレッスンです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　完成図は以下のとおりです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L14 01 完成図.jpg|380px||none|完成図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KiCADで追加した部品&lt;br /&gt;
&lt;br /&gt;
*Conn_01x03：Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector)&lt;br /&gt;
*+5V&lt;br /&gt;
*GND&lt;br /&gt;
*PWR_FLAG&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KiCADで追加したフットプリント&lt;br /&gt;
&lt;br /&gt;
*Conn_01x03：Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical&lt;br /&gt;
*Conn_01x03：Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　PCB図は以下のようなもの。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 03 PCB図.png|380px||none|PCB図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　3DPreview図は以下のようなもの。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 04 3DPreview図.png|380px||none|3DPreview図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　コードは以下のとおりです。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2023.05.05&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;IRremote.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int receiver = 11; // Signal Pin of IR receiver to Arduino Digital Pin 11&lt;br /&gt;
&lt;br /&gt;
/*-----( Declare objects )-----*/&lt;br /&gt;
IRrecv irrecv(receiver);     // create instance of 'irrecv'&lt;br /&gt;
//vairable uses to store the last decodedRawData&lt;br /&gt;
uint32_t last_decodedRawData = 0;&lt;br /&gt;
/*-----( Function )-----*/&lt;br /&gt;
void translateIR() // takes action based on IR code received&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // 受信したプロトコル名を表示&lt;br /&gt;
  Serial.print(&amp;quot;Protocol: &amp;quot;);&lt;br /&gt;
  Serial.println(getProtocolString(irrecv.decodedIRData.protocol));&lt;br /&gt;
&lt;br /&gt;
  // Check if it is a repeat IR code &lt;br /&gt;
  if (irrecv.decodedIRData.flags)&lt;br /&gt;
  {&lt;br /&gt;
    //set the current decodedRawData to the last decodedRawData &lt;br /&gt;
    irrecv.decodedIRData.decodedRawData = last_decodedRawData;&lt;br /&gt;
    Serial.println(&amp;quot;REPEAT!&amp;quot;);&lt;br /&gt;
  } else&lt;br /&gt;
  {&lt;br /&gt;
    //output the IR code on the serial monitor&lt;br /&gt;
    Serial.print(&amp;quot;IR code:0x&amp;quot;);&lt;br /&gt;
    Serial.println(irrecv.decodedIRData.decodedRawData, HEX);&lt;br /&gt;
  }&lt;br /&gt;
  //map the IR code to the remote key&lt;br /&gt;
  switch (irrecv.decodedIRData.decodedRawData)&lt;br /&gt;
  {&lt;br /&gt;
    //標準NECプロトコル&lt;br /&gt;
    case 0xBA45FF00: Serial.println(&amp;quot;POWER&amp;quot;); break;&lt;br /&gt;
    case 0xB847FF00: Serial.println(&amp;quot;FUNC/STOP&amp;quot;); break;&lt;br /&gt;
    case 0xB946FF00: Serial.println(&amp;quot;VOL+&amp;quot;); break;&lt;br /&gt;
    case 0xBB44FF00: Serial.println(&amp;quot;FAST BACK&amp;quot;);    break;&lt;br /&gt;
    case 0xBF40FF00: Serial.println(&amp;quot;PAUSE&amp;quot;);    break;&lt;br /&gt;
    case 0xBC43FF00: Serial.println(&amp;quot;FAST FORWARD&amp;quot;);   break;&lt;br /&gt;
    case 0xF807FF00: Serial.println(&amp;quot;DOWN&amp;quot;);    break;&lt;br /&gt;
    case 0xEA15FF00: Serial.println(&amp;quot;VOL-&amp;quot;);    break;&lt;br /&gt;
    case 0xF609FF00: Serial.println(&amp;quot;UP&amp;quot;);    break;&lt;br /&gt;
    case 0xE619FF00: Serial.println(&amp;quot;EQ&amp;quot;);    break;&lt;br /&gt;
    case 0xF20DFF00: Serial.println(&amp;quot;ST/REPT&amp;quot;);    break;&lt;br /&gt;
    case 0xE916FF00: Serial.println(&amp;quot;0&amp;quot;);    break;&lt;br /&gt;
    case 0xF30CFF00: Serial.println(&amp;quot;1&amp;quot;);    break;&lt;br /&gt;
    case 0xE718FF00: Serial.println(&amp;quot;2&amp;quot;);    break;&lt;br /&gt;
    case 0xA15EFF00: Serial.println(&amp;quot;3&amp;quot;);    break;&lt;br /&gt;
    case 0xF708FF00: Serial.println(&amp;quot;4&amp;quot;);    break;&lt;br /&gt;
    case 0xE31CFF00: Serial.println(&amp;quot;5&amp;quot;);    break;&lt;br /&gt;
    case 0xA55AFF00: Serial.println(&amp;quot;6&amp;quot;);    break;&lt;br /&gt;
    case 0xBD42FF00: Serial.println(&amp;quot;7&amp;quot;);    break;&lt;br /&gt;
    case 0xAD52FF00: Serial.println(&amp;quot;8&amp;quot;);    break;&lt;br /&gt;
    case 0xB54AFF00: Serial.println(&amp;quot;9&amp;quot;);    break;&lt;br /&gt;
    default:&lt;br /&gt;
      Serial.println(&amp;quot; other button   &amp;quot;);&lt;br /&gt;
  }// End Case&lt;br /&gt;
  //store the last decodedRawData&lt;br /&gt;
  last_decodedRawData = irrecv.decodedIRData.decodedRawData;&lt;br /&gt;
  delay(500); // Do not get immediate repeat&lt;br /&gt;
} //END translateIR&lt;br /&gt;
&lt;br /&gt;
void setup()   /*----( SETUP: RUNS ONCE )----*/&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  Serial.println(&amp;quot;IR Receiver Button Decode&amp;quot;);&lt;br /&gt;
  irrecv.enableIRIn(); // Start the receiver&lt;br /&gt;
&lt;br /&gt;
}/*--(end setup )---*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/&lt;br /&gt;
{&lt;br /&gt;
  if (irrecv.decode()) // have we received an IR signal?&lt;br /&gt;
  {&lt;br /&gt;
    translateIR();&lt;br /&gt;
    irrecv.resume(); // receive the next value&lt;br /&gt;
  }&lt;br /&gt;
}/* --(end main loop )-- */&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　いろいろなリモコンコードを取得するのは以下のコード&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;#define RAW_BUFFER_LENGTH 750&lt;br /&gt;
#include &amp;lt;IRremote.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const int IR_RECEIVE_PIN = 11;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
&lt;br /&gt;
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&amp;quot;IR Remote Analyzer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;TV / Recorder / Air Conditioner&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;Toshiba / Daikin signal investigation&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (IrReceiver.decode()) {&lt;br /&gt;
&lt;br /&gt;
    Serial.println();&lt;br /&gt;
    Serial.println(&amp;quot;============================&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // 受信バッファが足りなかった場合&lt;br /&gt;
    if (IrReceiver.decodedIRData.flags &amp;amp;&lt;br /&gt;
        IRDATA_FLAGS_WAS_OVERFLOW) {&lt;br /&gt;
      Serial.println(&amp;quot;WARNING: Buffer overflow!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ライブラリによるプロトコル解析&lt;br /&gt;
    IrReceiver.printIRResultShort(&amp;amp;Serial);&lt;br /&gt;
&lt;br /&gt;
    // 受信ビット数&lt;br /&gt;
    Serial.print(&amp;quot;Bits: &amp;quot;);&lt;br /&gt;
    Serial.println(IrReceiver.decodedIRData.numberOfBits);&lt;br /&gt;
&lt;br /&gt;
    // リピート判定&lt;br /&gt;
    if (IrReceiver.decodedIRData.flags &amp;amp;&lt;br /&gt;
        IRDATA_FLAGS_IS_REPEAT) {&lt;br /&gt;
      Serial.println(&amp;quot;Repeat signal&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 生のパルスデータ&lt;br /&gt;
    Serial.println(&amp;quot;--- Raw Timing ---&amp;quot;);&lt;br /&gt;
    IrReceiver.printIRResultRawFormatted(&amp;amp;Serial, true);&lt;br /&gt;
&lt;br /&gt;
    Serial.println(&amp;quot;============================&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    IrReceiver.resume();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L14_01_%E5%AE%8C%E6%88%90%E5%9B%B3.jpg&amp;diff=14197</id>
		<title>ファイル:Mega2560 L14 01 完成図.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L14_01_%E5%AE%8C%E6%88%90%E5%9B%B3.jpg&amp;diff=14197"/>
		<updated>2026-10-22T08:23:25Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:14_%E8%B5%A4%E5%A4%96%E7%B7%9A%E5%8F%97%E4%BF%A1%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14196</id>
		<title>Arduino Mega 2560 LESSON:14 赤外線受信モジュール</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:14_%E8%B5%A4%E5%A4%96%E7%B7%9A%E5%8F%97%E4%BF%A1%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14196"/>
		<updated>2026-10-21T15:24:12Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　赤外線受信モジュールを接続するレッスンです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　完成図は以下のとおりです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KiCADで追加した部品&lt;br /&gt;
&lt;br /&gt;
*Conn_01x03：Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector)&lt;br /&gt;
*+5V&lt;br /&gt;
*GND&lt;br /&gt;
*PWR_FLAG&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KiCADで追加したフットプリント&lt;br /&gt;
&lt;br /&gt;
*Conn_01x03：Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical&lt;br /&gt;
*Conn_01x03：Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　PCB図は以下のようなもの。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 03 PCB図.png|380px||none|PCB図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　3DPreview図は以下のようなもの。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 04 3DPreview図.png|380px||none|3DPreview図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　コードは以下のとおりです。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2023.05.05&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;IRremote.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int receiver = 11; // Signal Pin of IR receiver to Arduino Digital Pin 11&lt;br /&gt;
&lt;br /&gt;
/*-----( Declare objects )-----*/&lt;br /&gt;
IRrecv irrecv(receiver);     // create instance of 'irrecv'&lt;br /&gt;
//vairable uses to store the last decodedRawData&lt;br /&gt;
uint32_t last_decodedRawData = 0;&lt;br /&gt;
/*-----( Function )-----*/&lt;br /&gt;
void translateIR() // takes action based on IR code received&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // 受信したプロトコル名を表示&lt;br /&gt;
  Serial.print(&amp;quot;Protocol: &amp;quot;);&lt;br /&gt;
  Serial.println(getProtocolString(irrecv.decodedIRData.protocol));&lt;br /&gt;
&lt;br /&gt;
  // Check if it is a repeat IR code &lt;br /&gt;
  if (irrecv.decodedIRData.flags)&lt;br /&gt;
  {&lt;br /&gt;
    //set the current decodedRawData to the last decodedRawData &lt;br /&gt;
    irrecv.decodedIRData.decodedRawData = last_decodedRawData;&lt;br /&gt;
    Serial.println(&amp;quot;REPEAT!&amp;quot;);&lt;br /&gt;
  } else&lt;br /&gt;
  {&lt;br /&gt;
    //output the IR code on the serial monitor&lt;br /&gt;
    Serial.print(&amp;quot;IR code:0x&amp;quot;);&lt;br /&gt;
    Serial.println(irrecv.decodedIRData.decodedRawData, HEX);&lt;br /&gt;
  }&lt;br /&gt;
  //map the IR code to the remote key&lt;br /&gt;
  switch (irrecv.decodedIRData.decodedRawData)&lt;br /&gt;
  {&lt;br /&gt;
    //標準NECプロトコル&lt;br /&gt;
    case 0xBA45FF00: Serial.println(&amp;quot;POWER&amp;quot;); break;&lt;br /&gt;
    case 0xB847FF00: Serial.println(&amp;quot;FUNC/STOP&amp;quot;); break;&lt;br /&gt;
    case 0xB946FF00: Serial.println(&amp;quot;VOL+&amp;quot;); break;&lt;br /&gt;
    case 0xBB44FF00: Serial.println(&amp;quot;FAST BACK&amp;quot;);    break;&lt;br /&gt;
    case 0xBF40FF00: Serial.println(&amp;quot;PAUSE&amp;quot;);    break;&lt;br /&gt;
    case 0xBC43FF00: Serial.println(&amp;quot;FAST FORWARD&amp;quot;);   break;&lt;br /&gt;
    case 0xF807FF00: Serial.println(&amp;quot;DOWN&amp;quot;);    break;&lt;br /&gt;
    case 0xEA15FF00: Serial.println(&amp;quot;VOL-&amp;quot;);    break;&lt;br /&gt;
    case 0xF609FF00: Serial.println(&amp;quot;UP&amp;quot;);    break;&lt;br /&gt;
    case 0xE619FF00: Serial.println(&amp;quot;EQ&amp;quot;);    break;&lt;br /&gt;
    case 0xF20DFF00: Serial.println(&amp;quot;ST/REPT&amp;quot;);    break;&lt;br /&gt;
    case 0xE916FF00: Serial.println(&amp;quot;0&amp;quot;);    break;&lt;br /&gt;
    case 0xF30CFF00: Serial.println(&amp;quot;1&amp;quot;);    break;&lt;br /&gt;
    case 0xE718FF00: Serial.println(&amp;quot;2&amp;quot;);    break;&lt;br /&gt;
    case 0xA15EFF00: Serial.println(&amp;quot;3&amp;quot;);    break;&lt;br /&gt;
    case 0xF708FF00: Serial.println(&amp;quot;4&amp;quot;);    break;&lt;br /&gt;
    case 0xE31CFF00: Serial.println(&amp;quot;5&amp;quot;);    break;&lt;br /&gt;
    case 0xA55AFF00: Serial.println(&amp;quot;6&amp;quot;);    break;&lt;br /&gt;
    case 0xBD42FF00: Serial.println(&amp;quot;7&amp;quot;);    break;&lt;br /&gt;
    case 0xAD52FF00: Serial.println(&amp;quot;8&amp;quot;);    break;&lt;br /&gt;
    case 0xB54AFF00: Serial.println(&amp;quot;9&amp;quot;);    break;&lt;br /&gt;
    default:&lt;br /&gt;
      Serial.println(&amp;quot; other button   &amp;quot;);&lt;br /&gt;
  }// End Case&lt;br /&gt;
  //store the last decodedRawData&lt;br /&gt;
  last_decodedRawData = irrecv.decodedIRData.decodedRawData;&lt;br /&gt;
  delay(500); // Do not get immediate repeat&lt;br /&gt;
} //END translateIR&lt;br /&gt;
&lt;br /&gt;
void setup()   /*----( SETUP: RUNS ONCE )----*/&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  Serial.println(&amp;quot;IR Receiver Button Decode&amp;quot;);&lt;br /&gt;
  irrecv.enableIRIn(); // Start the receiver&lt;br /&gt;
&lt;br /&gt;
}/*--(end setup )---*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/&lt;br /&gt;
{&lt;br /&gt;
  if (irrecv.decode()) // have we received an IR signal?&lt;br /&gt;
  {&lt;br /&gt;
    translateIR();&lt;br /&gt;
    irrecv.resume(); // receive the next value&lt;br /&gt;
  }&lt;br /&gt;
}/* --(end main loop )-- */&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　いろいろなリモコンコードを取得するのは以下のコード&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;#define RAW_BUFFER_LENGTH 750&lt;br /&gt;
#include &amp;lt;IRremote.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const int IR_RECEIVE_PIN = 11;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
&lt;br /&gt;
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&amp;quot;IR Remote Analyzer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;TV / Recorder / Air Conditioner&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;Toshiba / Daikin signal investigation&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (IrReceiver.decode()) {&lt;br /&gt;
&lt;br /&gt;
    Serial.println();&lt;br /&gt;
    Serial.println(&amp;quot;============================&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // 受信バッファが足りなかった場合&lt;br /&gt;
    if (IrReceiver.decodedIRData.flags &amp;amp;&lt;br /&gt;
        IRDATA_FLAGS_WAS_OVERFLOW) {&lt;br /&gt;
      Serial.println(&amp;quot;WARNING: Buffer overflow!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ライブラリによるプロトコル解析&lt;br /&gt;
    IrReceiver.printIRResultShort(&amp;amp;Serial);&lt;br /&gt;
&lt;br /&gt;
    // 受信ビット数&lt;br /&gt;
    Serial.print(&amp;quot;Bits: &amp;quot;);&lt;br /&gt;
    Serial.println(IrReceiver.decodedIRData.numberOfBits);&lt;br /&gt;
&lt;br /&gt;
    // リピート判定&lt;br /&gt;
    if (IrReceiver.decodedIRData.flags &amp;amp;&lt;br /&gt;
        IRDATA_FLAGS_IS_REPEAT) {&lt;br /&gt;
      Serial.println(&amp;quot;Repeat signal&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 生のパルスデータ&lt;br /&gt;
    Serial.println(&amp;quot;--- Raw Timing ---&amp;quot;);&lt;br /&gt;
    IrReceiver.printIRResultRawFormatted(&amp;amp;Serial, true);&lt;br /&gt;
&lt;br /&gt;
    Serial.println(&amp;quot;============================&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    IrReceiver.resume();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:14_%E8%B5%A4%E5%A4%96%E7%B7%9A%E5%8F%97%E4%BF%A1%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14195</id>
		<title>Arduino Mega 2560 LESSON:14 赤外線受信モジュール</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:14_%E8%B5%A4%E5%A4%96%E7%B7%9A%E5%8F%97%E4%BF%A1%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14195"/>
		<updated>2026-10-21T15:08:34Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　赤外線受信モジュールを接続するレッスンです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　完成図は以下のとおりです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　コードは以下のとおりです。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2023.05.05&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;IRremote.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int receiver = 11; // Signal Pin of IR receiver to Arduino Digital Pin 11&lt;br /&gt;
&lt;br /&gt;
/*-----( Declare objects )-----*/&lt;br /&gt;
IRrecv irrecv(receiver);     // create instance of 'irrecv'&lt;br /&gt;
//vairable uses to store the last decodedRawData&lt;br /&gt;
uint32_t last_decodedRawData = 0;&lt;br /&gt;
/*-----( Function )-----*/&lt;br /&gt;
void translateIR() // takes action based on IR code received&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // 受信したプロトコル名を表示&lt;br /&gt;
  Serial.print(&amp;quot;Protocol: &amp;quot;);&lt;br /&gt;
  Serial.println(getProtocolString(irrecv.decodedIRData.protocol));&lt;br /&gt;
&lt;br /&gt;
  // Check if it is a repeat IR code &lt;br /&gt;
  if (irrecv.decodedIRData.flags)&lt;br /&gt;
  {&lt;br /&gt;
    //set the current decodedRawData to the last decodedRawData &lt;br /&gt;
    irrecv.decodedIRData.decodedRawData = last_decodedRawData;&lt;br /&gt;
    Serial.println(&amp;quot;REPEAT!&amp;quot;);&lt;br /&gt;
  } else&lt;br /&gt;
  {&lt;br /&gt;
    //output the IR code on the serial monitor&lt;br /&gt;
    Serial.print(&amp;quot;IR code:0x&amp;quot;);&lt;br /&gt;
    Serial.println(irrecv.decodedIRData.decodedRawData, HEX);&lt;br /&gt;
  }&lt;br /&gt;
  //map the IR code to the remote key&lt;br /&gt;
  switch (irrecv.decodedIRData.decodedRawData)&lt;br /&gt;
  {&lt;br /&gt;
    //標準NECプロトコル&lt;br /&gt;
    case 0xBA45FF00: Serial.println(&amp;quot;POWER&amp;quot;); break;&lt;br /&gt;
    case 0xB847FF00: Serial.println(&amp;quot;FUNC/STOP&amp;quot;); break;&lt;br /&gt;
    case 0xB946FF00: Serial.println(&amp;quot;VOL+&amp;quot;); break;&lt;br /&gt;
    case 0xBB44FF00: Serial.println(&amp;quot;FAST BACK&amp;quot;);    break;&lt;br /&gt;
    case 0xBF40FF00: Serial.println(&amp;quot;PAUSE&amp;quot;);    break;&lt;br /&gt;
    case 0xBC43FF00: Serial.println(&amp;quot;FAST FORWARD&amp;quot;);   break;&lt;br /&gt;
    case 0xF807FF00: Serial.println(&amp;quot;DOWN&amp;quot;);    break;&lt;br /&gt;
    case 0xEA15FF00: Serial.println(&amp;quot;VOL-&amp;quot;);    break;&lt;br /&gt;
    case 0xF609FF00: Serial.println(&amp;quot;UP&amp;quot;);    break;&lt;br /&gt;
    case 0xE619FF00: Serial.println(&amp;quot;EQ&amp;quot;);    break;&lt;br /&gt;
    case 0xF20DFF00: Serial.println(&amp;quot;ST/REPT&amp;quot;);    break;&lt;br /&gt;
    case 0xE916FF00: Serial.println(&amp;quot;0&amp;quot;);    break;&lt;br /&gt;
    case 0xF30CFF00: Serial.println(&amp;quot;1&amp;quot;);    break;&lt;br /&gt;
    case 0xE718FF00: Serial.println(&amp;quot;2&amp;quot;);    break;&lt;br /&gt;
    case 0xA15EFF00: Serial.println(&amp;quot;3&amp;quot;);    break;&lt;br /&gt;
    case 0xF708FF00: Serial.println(&amp;quot;4&amp;quot;);    break;&lt;br /&gt;
    case 0xE31CFF00: Serial.println(&amp;quot;5&amp;quot;);    break;&lt;br /&gt;
    case 0xA55AFF00: Serial.println(&amp;quot;6&amp;quot;);    break;&lt;br /&gt;
    case 0xBD42FF00: Serial.println(&amp;quot;7&amp;quot;);    break;&lt;br /&gt;
    case 0xAD52FF00: Serial.println(&amp;quot;8&amp;quot;);    break;&lt;br /&gt;
    case 0xB54AFF00: Serial.println(&amp;quot;9&amp;quot;);    break;&lt;br /&gt;
    default:&lt;br /&gt;
      Serial.println(&amp;quot; other button   &amp;quot;);&lt;br /&gt;
  }// End Case&lt;br /&gt;
  //store the last decodedRawData&lt;br /&gt;
  last_decodedRawData = irrecv.decodedIRData.decodedRawData;&lt;br /&gt;
  delay(500); // Do not get immediate repeat&lt;br /&gt;
} //END translateIR&lt;br /&gt;
&lt;br /&gt;
void setup()   /*----( SETUP: RUNS ONCE )----*/&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  Serial.println(&amp;quot;IR Receiver Button Decode&amp;quot;);&lt;br /&gt;
  irrecv.enableIRIn(); // Start the receiver&lt;br /&gt;
&lt;br /&gt;
}/*--(end setup )---*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/&lt;br /&gt;
{&lt;br /&gt;
  if (irrecv.decode()) // have we received an IR signal?&lt;br /&gt;
  {&lt;br /&gt;
    translateIR();&lt;br /&gt;
    irrecv.resume(); // receive the next value&lt;br /&gt;
  }&lt;br /&gt;
}/* --(end main loop )-- */&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　いろいろなリモコンコードを取得するのは以下のコード&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;#define RAW_BUFFER_LENGTH 750&lt;br /&gt;
#include &amp;lt;IRremote.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const int IR_RECEIVE_PIN = 11;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
&lt;br /&gt;
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&amp;quot;IR Remote Analyzer&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;TV / Recorder / Air Conditioner&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;Toshiba / Daikin signal investigation&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (IrReceiver.decode()) {&lt;br /&gt;
&lt;br /&gt;
    Serial.println();&lt;br /&gt;
    Serial.println(&amp;quot;============================&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // 受信バッファが足りなかった場合&lt;br /&gt;
    if (IrReceiver.decodedIRData.flags &amp;amp;&lt;br /&gt;
        IRDATA_FLAGS_WAS_OVERFLOW) {&lt;br /&gt;
      Serial.println(&amp;quot;WARNING: Buffer overflow!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ライブラリによるプロトコル解析&lt;br /&gt;
    IrReceiver.printIRResultShort(&amp;amp;Serial);&lt;br /&gt;
&lt;br /&gt;
    // 受信ビット数&lt;br /&gt;
    Serial.print(&amp;quot;Bits: &amp;quot;);&lt;br /&gt;
    Serial.println(IrReceiver.decodedIRData.numberOfBits);&lt;br /&gt;
&lt;br /&gt;
    // リピート判定&lt;br /&gt;
    if (IrReceiver.decodedIRData.flags &amp;amp;&lt;br /&gt;
        IRDATA_FLAGS_IS_REPEAT) {&lt;br /&gt;
      Serial.println(&amp;quot;Repeat signal&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 生のパルスデータ&lt;br /&gt;
    Serial.println(&amp;quot;--- Raw Timing ---&amp;quot;);&lt;br /&gt;
    IrReceiver.printIRResultRawFormatted(&amp;amp;Serial, true);&lt;br /&gt;
&lt;br /&gt;
    Serial.println(&amp;quot;============================&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    IrReceiver.resume();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:14_%E8%B5%A4%E5%A4%96%E7%B7%9A%E5%8F%97%E4%BF%A1%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14194</id>
		<title>Arduino Mega 2560 LESSON:14 赤外線受信モジュール</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:14_%E8%B5%A4%E5%A4%96%E7%B7%9A%E5%8F%97%E4%BF%A1%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB&amp;diff=14194"/>
		<updated>2026-10-19T13:50:15Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: ページの作成:「&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;script&amp;gt;     // 最初に実行されるスクリプト     document.addEventListener('DOMContentLoaded', () =&amp;gt; {       const observer = new MutationObserver((mutations) =&amp;gt; {         mutations.forEach((mutation) =&amp;gt; {           mutation.addedNodes.forEach((node) =&amp;gt; {             if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {                 // JavaScriptコードを変換                 const originalCode = node.textContent;…」&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;　&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560&amp;diff=14193</id>
		<title>Arduino Mega 2560</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560&amp;diff=14193"/>
		<updated>2026-10-19T13:50:00Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[メインページ#電子回路工学]]に戻る。&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　Mega 2560は非営利団体Arduino Foundationや営利団体Arduino Holdingが管理するマイクロコンピュータです。ELEGOOがこのマイクロコンピュータのスターターキットを販売していて、いろいろ部品がついてきて5000円ほどで手に入る。電子工作初心者向けのキットです。ELEGOO Mega 2560のスターターキットには30のレッスン項目があるので、レッスンの実験体験記事をここに残す感じになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://link.amazon/A05YVziyD ELEGOO Mega 2560スターターキット]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
== '''体験記事''' ==&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:0 Arduino IDEの導入]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:2 Board上のLEDの点滅速度の調整]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:3 異なる値の抵抗を使用してLEDの輝度を変更する]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:4 RGB LED]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:5 LEDをオン/オフするためにデジタル入力付きのプッシュボタンを使用する方法]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:6 アクティブブザー]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:7 パッシブブザー]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:8 チルトボールスイッチ]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:9 サーボ]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:10 超音波センサーモジュール]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:11 メンブレンスイッチ]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:13 ジョイスティック]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:14 赤外線受信モジュール]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;　&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[メインページ#電子回路工学]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:13_%E3%82%B8%E3%83%A7%E3%82%A4%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF&amp;diff=14192</id>
		<title>Arduino Mega 2560 LESSON:13 ジョイスティック</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:13_%E3%82%B8%E3%83%A7%E3%82%A4%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF&amp;diff=14192"/>
		<updated>2026-10-19T13:45:37Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　ジョイスティックを接続するレッスンです。温度湿度計(DHT11)の値を読み取るより楽な構造ですね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　アナログ読み込みの良さを知れる項目になっていますが、ジョイスディック内部ではアナログの傾きを可変抵抗器&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2016.12.09&lt;br /&gt;
&lt;br /&gt;
// Arduino pin numbers&lt;br /&gt;
const int SW_pin = 2; // digital pin connected to switch output&lt;br /&gt;
const int X_pin = 0; // analog pin connected to X output&lt;br /&gt;
const int Y_pin = 1; // analog pin connected to Y output&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(SW_pin, INPUT);&lt;br /&gt;
  digitalWrite(SW_pin, HIGH);&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  Serial.print(&amp;quot;Switch:  &amp;quot;);&lt;br /&gt;
  Serial.print(digitalRead(SW_pin));&lt;br /&gt;
  //Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;, X-axis: &amp;quot;);&lt;br /&gt;
  Serial.print(analogRead(X_pin));&lt;br /&gt;
  //Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;, Y-axis: &amp;quot;);&lt;br /&gt;
  Serial.println(analogRead(Y_pin));&lt;br /&gt;
  //Serial.print(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　出力&lt;br /&gt;
&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ジョイスティックとサーボが連動して動く接続をしてみましょう。この方が面白いよね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
完成図は以下のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L13 01 完成図.jpg|380px||none|完成図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PCB図は以下のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L13 02 PCB図.png|380px||none|PCB図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3Dプレビュー図は以下のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L13 03 3DPreview図.png|380px||none|3Dプレビュー図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
コードは以下のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;Servo.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const int X_pin = A0;&lt;br /&gt;
const int SERVO_PIN = 9;&lt;br /&gt;
&lt;br /&gt;
// ジョイスティックの補正値&lt;br /&gt;
const int MIN_X = 0;&lt;br /&gt;
const int CENTER_X = 496;&lt;br /&gt;
const int MAX_X = 1023;&lt;br /&gt;
&lt;br /&gt;
// サーボの取り付け角度補正&lt;br /&gt;
const int SERVO_OFFSET = 20;  // 補正角度 R&lt;br /&gt;
&lt;br /&gt;
Servo myServo;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  myServo.attach(SERVO_PIN);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  int x = analogRead(X_pin);&lt;br /&gt;
  int angle;&lt;br /&gt;
&lt;br /&gt;
  // ジョイスティックの中央補正&lt;br /&gt;
  if (x &amp;lt; CENTER_X) {&lt;br /&gt;
    angle = map(x, MIN_X, CENTER_X, 0, 90);&lt;br /&gt;
  }&lt;br /&gt;
  else {&lt;br /&gt;
    angle = map(x, CENTER_X, MAX_X, 90, 180);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // サーボの取り付け位置を補正&lt;br /&gt;
  // 例：R=10なら使用範囲は10～180度&lt;br /&gt;
  int servoAngle = map(&lt;br /&gt;
    angle,&lt;br /&gt;
    0, 180,&lt;br /&gt;
    SERVO_OFFSET, 180&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  servoAngle = constrain(servoAngle, 0, 180);&lt;br /&gt;
&lt;br /&gt;
  myServo.write(servoAngle);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;X = &amp;quot;);&lt;br /&gt;
  Serial.print(x);&lt;br /&gt;
  Serial.print(&amp;quot;  Logical Angle = &amp;quot;);&lt;br /&gt;
  Serial.print(angle);&lt;br /&gt;
  Serial.print(&amp;quot;  Servo Angle = &amp;quot;);&lt;br /&gt;
  Serial.println(servoAngle);&lt;br /&gt;
&lt;br /&gt;
  delay(20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''constrain() の書き方'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 constrain(x, a, b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3つの引数には、次の意味があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 引数   意味&lt;br /&gt;
 x      範囲を制限したい数値&lt;br /&gt;
 a      最小値&lt;br /&gt;
 b      最大値&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''map() の書き方'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 map(value, fromLow, fromHigh, toLow, toHigh);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
map() には5つの引数があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 引数       意味&lt;br /&gt;
 value      変換したい数値&lt;br /&gt;
 fromLow    変換前の範囲の開始値&lt;br /&gt;
 fromHigh   変換前の範囲の終了値&lt;br /&gt;
 toLow      変換後の範囲の開始値&lt;br /&gt;
 toHigh     変換後の範囲の終了値&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　という感じで、簡単にジョイスティックとサーボが連動できます。連動したら楽しいよね。楽しい操縦装置なので、その昔、戦闘機や航空機にとりつけられた際もジョイスティックという奇妙な名前を付けたのかもしれませんね。&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L13_03_3DPreview%E5%9B%B3.png&amp;diff=14191</id>
		<title>ファイル:Mega2560 L13 03 3DPreview図.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L13_03_3DPreview%E5%9B%B3.png&amp;diff=14191"/>
		<updated>2026-10-19T13:45:24Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L13_02_PCB%E5%9B%B3.png&amp;diff=14190</id>
		<title>ファイル:Mega2560 L13 02 PCB図.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L13_02_PCB%E5%9B%B3.png&amp;diff=14190"/>
		<updated>2026-10-19T13:44:36Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:13_%E3%82%B8%E3%83%A7%E3%82%A4%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF&amp;diff=14189</id>
		<title>Arduino Mega 2560 LESSON:13 ジョイスティック</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:13_%E3%82%B8%E3%83%A7%E3%82%A4%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF&amp;diff=14189"/>
		<updated>2026-10-19T13:08:57Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　ジョイスティックを接続するレッスンです。温度湿度計(DHT11)の値を読み取るより楽な構造ですね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　アナログ読み込みの良さを知れる項目になっていますが、ジョイスディック内部ではアナログの傾きを可変抵抗器&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2016.12.09&lt;br /&gt;
&lt;br /&gt;
// Arduino pin numbers&lt;br /&gt;
const int SW_pin = 2; // digital pin connected to switch output&lt;br /&gt;
const int X_pin = 0; // analog pin connected to X output&lt;br /&gt;
const int Y_pin = 1; // analog pin connected to Y output&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(SW_pin, INPUT);&lt;br /&gt;
  digitalWrite(SW_pin, HIGH);&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  Serial.print(&amp;quot;Switch:  &amp;quot;);&lt;br /&gt;
  Serial.print(digitalRead(SW_pin));&lt;br /&gt;
  //Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;, X-axis: &amp;quot;);&lt;br /&gt;
  Serial.print(analogRead(X_pin));&lt;br /&gt;
  //Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;, Y-axis: &amp;quot;);&lt;br /&gt;
  Serial.println(analogRead(Y_pin));&lt;br /&gt;
  //Serial.print(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　出力&lt;br /&gt;
&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ジョイスティックとサーボが連動して動く接続をしてみましょう。この方が面白いよね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
完成図は以下のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L13 01 完成図.jpg|380px||none|完成図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PCB図は以下のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[|380px||none|PCB図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3Dプレビュー図は以下のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[|380px||none|3Dプレビュー図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
コードは以下のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;Servo.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const int X_pin = A0;&lt;br /&gt;
const int SERVO_PIN = 9;&lt;br /&gt;
&lt;br /&gt;
// ジョイスティックの補正値&lt;br /&gt;
const int MIN_X = 0;&lt;br /&gt;
const int CENTER_X = 496;&lt;br /&gt;
const int MAX_X = 1023;&lt;br /&gt;
&lt;br /&gt;
// サーボの取り付け角度補正&lt;br /&gt;
const int SERVO_OFFSET = 20;  // 補正角度 R&lt;br /&gt;
&lt;br /&gt;
Servo myServo;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  myServo.attach(SERVO_PIN);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  int x = analogRead(X_pin);&lt;br /&gt;
  int angle;&lt;br /&gt;
&lt;br /&gt;
  // ジョイスティックの中央補正&lt;br /&gt;
  if (x &amp;lt; CENTER_X) {&lt;br /&gt;
    angle = map(x, MIN_X, CENTER_X, 0, 90);&lt;br /&gt;
  }&lt;br /&gt;
  else {&lt;br /&gt;
    angle = map(x, CENTER_X, MAX_X, 90, 180);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // サーボの取り付け位置を補正&lt;br /&gt;
  // 例：R=10なら使用範囲は10～180度&lt;br /&gt;
  int servoAngle = map(&lt;br /&gt;
    angle,&lt;br /&gt;
    0, 180,&lt;br /&gt;
    SERVO_OFFSET, 180&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  servoAngle = constrain(servoAngle, 0, 180);&lt;br /&gt;
&lt;br /&gt;
  myServo.write(servoAngle);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;X = &amp;quot;);&lt;br /&gt;
  Serial.print(x);&lt;br /&gt;
  Serial.print(&amp;quot;  Logical Angle = &amp;quot;);&lt;br /&gt;
  Serial.print(angle);&lt;br /&gt;
  Serial.print(&amp;quot;  Servo Angle = &amp;quot;);&lt;br /&gt;
  Serial.println(servoAngle);&lt;br /&gt;
&lt;br /&gt;
  delay(20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''constrain() の書き方'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 constrain(x, a, b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3つの引数には、次の意味があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 引数   意味&lt;br /&gt;
 x      範囲を制限したい数値&lt;br /&gt;
 a      最小値&lt;br /&gt;
 b      最大値&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''map() の書き方'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 map(value, fromLow, fromHigh, toLow, toHigh);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
map() には5つの引数があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 引数       意味&lt;br /&gt;
 value      変換したい数値&lt;br /&gt;
 fromLow    変換前の範囲の開始値&lt;br /&gt;
 fromHigh   変換前の範囲の終了値&lt;br /&gt;
 toLow      変換後の範囲の開始値&lt;br /&gt;
 toHigh     変換後の範囲の終了値&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　という感じで、簡単にジョイスティックとサーボが連動できます。連動したら楽しいよね。楽しい操縦装置なので、その昔、戦闘機や航空機にとりつけられた際もジョイスティックという奇妙な名前を付けたのかもしれませんね。&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L13_01_%E5%AE%8C%E6%88%90%E5%9B%B3.jpg&amp;diff=14188</id>
		<title>ファイル:Mega2560 L13 01 完成図.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L13_01_%E5%AE%8C%E6%88%90%E5%9B%B3.jpg&amp;diff=14188"/>
		<updated>2026-10-19T13:07:12Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:13_%E3%82%B8%E3%83%A7%E3%82%A4%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF&amp;diff=14187</id>
		<title>Arduino Mega 2560 LESSON:13 ジョイスティック</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:13_%E3%82%B8%E3%83%A7%E3%82%A4%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF&amp;diff=14187"/>
		<updated>2026-10-19T10:54:02Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　ジョイスティックを接続するレッスンです。温度湿度計(DHT11)の値を読み取るより楽な構造ですね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　アナログ読み込みの良さを知れる項目になっていますが、ジョイスディック内部ではアナログの傾きを可変抵抗器&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2016.12.09&lt;br /&gt;
&lt;br /&gt;
// Arduino pin numbers&lt;br /&gt;
const int SW_pin = 2; // digital pin connected to switch output&lt;br /&gt;
const int X_pin = 0; // analog pin connected to X output&lt;br /&gt;
const int Y_pin = 1; // analog pin connected to Y output&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(SW_pin, INPUT);&lt;br /&gt;
  digitalWrite(SW_pin, HIGH);&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  Serial.print(&amp;quot;Switch:  &amp;quot;);&lt;br /&gt;
  Serial.print(digitalRead(SW_pin));&lt;br /&gt;
  //Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;, X-axis: &amp;quot;);&lt;br /&gt;
  Serial.print(analogRead(X_pin));&lt;br /&gt;
  //Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;, Y-axis: &amp;quot;);&lt;br /&gt;
  Serial.println(analogRead(Y_pin));&lt;br /&gt;
  //Serial.print(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　出力&lt;br /&gt;
&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ジョイスティックとサーボが連動して動く接続をしてみましょう。この方が面白いよね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
完成図は以下のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PCB図は以下のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3Dプレビュー図は以下のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
コードは以下のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;Servo.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const int X_pin = A0;&lt;br /&gt;
const int SERVO_PIN = 9;&lt;br /&gt;
&lt;br /&gt;
// ジョイスティックの補正値&lt;br /&gt;
const int MIN_X = 0;&lt;br /&gt;
const int CENTER_X = 496;&lt;br /&gt;
const int MAX_X = 1023;&lt;br /&gt;
&lt;br /&gt;
// サーボの取り付け角度補正&lt;br /&gt;
const int SERVO_OFFSET = 20;  // 補正角度 R&lt;br /&gt;
&lt;br /&gt;
Servo myServo;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  myServo.attach(SERVO_PIN);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  int x = analogRead(X_pin);&lt;br /&gt;
  int angle;&lt;br /&gt;
&lt;br /&gt;
  // ジョイスティックの中央補正&lt;br /&gt;
  if (x &amp;lt; CENTER_X) {&lt;br /&gt;
    angle = map(x, MIN_X, CENTER_X, 0, 90);&lt;br /&gt;
  }&lt;br /&gt;
  else {&lt;br /&gt;
    angle = map(x, CENTER_X, MAX_X, 90, 180);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // サーボの取り付け位置を補正&lt;br /&gt;
  // 例：R=10なら使用範囲は10～180度&lt;br /&gt;
  int servoAngle = map(&lt;br /&gt;
    angle,&lt;br /&gt;
    0, 180,&lt;br /&gt;
    SERVO_OFFSET, 180&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  servoAngle = constrain(servoAngle, 0, 180);&lt;br /&gt;
&lt;br /&gt;
  myServo.write(servoAngle);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;X = &amp;quot;);&lt;br /&gt;
  Serial.print(x);&lt;br /&gt;
  Serial.print(&amp;quot;  Logical Angle = &amp;quot;);&lt;br /&gt;
  Serial.print(angle);&lt;br /&gt;
  Serial.print(&amp;quot;  Servo Angle = &amp;quot;);&lt;br /&gt;
  Serial.println(servoAngle);&lt;br /&gt;
&lt;br /&gt;
  delay(20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''constrain() の書き方'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 constrain(x, a, b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3つの引数には、次の意味があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 引数   意味&lt;br /&gt;
 x      範囲を制限したい数値&lt;br /&gt;
 a      最小値&lt;br /&gt;
 b      最大値&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''map() の書き方'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 map(value, fromLow, fromHigh, toLow, toHigh);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
map() には5つの引数があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 引数       意味&lt;br /&gt;
 value      変換したい数値&lt;br /&gt;
 fromLow    変換前の範囲の開始値&lt;br /&gt;
 fromHigh   変換前の範囲の終了値&lt;br /&gt;
 toLow      変換後の範囲の開始値&lt;br /&gt;
 toHigh     変換後の範囲の終了値&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　という感じで、簡単にジョイスティックとサーボが連動できます。連動したら楽しいよね。楽しい操縦装置なので、その昔、戦闘機や航空機にとりつけられた際もジョイスティックという奇妙な名前を付けたのかもしれませんね。&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:13_%E3%82%B8%E3%83%A7%E3%82%A4%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF&amp;diff=14186</id>
		<title>Arduino Mega 2560 LESSON:13 ジョイスティック</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:13_%E3%82%B8%E3%83%A7%E3%82%A4%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF&amp;diff=14186"/>
		<updated>2026-10-19T10:14:19Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　ジョイスティックを接続するレッスンです。温度湿度計(DHT11)の値を読み取るより楽な構造ですね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　アナログ読み込みの良さを知れる項目になっていますが、ジョイスディック内部ではアナログの傾きを可変抵抗器&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2016.12.09&lt;br /&gt;
&lt;br /&gt;
// Arduino pin numbers&lt;br /&gt;
const int SW_pin = 2; // digital pin connected to switch output&lt;br /&gt;
const int X_pin = 0; // analog pin connected to X output&lt;br /&gt;
const int Y_pin = 1; // analog pin connected to Y output&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(SW_pin, INPUT);&lt;br /&gt;
  digitalWrite(SW_pin, HIGH);&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  Serial.print(&amp;quot;Switch:  &amp;quot;);&lt;br /&gt;
  Serial.print(digitalRead(SW_pin));&lt;br /&gt;
  //Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;, X-axis: &amp;quot;);&lt;br /&gt;
  Serial.print(analogRead(X_pin));&lt;br /&gt;
  //Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;, Y-axis: &amp;quot;);&lt;br /&gt;
  Serial.println(analogRead(Y_pin));&lt;br /&gt;
  //Serial.print(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　出力&lt;br /&gt;
&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ジョイスティックとサーボが連動して動く接続をしてみましょう。この方が面白いよね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;Servo.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const int X_pin = A0;&lt;br /&gt;
const int SERVO_PIN = 9;&lt;br /&gt;
&lt;br /&gt;
// ジョイスティックの補正値&lt;br /&gt;
const int MIN_X = 0;&lt;br /&gt;
const int CENTER_X = 496;&lt;br /&gt;
const int MAX_X = 1023;&lt;br /&gt;
&lt;br /&gt;
// サーボの取り付け角度補正&lt;br /&gt;
const int SERVO_OFFSET = 20;  // 補正角度 R&lt;br /&gt;
&lt;br /&gt;
Servo myServo;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  myServo.attach(SERVO_PIN);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  int x = analogRead(X_pin);&lt;br /&gt;
  int angle;&lt;br /&gt;
&lt;br /&gt;
  // ジョイスティックの中央補正&lt;br /&gt;
  if (x &amp;lt; CENTER_X) {&lt;br /&gt;
    angle = map(x, MIN_X, CENTER_X, 0, 90);&lt;br /&gt;
  }&lt;br /&gt;
  else {&lt;br /&gt;
    angle = map(x, CENTER_X, MAX_X, 90, 180);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // サーボの取り付け位置を補正&lt;br /&gt;
  // 例：R=10なら使用範囲は10～180度&lt;br /&gt;
  int servoAngle = map(&lt;br /&gt;
    angle,&lt;br /&gt;
    0, 180,&lt;br /&gt;
    SERVO_OFFSET, 180&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  servoAngle = constrain(servoAngle, 0, 180);&lt;br /&gt;
&lt;br /&gt;
  myServo.write(servoAngle);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;X = &amp;quot;);&lt;br /&gt;
  Serial.print(x);&lt;br /&gt;
  Serial.print(&amp;quot;  Logical Angle = &amp;quot;);&lt;br /&gt;
  Serial.print(angle);&lt;br /&gt;
  Serial.print(&amp;quot;  Servo Angle = &amp;quot;);&lt;br /&gt;
  Serial.println(servoAngle);&lt;br /&gt;
&lt;br /&gt;
  delay(20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''constrain() の書き方'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 constrain(x, a, b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3つの引数には、次の意味があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 引数   意味&lt;br /&gt;
 x      範囲を制限したい数値&lt;br /&gt;
 a      最小値&lt;br /&gt;
 b      最大値&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''map() の書き方'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 map(value, fromLow, fromHigh, toLow, toHigh);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
map() には5つの引数があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 引数       意味&lt;br /&gt;
 value      変換したい数値&lt;br /&gt;
 fromLow    変換前の範囲の開始値&lt;br /&gt;
 fromHigh   変換前の範囲の終了値&lt;br /&gt;
 toLow      変換後の範囲の開始値&lt;br /&gt;
 toHigh     変換後の範囲の終了値&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　という感じで、簡単にジョイスティックとサーボが連動できます。連動したら楽しいよね。楽しい操縦装置なので、その昔、戦闘機や航空機にとりつけられた際もジョイスティックという奇妙な名前を付けたのかもしれませんね。&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:13_%E3%82%B8%E3%83%A7%E3%82%A4%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF&amp;diff=14185</id>
		<title>Arduino Mega 2560 LESSON:13 ジョイスティック</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:13_%E3%82%B8%E3%83%A7%E3%82%A4%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF&amp;diff=14185"/>
		<updated>2026-10-19T08:43:55Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2016.12.09&lt;br /&gt;
&lt;br /&gt;
// Arduino pin numbers&lt;br /&gt;
const int SW_pin = 2; // digital pin connected to switch output&lt;br /&gt;
const int X_pin = 0; // analog pin connected to X output&lt;br /&gt;
const int Y_pin = 1; // analog pin connected to Y output&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(SW_pin, INPUT);&lt;br /&gt;
  digitalWrite(SW_pin, HIGH);&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  Serial.print(&amp;quot;Switch:  &amp;quot;);&lt;br /&gt;
  Serial.print(digitalRead(SW_pin));&lt;br /&gt;
  //Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;, X-axis: &amp;quot;);&lt;br /&gt;
  Serial.print(analogRead(X_pin));&lt;br /&gt;
  //Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;, Y-axis: &amp;quot;);&lt;br /&gt;
  Serial.println(analogRead(Y_pin));&lt;br /&gt;
  //Serial.print(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　出力&lt;br /&gt;
&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
 Switch:  1, X-axis: 496, Y-axis: 509&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:13_%E3%82%B8%E3%83%A7%E3%82%A4%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF&amp;diff=14184</id>
		<title>Arduino Mega 2560 LESSON:13 ジョイスティック</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:13_%E3%82%B8%E3%83%A7%E3%82%A4%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF&amp;diff=14184"/>
		<updated>2026-10-19T08:10:45Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: ページの作成:「&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;script&amp;gt;     // 最初に実行されるスクリプト     document.addEventListener('DOMContentLoaded', () =&amp;gt; {       const observer = new MutationObserver((mutations) =&amp;gt; {         mutations.forEach((mutation) =&amp;gt; {           mutation.addedNodes.forEach((node) =&amp;gt; {             if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {                 // JavaScriptコードを変換                 const originalCode = node.textContent;…」&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;　&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560&amp;diff=14183</id>
		<title>Arduino Mega 2560</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560&amp;diff=14183"/>
		<updated>2026-10-19T08:10:00Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: /* 体験記事 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[メインページ#電子回路工学]]に戻る。&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　Mega 2560は非営利団体Arduino Foundationや営利団体Arduino Holdingが管理するマイクロコンピュータです。ELEGOOがこのマイクロコンピュータのスターターキットを販売していて、いろいろ部品がついてきて5000円ほどで手に入る。電子工作初心者向けのキットです。ELEGOO Mega 2560のスターターキットには30のレッスン項目があるので、レッスンの実験体験記事をここに残す感じになります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://link.amazon/A05YVziyD ELEGOO Mega 2560スターターキット]&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
== '''体験記事''' ==&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:0 Arduino IDEの導入]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:2 Board上のLEDの点滅速度の調整]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:3 異なる値の抵抗を使用してLEDの輝度を変更する]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:4 RGB LED]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:5 LEDをオン/オフするためにデジタル入力付きのプッシュボタンを使用する方法]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:6 アクティブブザー]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:7 パッシブブザー]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:8 チルトボールスイッチ]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:9 サーボ]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:10 超音波センサーモジュール]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:11 メンブレンスイッチ]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー]]&lt;br /&gt;
*[[Arduino Mega 2560 LESSON:13 ジョイスティック]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;　&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[メインページ#電子回路工学]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14182</id>
		<title>Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14182"/>
		<updated>2026-10-19T08:06:25Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: /* ブロッキング処理と非ブロッキング処理の違い */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　DHT11 温度湿度センサーを接続するレッスンです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　完成図は以下のようなモノです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 02 完成図.jpg|380px||none|完成図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KiCADで追加した部品&lt;br /&gt;
&lt;br /&gt;
*Conn_01x03：Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector)&lt;br /&gt;
*+5V&lt;br /&gt;
*GND&lt;br /&gt;
*PWR_FLAG&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KiCADで追加したフットプリント&lt;br /&gt;
&lt;br /&gt;
*Conn_01x03：Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical&lt;br /&gt;
*Conn_01x03：Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　PCB図は以下のようなもの。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 03 PCB図.png|380px||none|PCB図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　3DPreview図は以下のようなもの。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 04 3DPreview図.png|380px||none|3DPreview図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AIによるタイミングチャート作図です。&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 01 DHT11通信タイミングチャート.png|380px||none|DHT11通信タイミングチャート]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　以下のようなコードです。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2018.10.25&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dht_nonblocking.h&amp;gt;&lt;br /&gt;
#define DHT_SENSOR_TYPE DHT_TYPE_11&lt;br /&gt;
&lt;br /&gt;
static const int DHT_SENSOR_PIN = 2;&lt;br /&gt;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Initialize the serial port.&lt;br /&gt;
 */&lt;br /&gt;
void setup( )&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin( 9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Poll for a measurement, keeping the state machine alive.  Returns&lt;br /&gt;
 * true if a measurement is available.&lt;br /&gt;
 */&lt;br /&gt;
static bool measure_environment( float *temperature, float *humidity )&lt;br /&gt;
{&lt;br /&gt;
  static unsigned long measurement_timestamp = millis( );&lt;br /&gt;
&lt;br /&gt;
  /* Measure once every four seconds. */&lt;br /&gt;
  if( millis( ) - measurement_timestamp &amp;gt; 3000ul )&lt;br /&gt;
  {&lt;br /&gt;
    if( dht_sensor.measure( temperature, humidity ) == true )&lt;br /&gt;
    {&lt;br /&gt;
      dht_sensor.print_raw_data();&lt;br /&gt;
      measurement_timestamp = millis( );&lt;br /&gt;
      return( true );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return( false );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Main program loop.&lt;br /&gt;
 */&lt;br /&gt;
void loop( )&lt;br /&gt;
{&lt;br /&gt;
  float temperature;&lt;br /&gt;
  float humidity;&lt;br /&gt;
&lt;br /&gt;
  /* Measure temperature and humidity.  If the functions returns&lt;br /&gt;
     true, then a measurement is available. */&lt;br /&gt;
  if( measure_environment( &amp;amp;temperature, &amp;amp;humidity ) == true )&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print( &amp;quot;T = &amp;quot; );&lt;br /&gt;
    Serial.print( temperature, 1 );&lt;br /&gt;
    Serial.print( &amp;quot; deg. C, H = &amp;quot; );&lt;br /&gt;
    Serial.print( humidity, 1 );&lt;br /&gt;
    Serial.println( &amp;quot;%&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
■dht_nonblocking.h&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー dht_nonblocking.h]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
■dht_nonblocking.cpp&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー dht_nonblocking.cpp]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ライブラリを使わないで自分なりのコードにすると以下のようになりました。カウント部のデバッグ値も出力しています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;const byte DHT_PIN = 2;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // 待機状態（プルアップ）&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  byte data[5] = {0};&lt;br /&gt;
&lt;br /&gt;
  bool success = true;&lt;br /&gt;
  int errorBit = -1;&lt;br /&gt;
  int errorStep = 0;&lt;br /&gt;
&lt;br /&gt;
  byte countlow[40] = {0};&lt;br /&gt;
  byte counthigh[40] = {0};&lt;br /&gt;
&lt;br /&gt;
  // ここから通信開始処理&lt;br /&gt;
  // ① Arduinoから通信開始信号を送信&lt;br /&gt;
  pinMode(DHT_PIN, OUTPUT);&lt;br /&gt;
  digitalWrite(DHT_PIN, LOW);&lt;br /&gt;
  delay(20);  // 20ms LOW&lt;br /&gt;
&lt;br /&gt;
  // 開始信号のLOWを終了&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  // センサーが応答を始めるまでの待ち時間&lt;br /&gt;
  delayMicroseconds(30);&lt;br /&gt;
&lt;br /&gt;
  // 応答開始：LOWになるのを待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: No response&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答LOW（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(HIGH, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response LOW&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答HIGH（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response HIGH&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ③ 40ビットを読み取る&lt;br /&gt;
  noInterrupts();&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 40; i++) {&lt;br /&gt;
    // LOWが続いた回数を数える&lt;br /&gt;
    unsigned int lowCount = countPulse(LOW);&lt;br /&gt;
    countlow[i] = lowCount;&lt;br /&gt;
    // HIGHが続いた回数を数える&lt;br /&gt;
    unsigned int highCount = countPulse(HIGH);&lt;br /&gt;
    counthigh[i] = highCount;&lt;br /&gt;
    if (lowCount == 0 || highCount == 0) {&lt;br /&gt;
      success = false;&lt;br /&gt;
      errorBit = i;&lt;br /&gt;
      errorStep = (lowCount == 0) ? 1 : 2;&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 受信データを左へ1ビットずらす&lt;br /&gt;
    data[i / 8] &amp;lt;&amp;lt;= 1;&lt;br /&gt;
&lt;br /&gt;
    // HIGHの方が長ければ1&lt;br /&gt;
    if (highCount &amp;gt; lowCount) {&lt;br /&gt;
      data[i / 8] |= 1;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  interrupts();&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
    Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    Serial.print(countlow[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
    Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    Serial.print(counthigh[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!success) {&lt;br /&gt;
    Serial.print(&amp;quot;Error: Reading failed, Bit=&amp;quot;);&lt;br /&gt;
    Serial.print(errorBit);&lt;br /&gt;
    Serial.print(&amp;quot;, Step=&amp;quot;);&lt;br /&gt;
    Serial.println(errorStep);&lt;br /&gt;
&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ④ 受信した40ビットを表示&lt;br /&gt;
  Serial.print(&amp;quot;Sample RAW Bits: &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
    for (int bit = 7; bit &amp;gt;= 0; bit--) {&lt;br /&gt;
      Serial.print((data[i] &amp;gt;&amp;gt; bit) &amp;amp; 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (i &amp;lt; 4) {&lt;br /&gt;
      Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  // ⑤ チェックサムを検証&lt;br /&gt;
  byte checksum = data[0] + data[1] + data[2] + data[3];&lt;br /&gt;
&lt;br /&gt;
  if (checksum == data[4]) {&lt;br /&gt;
    Serial.print(&amp;quot;Sample OK: &amp;quot;);&lt;br /&gt;
    Serial.print(data[2]);&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
    Serial.print(data[3]);&lt;br /&gt;
    Serial.print(&amp;quot; deg. C, &amp;quot;);&lt;br /&gt;
    Serial.print(data[0]);&lt;br /&gt;
    Serial.println(&amp;quot; %&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;Checksum Error&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(3000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// 指定した電圧状態になるまで待つ&lt;br /&gt;
// timeout はマイクロ秒単位&lt;br /&gt;
bool waitForLevel(byte level, unsigned long timeout) {&lt;br /&gt;
  unsigned long start = micros();&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) != level) {&lt;br /&gt;
    if (micros() - start &amp;gt;= timeout) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned int countPulse(byte level) {&lt;br /&gt;
  unsigned int count = 0;&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) == level) {&lt;br /&gt;
    count++;&lt;br /&gt;
&lt;br /&gt;
    if (count &amp;gt;= 1000) {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return count;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;             47/              0/             28/              3/             78&amp;lt;/span&amp;gt; &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;0 0 1 0 1 1 1 1/0 0 0 0 0 0 0 0/0 0 0 1 1 1 0 0/0 0 0 0 0 0 1 1/0 1 0 0 1 1 1 0&amp;lt;/span&amp;gt;&lt;br /&gt;
  7 7 7 6 6 7 6 7 6 6 6 7 7 6 6 6 6 6 7 7 6 7 6 6 6 7 7 6 6 6 6 7 6 6 7 6 6 7 6 7 &lt;br /&gt;
  2 2 9 3 9 9 9 9 3 3 2 2 2 3 3 3 3 2 2 9 9 9 3 3 2 2 2 3 3 3 9 9 3 9 2 3 9 9 9 2 &lt;br /&gt;
 Sample RAW Bits: 00101111 00000000 00011100 00000011 01001110&lt;br /&gt;
 Sample OK: 28.3 deg. C, 47 %&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ビット列は8ビットずつ、湿度、湿度補助、温度、温度補助、チェックサムになっています。チェックサムは47+0+28+3=78という計算です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''ブロッキング処理と非ブロッキング処理の違い''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1. ブロッキング処理（Blocking）'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
処理が完了するまで、その場所で待ち続ける方式です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
例えば、次のプログラムです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;void loop() {&lt;br /&gt;
    digitalWrite(13, HIGH);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
    digitalWrite(13, LOW);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　delay(1000) が実行されると、Arduinoは1秒間、次の命令へ進みません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 05 ブロッキング処理図.png|380px||none|ブロッキング処理]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　待っている間、通常のプログラムの流れでは、スイッチの確認やほかのセンサーの読み取りなどを実行できません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ただし、CPUが完全に停止しているわけではなく、割り込み処理などは動作できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2. 非ブロッキング処理（Non-blocking）'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
待ち時間があっても、その間にほかの仕事を進められる方式です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
例えば、millis() を使ってLEDを点滅させます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;unsigned long previousTime = 0;&lt;br /&gt;
bool ledState = false;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
    pinMode(13, OUTPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
    if (millis() - previousTime &amp;gt;= 1000) {&lt;br /&gt;
        previousTime = millis();&lt;br /&gt;
&lt;br /&gt;
        ledState = !ledState;&lt;br /&gt;
        digitalWrite(13, ledState);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ここで別の仕事ができる&lt;br /&gt;
    // スイッチの確認など&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　こちらは1秒経過するまで待ち続けるのではなく、loop() が回るたびに経過時間を確認しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 06 非ブロッキング処理図.png|380px||none|非ブロッキング処理]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　LEDの点滅を管理しながら、スイッチを確認したり、別の処理を実行したりできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14181</id>
		<title>Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14181"/>
		<updated>2026-10-19T08:04:11Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　DHT11 温度湿度センサーを接続するレッスンです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　完成図は以下のようなモノです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 02 完成図.jpg|380px||none|完成図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KiCADで追加した部品&lt;br /&gt;
&lt;br /&gt;
*Conn_01x03：Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector)&lt;br /&gt;
*+5V&lt;br /&gt;
*GND&lt;br /&gt;
*PWR_FLAG&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KiCADで追加したフットプリント&lt;br /&gt;
&lt;br /&gt;
*Conn_01x03：Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical&lt;br /&gt;
*Conn_01x03：Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　PCB図は以下のようなもの。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 03 PCB図.png|380px||none|PCB図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　3DPreview図は以下のようなもの。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 04 3DPreview図.png|380px||none|3DPreview図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AIによるタイミングチャート作図です。&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 01 DHT11通信タイミングチャート.png|380px||none|DHT11通信タイミングチャート]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　以下のようなコードです。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2018.10.25&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dht_nonblocking.h&amp;gt;&lt;br /&gt;
#define DHT_SENSOR_TYPE DHT_TYPE_11&lt;br /&gt;
&lt;br /&gt;
static const int DHT_SENSOR_PIN = 2;&lt;br /&gt;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Initialize the serial port.&lt;br /&gt;
 */&lt;br /&gt;
void setup( )&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin( 9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Poll for a measurement, keeping the state machine alive.  Returns&lt;br /&gt;
 * true if a measurement is available.&lt;br /&gt;
 */&lt;br /&gt;
static bool measure_environment( float *temperature, float *humidity )&lt;br /&gt;
{&lt;br /&gt;
  static unsigned long measurement_timestamp = millis( );&lt;br /&gt;
&lt;br /&gt;
  /* Measure once every four seconds. */&lt;br /&gt;
  if( millis( ) - measurement_timestamp &amp;gt; 3000ul )&lt;br /&gt;
  {&lt;br /&gt;
    if( dht_sensor.measure( temperature, humidity ) == true )&lt;br /&gt;
    {&lt;br /&gt;
      dht_sensor.print_raw_data();&lt;br /&gt;
      measurement_timestamp = millis( );&lt;br /&gt;
      return( true );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return( false );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Main program loop.&lt;br /&gt;
 */&lt;br /&gt;
void loop( )&lt;br /&gt;
{&lt;br /&gt;
  float temperature;&lt;br /&gt;
  float humidity;&lt;br /&gt;
&lt;br /&gt;
  /* Measure temperature and humidity.  If the functions returns&lt;br /&gt;
     true, then a measurement is available. */&lt;br /&gt;
  if( measure_environment( &amp;amp;temperature, &amp;amp;humidity ) == true )&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print( &amp;quot;T = &amp;quot; );&lt;br /&gt;
    Serial.print( temperature, 1 );&lt;br /&gt;
    Serial.print( &amp;quot; deg. C, H = &amp;quot; );&lt;br /&gt;
    Serial.print( humidity, 1 );&lt;br /&gt;
    Serial.println( &amp;quot;%&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
■dht_nonblocking.h&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー dht_nonblocking.h]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
■dht_nonblocking.cpp&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー dht_nonblocking.cpp]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ライブラリを使わないで自分なりのコードにすると以下のようになりました。カウント部のデバッグ値も出力しています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;const byte DHT_PIN = 2;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // 待機状態（プルアップ）&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  byte data[5] = {0};&lt;br /&gt;
&lt;br /&gt;
  bool success = true;&lt;br /&gt;
  int errorBit = -1;&lt;br /&gt;
  int errorStep = 0;&lt;br /&gt;
&lt;br /&gt;
  byte countlow[40] = {0};&lt;br /&gt;
  byte counthigh[40] = {0};&lt;br /&gt;
&lt;br /&gt;
  // ここから通信開始処理&lt;br /&gt;
  // ① Arduinoから通信開始信号を送信&lt;br /&gt;
  pinMode(DHT_PIN, OUTPUT);&lt;br /&gt;
  digitalWrite(DHT_PIN, LOW);&lt;br /&gt;
  delay(20);  // 20ms LOW&lt;br /&gt;
&lt;br /&gt;
  // 開始信号のLOWを終了&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  // センサーが応答を始めるまでの待ち時間&lt;br /&gt;
  delayMicroseconds(30);&lt;br /&gt;
&lt;br /&gt;
  // 応答開始：LOWになるのを待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: No response&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答LOW（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(HIGH, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response LOW&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答HIGH（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response HIGH&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ③ 40ビットを読み取る&lt;br /&gt;
  noInterrupts();&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 40; i++) {&lt;br /&gt;
    // LOWが続いた回数を数える&lt;br /&gt;
    unsigned int lowCount = countPulse(LOW);&lt;br /&gt;
    countlow[i] = lowCount;&lt;br /&gt;
    // HIGHが続いた回数を数える&lt;br /&gt;
    unsigned int highCount = countPulse(HIGH);&lt;br /&gt;
    counthigh[i] = highCount;&lt;br /&gt;
    if (lowCount == 0 || highCount == 0) {&lt;br /&gt;
      success = false;&lt;br /&gt;
      errorBit = i;&lt;br /&gt;
      errorStep = (lowCount == 0) ? 1 : 2;&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 受信データを左へ1ビットずらす&lt;br /&gt;
    data[i / 8] &amp;lt;&amp;lt;= 1;&lt;br /&gt;
&lt;br /&gt;
    // HIGHの方が長ければ1&lt;br /&gt;
    if (highCount &amp;gt; lowCount) {&lt;br /&gt;
      data[i / 8] |= 1;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  interrupts();&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
    Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    Serial.print(countlow[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
    Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    Serial.print(counthigh[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!success) {&lt;br /&gt;
    Serial.print(&amp;quot;Error: Reading failed, Bit=&amp;quot;);&lt;br /&gt;
    Serial.print(errorBit);&lt;br /&gt;
    Serial.print(&amp;quot;, Step=&amp;quot;);&lt;br /&gt;
    Serial.println(errorStep);&lt;br /&gt;
&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ④ 受信した40ビットを表示&lt;br /&gt;
  Serial.print(&amp;quot;Sample RAW Bits: &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
    for (int bit = 7; bit &amp;gt;= 0; bit--) {&lt;br /&gt;
      Serial.print((data[i] &amp;gt;&amp;gt; bit) &amp;amp; 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (i &amp;lt; 4) {&lt;br /&gt;
      Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  // ⑤ チェックサムを検証&lt;br /&gt;
  byte checksum = data[0] + data[1] + data[2] + data[3];&lt;br /&gt;
&lt;br /&gt;
  if (checksum == data[4]) {&lt;br /&gt;
    Serial.print(&amp;quot;Sample OK: &amp;quot;);&lt;br /&gt;
    Serial.print(data[2]);&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
    Serial.print(data[3]);&lt;br /&gt;
    Serial.print(&amp;quot; deg. C, &amp;quot;);&lt;br /&gt;
    Serial.print(data[0]);&lt;br /&gt;
    Serial.println(&amp;quot; %&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;Checksum Error&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(3000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// 指定した電圧状態になるまで待つ&lt;br /&gt;
// timeout はマイクロ秒単位&lt;br /&gt;
bool waitForLevel(byte level, unsigned long timeout) {&lt;br /&gt;
  unsigned long start = micros();&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) != level) {&lt;br /&gt;
    if (micros() - start &amp;gt;= timeout) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned int countPulse(byte level) {&lt;br /&gt;
  unsigned int count = 0;&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) == level) {&lt;br /&gt;
    count++;&lt;br /&gt;
&lt;br /&gt;
    if (count &amp;gt;= 1000) {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return count;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;             47/              0/             28/              3/             78&amp;lt;/span&amp;gt; &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;0 0 1 0 1 1 1 1/0 0 0 0 0 0 0 0/0 0 0 1 1 1 0 0/0 0 0 0 0 0 1 1/0 1 0 0 1 1 1 0&amp;lt;/span&amp;gt;&lt;br /&gt;
  7 7 7 6 6 7 6 7 6 6 6 7 7 6 6 6 6 6 7 7 6 7 6 6 6 7 7 6 6 6 6 7 6 6 7 6 6 7 6 7 &lt;br /&gt;
  2 2 9 3 9 9 9 9 3 3 2 2 2 3 3 3 3 2 2 9 9 9 3 3 2 2 2 3 3 3 9 9 3 9 2 3 9 9 9 2 &lt;br /&gt;
 Sample RAW Bits: 00101111 00000000 00011100 00000011 01001110&lt;br /&gt;
 Sample OK: 28.3 deg. C, 47 %&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ビット列は8ビットずつ、湿度、湿度補助、温度、温度補助、チェックサムになっています。チェックサムは47+0+28+3=78という計算です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''ブロッキング処理と非ブロッキング処理の違い''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. ブロッキング処理（Blocking）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
処理が完了するまで、その場所で待ち続ける方式です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
例えば、次のプログラムです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;void loop() {&lt;br /&gt;
    digitalWrite(13, HIGH);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
    digitalWrite(13, LOW);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　delay(1000) が実行されると、Arduinoは1秒間、次の命令へ進みません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 05 ブロッキング処理図.png|380px||none|ブロッキング処理]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　待っている間、通常のプログラムの流れでは、スイッチの確認やほかのセンサーの読み取りなどを実行できません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ただし、CPUが完全に停止しているわけではなく、割り込み処理などは動作できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. 非ブロッキング処理（Non-blocking）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
待ち時間があっても、その間にほかの仕事を進められる方式です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
例えば、millis() を使ってLEDを点滅させます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;unsigned long previousTime = 0;&lt;br /&gt;
bool ledState = false;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
    pinMode(13, OUTPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
    if (millis() - previousTime &amp;gt;= 1000) {&lt;br /&gt;
        previousTime = millis();&lt;br /&gt;
&lt;br /&gt;
        ledState = !ledState;&lt;br /&gt;
        digitalWrite(13, ledState);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ここで別の仕事ができる&lt;br /&gt;
    // スイッチの確認など&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　こちらは1秒経過するまで待ち続けるのではなく、loop() が回るたびに経過時間を確認しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 06 非ブロッキング処理図.png|380px||none|非ブロッキング処理]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　LEDの点滅を管理しながら、スイッチを確認したり、別の処理を実行したりできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L12_06_%E9%9D%9E%E3%83%96%E3%83%AD%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%E5%87%A6%E7%90%86%E5%9B%B3.png&amp;diff=14180</id>
		<title>ファイル:Mega2560 L12 06 非ブロッキング処理図.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L12_06_%E9%9D%9E%E3%83%96%E3%83%AD%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%E5%87%A6%E7%90%86%E5%9B%B3.png&amp;diff=14180"/>
		<updated>2026-10-19T08:03:34Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L12_05_%E3%83%96%E3%83%AD%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%E5%87%A6%E7%90%86%E5%9B%B3.png&amp;diff=14179</id>
		<title>ファイル:Mega2560 L12 05 ブロッキング処理図.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L12_05_%E3%83%96%E3%83%AD%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%E5%87%A6%E7%90%86%E5%9B%B3.png&amp;diff=14179"/>
		<updated>2026-10-19T08:02:14Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14178</id>
		<title>Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14178"/>
		<updated>2026-10-19T07:51:55Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　DHT11 温度湿度センサーを接続するレッスンです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　完成図は以下のようなモノです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 02 完成図.jpg|380px||none|完成図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KiCADで追加した部品&lt;br /&gt;
&lt;br /&gt;
*Conn_01x03：Generic connector, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector)&lt;br /&gt;
*+5V&lt;br /&gt;
*GND&lt;br /&gt;
*PWR_FLAG&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KiCADで追加したフットプリント&lt;br /&gt;
&lt;br /&gt;
*Conn_01x03：Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical&lt;br /&gt;
*Conn_01x03：Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　PCB図は以下のようなもの。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 03 PCB図.png|380px||none|PCB図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　3DPreview図は以下のようなもの。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 04 3DPreview図.png|380px||none|3DPreview図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AIによるタイミングチャート作図です。&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 01 DHT11通信タイミングチャート.png|380px||none|DHT11通信タイミングチャート]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　以下のようなコードです。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2018.10.25&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dht_nonblocking.h&amp;gt;&lt;br /&gt;
#define DHT_SENSOR_TYPE DHT_TYPE_11&lt;br /&gt;
&lt;br /&gt;
static const int DHT_SENSOR_PIN = 2;&lt;br /&gt;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Initialize the serial port.&lt;br /&gt;
 */&lt;br /&gt;
void setup( )&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin( 9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Poll for a measurement, keeping the state machine alive.  Returns&lt;br /&gt;
 * true if a measurement is available.&lt;br /&gt;
 */&lt;br /&gt;
static bool measure_environment( float *temperature, float *humidity )&lt;br /&gt;
{&lt;br /&gt;
  static unsigned long measurement_timestamp = millis( );&lt;br /&gt;
&lt;br /&gt;
  /* Measure once every four seconds. */&lt;br /&gt;
  if( millis( ) - measurement_timestamp &amp;gt; 3000ul )&lt;br /&gt;
  {&lt;br /&gt;
    if( dht_sensor.measure( temperature, humidity ) == true )&lt;br /&gt;
    {&lt;br /&gt;
      dht_sensor.print_raw_data();&lt;br /&gt;
      measurement_timestamp = millis( );&lt;br /&gt;
      return( true );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return( false );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Main program loop.&lt;br /&gt;
 */&lt;br /&gt;
void loop( )&lt;br /&gt;
{&lt;br /&gt;
  float temperature;&lt;br /&gt;
  float humidity;&lt;br /&gt;
&lt;br /&gt;
  /* Measure temperature and humidity.  If the functions returns&lt;br /&gt;
     true, then a measurement is available. */&lt;br /&gt;
  if( measure_environment( &amp;amp;temperature, &amp;amp;humidity ) == true )&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print( &amp;quot;T = &amp;quot; );&lt;br /&gt;
    Serial.print( temperature, 1 );&lt;br /&gt;
    Serial.print( &amp;quot; deg. C, H = &amp;quot; );&lt;br /&gt;
    Serial.print( humidity, 1 );&lt;br /&gt;
    Serial.println( &amp;quot;%&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
■dht_nonblocking.h&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー dht_nonblocking.h]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
■dht_nonblocking.cpp&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー dht_nonblocking.cpp]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ライブラリを使わないで自分なりのコードにすると以下のようになりました。カウント部のデバッグ値も出力しています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;const byte DHT_PIN = 2;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // 待機状態（プルアップ）&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  byte data[5] = {0};&lt;br /&gt;
&lt;br /&gt;
  bool success = true;&lt;br /&gt;
  int errorBit = -1;&lt;br /&gt;
  int errorStep = 0;&lt;br /&gt;
&lt;br /&gt;
  byte countlow[40] = {0};&lt;br /&gt;
  byte counthigh[40] = {0};&lt;br /&gt;
&lt;br /&gt;
  // ここから通信開始処理&lt;br /&gt;
  // ① Arduinoから通信開始信号を送信&lt;br /&gt;
  pinMode(DHT_PIN, OUTPUT);&lt;br /&gt;
  digitalWrite(DHT_PIN, LOW);&lt;br /&gt;
  delay(20);  // 20ms LOW&lt;br /&gt;
&lt;br /&gt;
  // 開始信号のLOWを終了&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  // センサーが応答を始めるまでの待ち時間&lt;br /&gt;
  delayMicroseconds(30);&lt;br /&gt;
&lt;br /&gt;
  // 応答開始：LOWになるのを待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: No response&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答LOW（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(HIGH, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response LOW&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答HIGH（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response HIGH&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ③ 40ビットを読み取る&lt;br /&gt;
  noInterrupts();&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 40; i++) {&lt;br /&gt;
    // LOWが続いた回数を数える&lt;br /&gt;
    unsigned int lowCount = countPulse(LOW);&lt;br /&gt;
    countlow[i] = lowCount;&lt;br /&gt;
    // HIGHが続いた回数を数える&lt;br /&gt;
    unsigned int highCount = countPulse(HIGH);&lt;br /&gt;
    counthigh[i] = highCount;&lt;br /&gt;
    if (lowCount == 0 || highCount == 0) {&lt;br /&gt;
      success = false;&lt;br /&gt;
      errorBit = i;&lt;br /&gt;
      errorStep = (lowCount == 0) ? 1 : 2;&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 受信データを左へ1ビットずらす&lt;br /&gt;
    data[i / 8] &amp;lt;&amp;lt;= 1;&lt;br /&gt;
&lt;br /&gt;
    // HIGHの方が長ければ1&lt;br /&gt;
    if (highCount &amp;gt; lowCount) {&lt;br /&gt;
      data[i / 8] |= 1;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  interrupts();&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
    Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    Serial.print(countlow[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
    Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    Serial.print(counthigh[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!success) {&lt;br /&gt;
    Serial.print(&amp;quot;Error: Reading failed, Bit=&amp;quot;);&lt;br /&gt;
    Serial.print(errorBit);&lt;br /&gt;
    Serial.print(&amp;quot;, Step=&amp;quot;);&lt;br /&gt;
    Serial.println(errorStep);&lt;br /&gt;
&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ④ 受信した40ビットを表示&lt;br /&gt;
  Serial.print(&amp;quot;Sample RAW Bits: &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
    for (int bit = 7; bit &amp;gt;= 0; bit--) {&lt;br /&gt;
      Serial.print((data[i] &amp;gt;&amp;gt; bit) &amp;amp; 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (i &amp;lt; 4) {&lt;br /&gt;
      Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  // ⑤ チェックサムを検証&lt;br /&gt;
  byte checksum = data[0] + data[1] + data[2] + data[3];&lt;br /&gt;
&lt;br /&gt;
  if (checksum == data[4]) {&lt;br /&gt;
    Serial.print(&amp;quot;Sample OK: &amp;quot;);&lt;br /&gt;
    Serial.print(data[2]);&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
    Serial.print(data[3]);&lt;br /&gt;
    Serial.print(&amp;quot; deg. C, &amp;quot;);&lt;br /&gt;
    Serial.print(data[0]);&lt;br /&gt;
    Serial.println(&amp;quot; %&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;Checksum Error&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(3000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// 指定した電圧状態になるまで待つ&lt;br /&gt;
// timeout はマイクロ秒単位&lt;br /&gt;
bool waitForLevel(byte level, unsigned long timeout) {&lt;br /&gt;
  unsigned long start = micros();&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) != level) {&lt;br /&gt;
    if (micros() - start &amp;gt;= timeout) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned int countPulse(byte level) {&lt;br /&gt;
  unsigned int count = 0;&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) == level) {&lt;br /&gt;
    count++;&lt;br /&gt;
&lt;br /&gt;
    if (count &amp;gt;= 1000) {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return count;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;             47/              0/             28/              3/             78&amp;lt;/span&amp;gt; &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;0 0 1 0 1 1 1 1/0 0 0 0 0 0 0 0/0 0 0 1 1 1 0 0/0 0 0 0 0 0 1 1/0 1 0 0 1 1 1 0&amp;lt;/span&amp;gt;&lt;br /&gt;
  7 7 7 6 6 7 6 7 6 6 6 7 7 6 6 6 6 6 7 7 6 7 6 6 6 7 7 6 6 6 6 7 6 6 7 6 6 7 6 7 &lt;br /&gt;
  2 2 9 3 9 9 9 9 3 3 2 2 2 3 3 3 3 2 2 9 9 9 3 3 2 2 2 3 3 3 9 9 3 9 2 3 9 9 9 2 &lt;br /&gt;
 Sample RAW Bits: 00101111 00000000 00011100 00000011 01001110&lt;br /&gt;
 Sample OK: 28.3 deg. C, 47 %&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ビット列は8ビットずつ、湿度、湿度補助、温度、温度補助、チェックサムになっています。チェックサムは47+0+28+3=78という計算です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L12_04_3DPreview%E5%9B%B3.png&amp;diff=14177</id>
		<title>ファイル:Mega2560 L12 04 3DPreview図.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L12_04_3DPreview%E5%9B%B3.png&amp;diff=14177"/>
		<updated>2026-10-19T07:47:07Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L12_03_PCB%E5%9B%B3.png&amp;diff=14176</id>
		<title>ファイル:Mega2560 L12 03 PCB図.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L12_03_PCB%E5%9B%B3.png&amp;diff=14176"/>
		<updated>2026-10-19T07:44:29Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14175</id>
		<title>Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14175"/>
		<updated>2026-10-19T07:21:42Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　DHT11 温度湿度センサーを接続するレッスンです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　完成図は以下のようなモノです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 02 完成図.jpg|380px||none|完成図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AIによるタイミングチャート作図です。&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 01 DHT11通信タイミングチャート.png|380px||none|DHT11通信タイミングチャート]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　以下のようなコードです。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2018.10.25&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dht_nonblocking.h&amp;gt;&lt;br /&gt;
#define DHT_SENSOR_TYPE DHT_TYPE_11&lt;br /&gt;
&lt;br /&gt;
static const int DHT_SENSOR_PIN = 2;&lt;br /&gt;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Initialize the serial port.&lt;br /&gt;
 */&lt;br /&gt;
void setup( )&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin( 9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Poll for a measurement, keeping the state machine alive.  Returns&lt;br /&gt;
 * true if a measurement is available.&lt;br /&gt;
 */&lt;br /&gt;
static bool measure_environment( float *temperature, float *humidity )&lt;br /&gt;
{&lt;br /&gt;
  static unsigned long measurement_timestamp = millis( );&lt;br /&gt;
&lt;br /&gt;
  /* Measure once every four seconds. */&lt;br /&gt;
  if( millis( ) - measurement_timestamp &amp;gt; 3000ul )&lt;br /&gt;
  {&lt;br /&gt;
    if( dht_sensor.measure( temperature, humidity ) == true )&lt;br /&gt;
    {&lt;br /&gt;
      dht_sensor.print_raw_data();&lt;br /&gt;
      measurement_timestamp = millis( );&lt;br /&gt;
      return( true );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return( false );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Main program loop.&lt;br /&gt;
 */&lt;br /&gt;
void loop( )&lt;br /&gt;
{&lt;br /&gt;
  float temperature;&lt;br /&gt;
  float humidity;&lt;br /&gt;
&lt;br /&gt;
  /* Measure temperature and humidity.  If the functions returns&lt;br /&gt;
     true, then a measurement is available. */&lt;br /&gt;
  if( measure_environment( &amp;amp;temperature, &amp;amp;humidity ) == true )&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print( &amp;quot;T = &amp;quot; );&lt;br /&gt;
    Serial.print( temperature, 1 );&lt;br /&gt;
    Serial.print( &amp;quot; deg. C, H = &amp;quot; );&lt;br /&gt;
    Serial.print( humidity, 1 );&lt;br /&gt;
    Serial.println( &amp;quot;%&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
■dht_nonblocking.h&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー dht_nonblocking.h]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
■dht_nonblocking.cpp&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー dht_nonblocking.cpp]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ライブラリを使わないで自分なりのコードにすると以下のようになりました。カウント部のデバッグ値も出力しています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;const byte DHT_PIN = 2;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // 待機状態（プルアップ）&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  byte data[5] = {0};&lt;br /&gt;
&lt;br /&gt;
  bool success = true;&lt;br /&gt;
  int errorBit = -1;&lt;br /&gt;
  int errorStep = 0;&lt;br /&gt;
&lt;br /&gt;
  byte countlow[40] = {0};&lt;br /&gt;
  byte counthigh[40] = {0};&lt;br /&gt;
&lt;br /&gt;
  // ここから通信開始処理&lt;br /&gt;
  // ① Arduinoから通信開始信号を送信&lt;br /&gt;
  pinMode(DHT_PIN, OUTPUT);&lt;br /&gt;
  digitalWrite(DHT_PIN, LOW);&lt;br /&gt;
  delay(20);  // 20ms LOW&lt;br /&gt;
&lt;br /&gt;
  // 開始信号のLOWを終了&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  // センサーが応答を始めるまでの待ち時間&lt;br /&gt;
  delayMicroseconds(30);&lt;br /&gt;
&lt;br /&gt;
  // 応答開始：LOWになるのを待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: No response&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答LOW（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(HIGH, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response LOW&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答HIGH（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response HIGH&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ③ 40ビットを読み取る&lt;br /&gt;
  noInterrupts();&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 40; i++) {&lt;br /&gt;
    // LOWが続いた回数を数える&lt;br /&gt;
    unsigned int lowCount = countPulse(LOW);&lt;br /&gt;
    countlow[i] = lowCount;&lt;br /&gt;
    // HIGHが続いた回数を数える&lt;br /&gt;
    unsigned int highCount = countPulse(HIGH);&lt;br /&gt;
    counthigh[i] = highCount;&lt;br /&gt;
    if (lowCount == 0 || highCount == 0) {&lt;br /&gt;
      success = false;&lt;br /&gt;
      errorBit = i;&lt;br /&gt;
      errorStep = (lowCount == 0) ? 1 : 2;&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 受信データを左へ1ビットずらす&lt;br /&gt;
    data[i / 8] &amp;lt;&amp;lt;= 1;&lt;br /&gt;
&lt;br /&gt;
    // HIGHの方が長ければ1&lt;br /&gt;
    if (highCount &amp;gt; lowCount) {&lt;br /&gt;
      data[i / 8] |= 1;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  interrupts();&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
    Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    Serial.print(countlow[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
    Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    Serial.print(counthigh[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!success) {&lt;br /&gt;
    Serial.print(&amp;quot;Error: Reading failed, Bit=&amp;quot;);&lt;br /&gt;
    Serial.print(errorBit);&lt;br /&gt;
    Serial.print(&amp;quot;, Step=&amp;quot;);&lt;br /&gt;
    Serial.println(errorStep);&lt;br /&gt;
&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ④ 受信した40ビットを表示&lt;br /&gt;
  Serial.print(&amp;quot;Sample RAW Bits: &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
    for (int bit = 7; bit &amp;gt;= 0; bit--) {&lt;br /&gt;
      Serial.print((data[i] &amp;gt;&amp;gt; bit) &amp;amp; 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (i &amp;lt; 4) {&lt;br /&gt;
      Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  // ⑤ チェックサムを検証&lt;br /&gt;
  byte checksum = data[0] + data[1] + data[2] + data[3];&lt;br /&gt;
&lt;br /&gt;
  if (checksum == data[4]) {&lt;br /&gt;
    Serial.print(&amp;quot;Sample OK: &amp;quot;);&lt;br /&gt;
    Serial.print(data[2]);&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
    Serial.print(data[3]);&lt;br /&gt;
    Serial.print(&amp;quot; deg. C, &amp;quot;);&lt;br /&gt;
    Serial.print(data[0]);&lt;br /&gt;
    Serial.println(&amp;quot; %&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;Checksum Error&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(3000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// 指定した電圧状態になるまで待つ&lt;br /&gt;
// timeout はマイクロ秒単位&lt;br /&gt;
bool waitForLevel(byte level, unsigned long timeout) {&lt;br /&gt;
  unsigned long start = micros();&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) != level) {&lt;br /&gt;
    if (micros() - start &amp;gt;= timeout) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned int countPulse(byte level) {&lt;br /&gt;
  unsigned int count = 0;&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) == level) {&lt;br /&gt;
    count++;&lt;br /&gt;
&lt;br /&gt;
    if (count &amp;gt;= 1000) {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return count;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;             47/              0/             28/              3/             78&amp;lt;/span&amp;gt; &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;0 0 1 0 1 1 1 1/0 0 0 0 0 0 0 0/0 0 0 1 1 1 0 0/0 0 0 0 0 0 1 1/0 1 0 0 1 1 1 0&amp;lt;/span&amp;gt;&lt;br /&gt;
  7 7 7 6 6 7 6 7 6 6 6 7 7 6 6 6 6 6 7 7 6 7 6 6 6 7 7 6 6 6 6 7 6 6 7 6 6 7 6 7 &lt;br /&gt;
  2 2 9 3 9 9 9 9 3 3 2 2 2 3 3 3 3 2 2 9 9 9 3 3 2 2 2 3 3 3 9 9 3 9 2 3 9 9 9 2 &lt;br /&gt;
 Sample RAW Bits: 00101111 00000000 00011100 00000011 01001110&lt;br /&gt;
 Sample OK: 28.3 deg. C, 47 %&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ビット列は8ビットずつ、湿度、湿度補助、温度、温度補助、チェックサムになっています。チェックサムは47+0+28+3=78という計算です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14174</id>
		<title>Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14174"/>
		<updated>2026-10-19T07:19:55Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　DHT11 温度湿度センサーを接続するレッスンです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　完成図は以下のようなモノです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 02 完成図.jpg|380px||none|完成図]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AIによるタイミングチャート作図です。&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 01 DHT11通信タイミングチャート.png|380px||none|DHT11通信タイミングチャート]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　以下のようなコードです。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2018.10.25&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dht_nonblocking.h&amp;gt;&lt;br /&gt;
#define DHT_SENSOR_TYPE DHT_TYPE_11&lt;br /&gt;
&lt;br /&gt;
static const int DHT_SENSOR_PIN = 2;&lt;br /&gt;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Initialize the serial port.&lt;br /&gt;
 */&lt;br /&gt;
void setup( )&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin( 9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Poll for a measurement, keeping the state machine alive.  Returns&lt;br /&gt;
 * true if a measurement is available.&lt;br /&gt;
 */&lt;br /&gt;
static bool measure_environment( float *temperature, float *humidity )&lt;br /&gt;
{&lt;br /&gt;
  static unsigned long measurement_timestamp = millis( );&lt;br /&gt;
&lt;br /&gt;
  /* Measure once every four seconds. */&lt;br /&gt;
  if( millis( ) - measurement_timestamp &amp;gt; 3000ul )&lt;br /&gt;
  {&lt;br /&gt;
    if( dht_sensor.measure( temperature, humidity ) == true )&lt;br /&gt;
    {&lt;br /&gt;
      dht_sensor.print_raw_data();&lt;br /&gt;
      measurement_timestamp = millis( );&lt;br /&gt;
      return( true );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return( false );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Main program loop.&lt;br /&gt;
 */&lt;br /&gt;
void loop( )&lt;br /&gt;
{&lt;br /&gt;
  float temperature;&lt;br /&gt;
  float humidity;&lt;br /&gt;
&lt;br /&gt;
  /* Measure temperature and humidity.  If the functions returns&lt;br /&gt;
     true, then a measurement is available. */&lt;br /&gt;
  if( measure_environment( &amp;amp;temperature, &amp;amp;humidity ) == true )&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print( &amp;quot;T = &amp;quot; );&lt;br /&gt;
    Serial.print( temperature, 1 );&lt;br /&gt;
    Serial.print( &amp;quot; deg. C, H = &amp;quot; );&lt;br /&gt;
    Serial.print( humidity, 1 );&lt;br /&gt;
    Serial.println( &amp;quot;%&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
■dht_nonblocking.h&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー dht_nonblocking.h]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
■dht_nonblocking.cpp&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー dht_nonblocking.cpp]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ライブラリを使わないで自分なりのコードにすると以下のようになりました。カウント部のデバッグ値も出力しています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;const byte DHT_PIN = 2;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // 待機状態（プルアップ）&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
    byte data[5] = {0};&lt;br /&gt;
&lt;br /&gt;
    bool success = true;&lt;br /&gt;
    int errorBit = -1;&lt;br /&gt;
    int errorStep = 0;&lt;br /&gt;
&lt;br /&gt;
    byte countlow[40] = {0};&lt;br /&gt;
    byte counthigh[40] = {0};&lt;br /&gt;
&lt;br /&gt;
    // ここから通信開始処理&lt;br /&gt;
  // ① Arduinoから通信開始信号を送信&lt;br /&gt;
  pinMode(DHT_PIN, OUTPUT);&lt;br /&gt;
  digitalWrite(DHT_PIN, LOW);&lt;br /&gt;
  delay(20);  // 20ms LOW&lt;br /&gt;
&lt;br /&gt;
  // 開始信号のLOWを終了&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  // センサーが応答を始めるまでの待ち時間&lt;br /&gt;
  delayMicroseconds(30);&lt;br /&gt;
&lt;br /&gt;
  // 応答開始：LOWになるのを待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: No response&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答LOW（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(HIGH, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response LOW&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答HIGH（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response HIGH&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ③ 40ビットを読み取る&lt;br /&gt;
  noInterrupts();&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 40; i++) {&lt;br /&gt;
    // LOWが続いた回数を数える&lt;br /&gt;
    unsigned int lowCount = countPulse(LOW);&lt;br /&gt;
    countlow[i] = lowCount;&lt;br /&gt;
    // HIGHが続いた回数を数える&lt;br /&gt;
    unsigned int highCount = countPulse(HIGH);&lt;br /&gt;
    counthigh[i] = highCount;&lt;br /&gt;
    if (lowCount == 0 || highCount == 0) {&lt;br /&gt;
      success = false;&lt;br /&gt;
      errorBit = i;&lt;br /&gt;
      errorStep = (lowCount == 0) ? 1 : 2;&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 受信データを左へ1ビットずらす&lt;br /&gt;
    data[i / 8] &amp;lt;&amp;lt;= 1;&lt;br /&gt;
&lt;br /&gt;
    // HIGHの方が長ければ1&lt;br /&gt;
    if (highCount &amp;gt; lowCount) {&lt;br /&gt;
      data[i / 8] |= 1;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  interrupts();&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
    Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    Serial.print(countlow[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
    Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    Serial.print(counthigh[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!success) {&lt;br /&gt;
    Serial.print(&amp;quot;Error: Reading failed, Bit=&amp;quot;);&lt;br /&gt;
    Serial.print(errorBit);&lt;br /&gt;
    Serial.print(&amp;quot;, Step=&amp;quot;);&lt;br /&gt;
    Serial.println(errorStep);&lt;br /&gt;
&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ④ 受信した40ビットを表示&lt;br /&gt;
  Serial.print(&amp;quot;Sample RAW Bits: &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
    for (int bit = 7; bit &amp;gt;= 0; bit--) {&lt;br /&gt;
      Serial.print((data[i] &amp;gt;&amp;gt; bit) &amp;amp; 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (i &amp;lt; 4) {&lt;br /&gt;
      Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  // ⑤ チェックサムを検証&lt;br /&gt;
  byte checksum = data[0] + data[1] + data[2] + data[3];&lt;br /&gt;
&lt;br /&gt;
  if (checksum == data[4]) {&lt;br /&gt;
    Serial.print(&amp;quot;Sample OK: &amp;quot;);&lt;br /&gt;
    Serial.print(data[2]);&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
    Serial.print(data[3]);&lt;br /&gt;
    Serial.print(&amp;quot; deg. C, &amp;quot;);&lt;br /&gt;
    Serial.print(data[0]);&lt;br /&gt;
    Serial.println(&amp;quot; %&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;Checksum Error&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(3000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// 指定した電圧状態になるまで待つ&lt;br /&gt;
// timeout はマイクロ秒単位&lt;br /&gt;
bool waitForLevel(byte level, unsigned long timeout) {&lt;br /&gt;
  unsigned long start = micros();&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) != level) {&lt;br /&gt;
    if (micros() - start &amp;gt;= timeout) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned int countPulse(byte level) {&lt;br /&gt;
  unsigned int count = 0;&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) == level) {&lt;br /&gt;
    count++;&lt;br /&gt;
&lt;br /&gt;
    if (count &amp;gt;= 1000) {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return count;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;             47/              0/             28/              3/             78&amp;lt;/span&amp;gt; &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;0 0 1 0 1 1 1 1/0 0 0 0 0 0 0 0/0 0 0 1 1 1 0 0/0 0 0 0 0 0 1 1/0 1 0 0 1 1 1 0&amp;lt;/span&amp;gt;&lt;br /&gt;
  7 7 7 6 6 7 6 7 6 6 6 7 7 6 6 6 6 6 7 7 6 7 6 6 6 7 7 6 6 6 6 7 6 6 7 6 6 7 6 7 &lt;br /&gt;
  2 2 9 3 9 9 9 9 3 3 2 2 2 3 3 3 3 2 2 9 9 9 3 3 2 2 2 3 3 3 9 9 3 9 2 3 9 9 9 2 &lt;br /&gt;
 Sample RAW Bits: 00101111 00000000 00011100 00000011 01001110&lt;br /&gt;
 Sample OK: 28.3 deg. C, 47 %&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ビット列は8ビットずつ、湿度、湿度補助、温度、温度補助、チェックサムになっています。チェックサムは47+0+28+3=78という計算です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L12_02_%E5%AE%8C%E6%88%90%E5%9B%B3.jpg&amp;diff=14173</id>
		<title>ファイル:Mega2560 L12 02 完成図.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Mega2560_L12_02_%E5%AE%8C%E6%88%90%E5%9B%B3.jpg&amp;diff=14173"/>
		<updated>2026-10-19T07:18:07Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC_dht_nonblocking.cpp&amp;diff=14172</id>
		<title>Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー dht nonblocking.cpp</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC_dht_nonblocking.cpp&amp;diff=14172"/>
		<updated>2026-10-16T15:57:22Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: ページの作成:「&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;script&amp;gt;     // 最初に実行されるスクリプト     document.addEventListener('DOMContentLoaded', () =&amp;gt; {       const observer = new MutationObserver((mutations) =&amp;gt; {         mutations.forEach((mutation) =&amp;gt; {           mutation.addedNodes.forEach((node) =&amp;gt; {             if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {                 // JavaScriptコードを変換                 const originalCode = node.textContent;…」&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー]]に戻る。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;/*&lt;br /&gt;
 * DHT11, DHT21, and DHT22 non-blocking library.&lt;br /&gt;
 * Based on Adafruit Industries' DHT driver library.&lt;br /&gt;
 *&lt;br /&gt;
 * (C) 2015 Ole Wolf &amp;lt;wolf@blazingangles.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * This program is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This program is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with this program.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;dht_nonblocking.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define DHT_IDLE                  0&lt;br /&gt;
#define DHT_BEGIN_MEASUREMENT     1&lt;br /&gt;
#define DHT_BEGIN_MEASUREMENT_2   2&lt;br /&gt;
#define DHT_DO_READING            3&lt;br /&gt;
#define DHT_COOLDOWN              4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Number of milliseconds before a new sensor read may be initiated. */&lt;br /&gt;
#define COOLDOWN_TIME  2000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Constructor for the sensor.  It remembers the pin number and the&lt;br /&gt;
 * type of sensor, and initializes internal variables.&lt;br /&gt;
 */&lt;br /&gt;
DHT_nonblocking::DHT_nonblocking( uint8_t pin, uint8_t type )&lt;br /&gt;
	: _pin( pin ),&lt;br /&gt;
	  _type( type ),&lt;br /&gt;
	  _bit( digitalPinToBitMask( pin ) ),&lt;br /&gt;
	  _port( digitalPinToPort( pin ) ),&lt;br /&gt;
	  _maxcycles( microsecondsToClockCycles( 1000 ) )&lt;br /&gt;
{&lt;br /&gt;
  dht_state = DHT_IDLE;&lt;br /&gt;
&lt;br /&gt;
  pinMode( _pin, INPUT );&lt;br /&gt;
  digitalWrite( _pin, HIGH );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Instruct the DHT to begin sampling.  Keep polling until it returns true.&lt;br /&gt;
 * The tempearture is in degrees Celsius, and the humidity is in %.&lt;br /&gt;
 */&lt;br /&gt;
bool DHT_nonblocking::measure( float *temperature, float *humidity )&lt;br /&gt;
{&lt;br /&gt;
  if( read_nonblocking( ) == true )&lt;br /&gt;
  {&lt;br /&gt;
    *temperature = read_temperature( );&lt;br /&gt;
    *humidity    = read_humidity( );&lt;br /&gt;
    return( true );&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    return( false );&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float DHT_nonblocking::read_temperature( ) const&lt;br /&gt;
{&lt;br /&gt;
  int16_t value;&lt;br /&gt;
  float   to_return;&lt;br /&gt;
&lt;br /&gt;
  switch( _type )&lt;br /&gt;
  {&lt;br /&gt;
  case DHT_TYPE_11:&lt;br /&gt;
    value = data[ 2 ];&lt;br /&gt;
    to_return = (float) value;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case DHT_TYPE_21:&lt;br /&gt;
  case DHT_TYPE_22:&lt;br /&gt;
    value = ( data[ 2 ] &amp;amp; 0x7f ) &amp;lt;&amp;lt; 8;&lt;br /&gt;
    value |= data[ 3 ];&lt;br /&gt;
    if( ( data[ 2 ] &amp;amp; 0x80 ) != 0 )&lt;br /&gt;
    {&lt;br /&gt;
      value = -value;&lt;br /&gt;
    }&lt;br /&gt;
    to_return = ( (float) value ) / 10.0;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  default:&lt;br /&gt;
    to_return = NAN;&lt;br /&gt;
    break;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return( to_return );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float DHT_nonblocking::read_humidity( ) const&lt;br /&gt;
{&lt;br /&gt;
  uint16_t value;&lt;br /&gt;
  float   to_return;&lt;br /&gt;
&lt;br /&gt;
  switch( _type )&lt;br /&gt;
  {&lt;br /&gt;
  case DHT_TYPE_11:&lt;br /&gt;
    value =  data[ 0 ];&lt;br /&gt;
    to_return = (float) value;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case DHT_TYPE_21:&lt;br /&gt;
  case DHT_TYPE_22:&lt;br /&gt;
    value =  data[ 0 ] &amp;lt;&amp;lt; 8;&lt;br /&gt;
    value |= data[ 1 ];&lt;br /&gt;
    to_return = (float)value / 10.0;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  default:&lt;br /&gt;
    to_return = NAN;&lt;br /&gt;
    break;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return( to_return );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Expect the input to be at the specified level and return the number&lt;br /&gt;
 * of loop cycles spent there.  This is identical to Adafruit's blocking&lt;br /&gt;
 * driver.&lt;br /&gt;
 */&lt;br /&gt;
uint32_t DHT_nonblocking::expect_pulse(bool level) const&lt;br /&gt;
{&lt;br /&gt;
  uint32_t count = 0;&lt;br /&gt;
  // On AVR platforms use direct GPIO port access as it's much faster and better&lt;br /&gt;
  // for catching pulses that are 10's of microseconds in length:&lt;br /&gt;
  #ifdef __AVR&lt;br /&gt;
    uint8_t portState = level ? _bit : 0;&lt;br /&gt;
    while ((*portInputRegister(_port) &amp;amp; _bit) == portState) {&lt;br /&gt;
      if (count++ &amp;gt;= _maxcycles) {&lt;br /&gt;
        return 0; // Exceeded timeout, fail.&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  // Otherwise fall back to using digitalRead (this seems to be necessary on ESP8266&lt;br /&gt;
  // right now, perhaps bugs in direct port access functions?).&lt;br /&gt;
  #else&lt;br /&gt;
    while (digitalRead(_pin) == level) {&lt;br /&gt;
      if (count++ &amp;gt;= _maxcycles) {&lt;br /&gt;
        return 0; // Exceeded timeout, fail.&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  #endif&lt;br /&gt;
&lt;br /&gt;
  return count;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * State machine of the non-blocking read.&lt;br /&gt;
 */&lt;br /&gt;
bool DHT_nonblocking::read_nonblocking( )&lt;br /&gt;
{&lt;br /&gt;
  bool status = false;&lt;br /&gt;
&lt;br /&gt;
  switch( dht_state )&lt;br /&gt;
  {&lt;br /&gt;
  /* We may begin measuring any time. */&lt;br /&gt;
  case DHT_IDLE:&lt;br /&gt;
    dht_state = DHT_BEGIN_MEASUREMENT;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  /* Initiate a sensor read.  The read begins by going to high impedance&lt;br /&gt;
     state for 250 ms. */&lt;br /&gt;
  case DHT_BEGIN_MEASUREMENT:&lt;br /&gt;
    digitalWrite( _pin, HIGH );&lt;br /&gt;
    /* Reset 40 bits of received data to zero. */&lt;br /&gt;
    data[ 0 ] = data[ 1 ] = data[ 2 ] = data[ 3 ] = data[ 4 ] = 0;&lt;br /&gt;
    dht_timestamp = millis( );&lt;br /&gt;
    dht_state = DHT_BEGIN_MEASUREMENT_2;&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  /* After the high impedance state, pull the pin low for 20 ms. */&lt;br /&gt;
  case DHT_BEGIN_MEASUREMENT_2:&lt;br /&gt;
    /* Wait for 250 ms. */&lt;br /&gt;
    if( millis( ) - dht_timestamp &amp;gt; 250 )&lt;br /&gt;
    {&lt;br /&gt;
      pinMode( _pin, OUTPUT );&lt;br /&gt;
      digitalWrite( _pin, LOW );&lt;br /&gt;
      dht_timestamp = millis( );&lt;br /&gt;
      dht_state = DHT_DO_READING;&lt;br /&gt;
    }&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case DHT_DO_READING:&lt;br /&gt;
    /* Wait for 20 ms. */&lt;br /&gt;
    if( millis( ) - dht_timestamp &amp;gt; 20 )&lt;br /&gt;
    {&lt;br /&gt;
      dht_timestamp = millis( );&lt;br /&gt;
      dht_state = DHT_COOLDOWN;&lt;br /&gt;
      status = read_data( );&lt;br /&gt;
//      if( status != true )&lt;br /&gt;
//      {&lt;br /&gt;
//        Serial.println( &amp;quot;Reading failed&amp;quot; );&lt;br /&gt;
//      }&lt;br /&gt;
    }&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  /* If it has been less than two seconds since the last time we read&lt;br /&gt;
     the sensor, then let the sensor cool down.. */&lt;br /&gt;
  case DHT_COOLDOWN:&lt;br /&gt;
    if( millis( ) - dht_timestamp &amp;gt; COOLDOWN_TIME )&lt;br /&gt;
    {&lt;br /&gt;
      dht_state = DHT_IDLE;&lt;br /&gt;
    }&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  default:&lt;br /&gt;
    break;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return( status );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Read sensor data.  This is identical to Adafruit's blocking driver. */&lt;br /&gt;
bool DHT_nonblocking::read_data( )&lt;br /&gt;
{&lt;br /&gt;
  uint32_t cycles[ 80 ];&lt;br /&gt;
&lt;br /&gt;
  /* Turn off interrupts temporarily because the next sections are timing critical&lt;br /&gt;
     and we don't want any interruptions. */&lt;br /&gt;
  {&lt;br /&gt;
    volatile DHT_interrupt interrupt;&lt;br /&gt;
&lt;br /&gt;
    // End the start signal by setting data line high for 40 microseconds.&lt;br /&gt;
    digitalWrite( _pin, HIGH );&lt;br /&gt;
    delayMicroseconds( 40 );&lt;br /&gt;
&lt;br /&gt;
    // Now start reading the data line to get the value from the DHT sensor.&lt;br /&gt;
    pinMode( _pin, INPUT );&lt;br /&gt;
    // Delay a bit to let sensor pull data line low.&lt;br /&gt;
    delayMicroseconds( 10 );&lt;br /&gt;
&lt;br /&gt;
    // First expect a low signal for ~80 microseconds followed by a high signal&lt;br /&gt;
    // for ~80 microseconds again.&lt;br /&gt;
    if( expect_pulse( LOW ) == 0 )&lt;br /&gt;
    {&lt;br /&gt;
      return( false );&lt;br /&gt;
    }&lt;br /&gt;
    if( expect_pulse( HIGH ) == 0 )&lt;br /&gt;
    {&lt;br /&gt;
      return( false );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Now read the 40 bits sent by the sensor.  Each bit is sent as a 50&lt;br /&gt;
    // microsecond low pulse followed by a variable length high pulse.  If the&lt;br /&gt;
    // high pulse is ~28 microseconds then it's a 0 and if it's ~70 microseconds&lt;br /&gt;
    // then it's a 1.  We measure the cycle count of the initial 50us low pulse&lt;br /&gt;
    // and use that to compare to the cycle count of the high pulse to determine&lt;br /&gt;
    // if the bit is a 0 (high state cycle count &amp;lt; low state cycle count), or a&lt;br /&gt;
    // 1 (high state cycle count &amp;gt; low state cycle count). Note that for speed all&lt;br /&gt;
    // the pulses are read into a array and then examined in a later step.&lt;br /&gt;
    for( int i = 0; i &amp;lt; 80; i += 2 )&lt;br /&gt;
    {&lt;br /&gt;
      cycles[ i     ] = expect_pulse( LOW );&lt;br /&gt;
      cycles[ i + 1 ] = expect_pulse( HIGH );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Timing critical code is now complete. */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Inspect pulses and determine which ones are 0 (high state cycle count &amp;lt; low&lt;br /&gt;
  // state cycle count), or 1 (high state cycle count &amp;gt; low state cycle count).&lt;br /&gt;
  for( int i = 0; i &amp;lt; 40; ++i )&lt;br /&gt;
  {&lt;br /&gt;
    uint32_t low_cycles  = cycles[ 2 * i     ];&lt;br /&gt;
    uint32_t high_cycles = cycles[ 2 * i + 1 ];&lt;br /&gt;
    if( ( low_cycles == 0 ) || ( high_cycles == 0 ) )&lt;br /&gt;
    {&lt;br /&gt;
      return( false );&lt;br /&gt;
    }&lt;br /&gt;
    data[ i / 8 ] &amp;lt;&amp;lt;= 1;&lt;br /&gt;
    // Now compare the low and high cycle times to see if the bit is a 0 or 1.&lt;br /&gt;
    if( high_cycles &amp;gt; low_cycles )&lt;br /&gt;
    {&lt;br /&gt;
      // High cycles are greater than 50us low cycle count, must be a 1.&lt;br /&gt;
      data[ i / 8 ] |= 1;&lt;br /&gt;
    }&lt;br /&gt;
    // Else high cycles are less than (or equal to, a weird case) the 50us low&lt;br /&gt;
    // cycle count so this must be a zero.  Nothing needs to be changed in the&lt;br /&gt;
    // stored data.&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Check we read 40 bits and that the checksum matches.&lt;br /&gt;
  if( data[ 4 ] == ( ( data[ 0 ] + data[ 1 ] + data[ 2 ] + data[ 3 ]) &amp;amp; 0xFF ) )&lt;br /&gt;
  {&lt;br /&gt;
    return( true );&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    return( false );&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void DHT_nonblocking::print_raw_data()&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(&amp;quot;Sample RAW Bits: &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 5; i++)&lt;br /&gt;
  {&lt;br /&gt;
    for (int bit = 7; bit &amp;gt;= 0; bit--)&lt;br /&gt;
    {&lt;br /&gt;
      Serial.print((data[i] &amp;gt;&amp;gt; bit) &amp;amp; 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (i &amp;lt; 4)&lt;br /&gt;
    {&lt;br /&gt;
      Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC_dht_nonblocking.h&amp;diff=14171</id>
		<title>Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー dht nonblocking.h</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC_dht_nonblocking.h&amp;diff=14171"/>
		<updated>2026-10-16T15:53:16Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: ページの作成:「&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;script&amp;gt;     // 最初に実行されるスクリプト     document.addEventListener('DOMContentLoaded', () =&amp;gt; {       const observer = new MutationObserver((mutations) =&amp;gt; {         mutations.forEach((mutation) =&amp;gt; {           mutation.addedNodes.forEach((node) =&amp;gt; {             if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {                 // JavaScriptコードを変換                 const originalCode = node.textContent;…」&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー]]に戻る。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;/*&lt;br /&gt;
 * DHT11, DHT21, and DHT22 non-blocking library.&lt;br /&gt;
 * Based on Adafruit Industries' DHT driver library.&lt;br /&gt;
 *&lt;br /&gt;
 * (C) 2015 Ole Wolf &amp;lt;wolf@blazingangles.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * This program is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This program is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with this program.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#ifndef _DHT_NONBLOCKING_H&lt;br /&gt;
#define _DHT_NONBLOCKING_H&lt;br /&gt;
&lt;br /&gt;
#if ARDUINO &amp;gt;= 100&lt;br /&gt;
 #include &amp;quot;Arduino.h&amp;quot;&lt;br /&gt;
#else&lt;br /&gt;
 #include &amp;quot;WProgram.h&amp;quot;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define DHT_TYPE_11  0&lt;br /&gt;
#define DHT_TYPE_21  1&lt;br /&gt;
#define DHT_TYPE_22  2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class DHT_nonblocking&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
    DHT_nonblocking( uint8_t pin, uint8_t type );&lt;br /&gt;
    bool measure( float *temperature, float *humidity );&lt;br /&gt;
	void print_raw_data();&lt;br /&gt;
&lt;br /&gt;
  private:&lt;br /&gt;
    bool read_data( );&lt;br /&gt;
    bool read_nonblocking( );&lt;br /&gt;
    float read_temperature( ) const;&lt;br /&gt;
    float read_humidity( ) const;&lt;br /&gt;
&lt;br /&gt;
    uint8_t dht_state;&lt;br /&gt;
    unsigned long dht_timestamp;&lt;br /&gt;
    uint8_t data[ 6 ];&lt;br /&gt;
    const uint8_t _pin, _type, _bit, _port;&lt;br /&gt;
    const uint32_t _maxcycles;&lt;br /&gt;
&lt;br /&gt;
    uint32_t expect_pulse( bool level ) const;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class DHT_interrupt&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
  DHT_interrupt( )&lt;br /&gt;
  {&lt;br /&gt;
    noInterrupts( );&lt;br /&gt;
  }&lt;br /&gt;
  ~DHT_interrupt( )&lt;br /&gt;
  {&lt;br /&gt;
    interrupts( );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#endif /* _DHT_NONBLOCKING_H */&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14170</id>
		<title>Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14170"/>
		<updated>2026-10-16T15:51:48Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　DHT11 温度湿度センサーを接続するレッスンです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AIによるタイミングチャート作図です。&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 01 DHT11通信タイミングチャート.png|380px||none|DHT11通信タイミングチャート]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　以下のようなコードです。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2018.10.25&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dht_nonblocking.h&amp;gt;&lt;br /&gt;
#define DHT_SENSOR_TYPE DHT_TYPE_11&lt;br /&gt;
&lt;br /&gt;
static const int DHT_SENSOR_PIN = 2;&lt;br /&gt;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Initialize the serial port.&lt;br /&gt;
 */&lt;br /&gt;
void setup( )&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin( 9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Poll for a measurement, keeping the state machine alive.  Returns&lt;br /&gt;
 * true if a measurement is available.&lt;br /&gt;
 */&lt;br /&gt;
static bool measure_environment( float *temperature, float *humidity )&lt;br /&gt;
{&lt;br /&gt;
  static unsigned long measurement_timestamp = millis( );&lt;br /&gt;
&lt;br /&gt;
  /* Measure once every four seconds. */&lt;br /&gt;
  if( millis( ) - measurement_timestamp &amp;gt; 3000ul )&lt;br /&gt;
  {&lt;br /&gt;
    if( dht_sensor.measure( temperature, humidity ) == true )&lt;br /&gt;
    {&lt;br /&gt;
      dht_sensor.print_raw_data();&lt;br /&gt;
      measurement_timestamp = millis( );&lt;br /&gt;
      return( true );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return( false );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Main program loop.&lt;br /&gt;
 */&lt;br /&gt;
void loop( )&lt;br /&gt;
{&lt;br /&gt;
  float temperature;&lt;br /&gt;
  float humidity;&lt;br /&gt;
&lt;br /&gt;
  /* Measure temperature and humidity.  If the functions returns&lt;br /&gt;
     true, then a measurement is available. */&lt;br /&gt;
  if( measure_environment( &amp;amp;temperature, &amp;amp;humidity ) == true )&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print( &amp;quot;T = &amp;quot; );&lt;br /&gt;
    Serial.print( temperature, 1 );&lt;br /&gt;
    Serial.print( &amp;quot; deg. C, H = &amp;quot; );&lt;br /&gt;
    Serial.print( humidity, 1 );&lt;br /&gt;
    Serial.println( &amp;quot;%&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
■dht_nonblocking.h&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー dht_nonblocking.h]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
■dht_nonblocking.cpp&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー dht_nonblocking.cpp]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ライブラリを使わないで自分なりのコードにすると以下のようになりました。カウント部のデバッグ値も出力しています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;const byte DHT_PIN = 2;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // 待機状態（プルアップ）&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
    byte data[5] = {0};&lt;br /&gt;
&lt;br /&gt;
    bool success = true;&lt;br /&gt;
    int errorBit = -1;&lt;br /&gt;
    int errorStep = 0;&lt;br /&gt;
&lt;br /&gt;
    byte countlow[40] = {0};&lt;br /&gt;
    byte counthigh[40] = {0};&lt;br /&gt;
&lt;br /&gt;
    // ここから通信開始処理&lt;br /&gt;
  // ① Arduinoから通信開始信号を送信&lt;br /&gt;
  pinMode(DHT_PIN, OUTPUT);&lt;br /&gt;
  digitalWrite(DHT_PIN, LOW);&lt;br /&gt;
  delay(20);  // 20ms LOW&lt;br /&gt;
&lt;br /&gt;
  // 開始信号のLOWを終了&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  // センサーが応答を始めるまでの待ち時間&lt;br /&gt;
  delayMicroseconds(30);&lt;br /&gt;
&lt;br /&gt;
  // 応答開始：LOWになるのを待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: No response&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答LOW（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(HIGH, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response LOW&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答HIGH（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response HIGH&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ③ 40ビットを読み取る&lt;br /&gt;
  noInterrupts();&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 40; i++) {&lt;br /&gt;
    // LOWが続いた回数を数える&lt;br /&gt;
    unsigned int lowCount = countPulse(LOW);&lt;br /&gt;
    countlow[i] = lowCount;&lt;br /&gt;
    // HIGHが続いた回数を数える&lt;br /&gt;
    unsigned int highCount = countPulse(HIGH);&lt;br /&gt;
    counthigh[i] = highCount;&lt;br /&gt;
    if (lowCount == 0 || highCount == 0) {&lt;br /&gt;
      success = false;&lt;br /&gt;
      errorBit = i;&lt;br /&gt;
      errorStep = (lowCount == 0) ? 1 : 2;&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 受信データを左へ1ビットずらす&lt;br /&gt;
    data[i / 8] &amp;lt;&amp;lt;= 1;&lt;br /&gt;
&lt;br /&gt;
    // HIGHの方が長ければ1&lt;br /&gt;
    if (highCount &amp;gt; lowCount) {&lt;br /&gt;
      data[i / 8] |= 1;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  interrupts();&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
    Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    Serial.print(countlow[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
    Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    Serial.print(counthigh[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!success) {&lt;br /&gt;
    Serial.print(&amp;quot;Error: Reading failed, Bit=&amp;quot;);&lt;br /&gt;
    Serial.print(errorBit);&lt;br /&gt;
    Serial.print(&amp;quot;, Step=&amp;quot;);&lt;br /&gt;
    Serial.println(errorStep);&lt;br /&gt;
&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ④ 受信した40ビットを表示&lt;br /&gt;
  Serial.print(&amp;quot;Sample RAW Bits: &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
    for (int bit = 7; bit &amp;gt;= 0; bit--) {&lt;br /&gt;
      Serial.print((data[i] &amp;gt;&amp;gt; bit) &amp;amp; 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (i &amp;lt; 4) {&lt;br /&gt;
      Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  // ⑤ チェックサムを検証&lt;br /&gt;
  byte checksum = data[0] + data[1] + data[2] + data[3];&lt;br /&gt;
&lt;br /&gt;
  if (checksum == data[4]) {&lt;br /&gt;
    Serial.print(&amp;quot;Sample OK: &amp;quot;);&lt;br /&gt;
    Serial.print(data[2]);&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
    Serial.print(data[3]);&lt;br /&gt;
    Serial.print(&amp;quot; deg. C, &amp;quot;);&lt;br /&gt;
    Serial.print(data[0]);&lt;br /&gt;
    Serial.println(&amp;quot; %&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;Checksum Error&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(3000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// 指定した電圧状態になるまで待つ&lt;br /&gt;
// timeout はマイクロ秒単位&lt;br /&gt;
bool waitForLevel(byte level, unsigned long timeout) {&lt;br /&gt;
  unsigned long start = micros();&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) != level) {&lt;br /&gt;
    if (micros() - start &amp;gt;= timeout) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned int countPulse(byte level) {&lt;br /&gt;
  unsigned int count = 0;&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) == level) {&lt;br /&gt;
    count++;&lt;br /&gt;
&lt;br /&gt;
    if (count &amp;gt;= 1000) {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return count;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;             47/              0/             28/              3/             78&amp;lt;/span&amp;gt; &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;0 0 1 0 1 1 1 1/0 0 0 0 0 0 0 0/0 0 0 1 1 1 0 0/0 0 0 0 0 0 1 1/0 1 0 0 1 1 1 0&amp;lt;/span&amp;gt;&lt;br /&gt;
  7 7 7 6 6 7 6 7 6 6 6 7 7 6 6 6 6 6 7 7 6 7 6 6 6 7 7 6 6 6 6 7 6 6 7 6 6 7 6 7 &lt;br /&gt;
  2 2 9 3 9 9 9 9 3 3 2 2 2 3 3 3 3 2 2 9 9 9 3 3 2 2 2 3 3 3 9 9 3 9 2 3 9 9 9 2 &lt;br /&gt;
 Sample RAW Bits: 00101111 00000000 00011100 00000011 01001110&lt;br /&gt;
 Sample OK: 28.3 deg. C, 47 %&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ビット列は8ビットずつ、湿度、湿度補助、温度、温度補助、チェックサムになっています。チェックサムは47+0+28+3=78という計算です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14169</id>
		<title>Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14169"/>
		<updated>2026-10-16T15:42:48Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　DHT11 温度湿度センサーを接続するレッスンです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AIによるタイミングチャート作図です。&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 01 DHT11通信タイミングチャート.png|380px||none|DHT11通信タイミングチャート]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　以下のようなコードです。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2018.10.25&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dht_nonblocking.h&amp;gt;&lt;br /&gt;
#define DHT_SENSOR_TYPE DHT_TYPE_11&lt;br /&gt;
&lt;br /&gt;
static const int DHT_SENSOR_PIN = 2;&lt;br /&gt;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Initialize the serial port.&lt;br /&gt;
 */&lt;br /&gt;
void setup( )&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin( 9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Poll for a measurement, keeping the state machine alive.  Returns&lt;br /&gt;
 * true if a measurement is available.&lt;br /&gt;
 */&lt;br /&gt;
static bool measure_environment( float *temperature, float *humidity )&lt;br /&gt;
{&lt;br /&gt;
  static unsigned long measurement_timestamp = millis( );&lt;br /&gt;
&lt;br /&gt;
  /* Measure once every four seconds. */&lt;br /&gt;
  if( millis( ) - measurement_timestamp &amp;gt; 3000ul )&lt;br /&gt;
  {&lt;br /&gt;
    if( dht_sensor.measure( temperature, humidity ) == true )&lt;br /&gt;
    {&lt;br /&gt;
      dht_sensor.print_raw_data();&lt;br /&gt;
      measurement_timestamp = millis( );&lt;br /&gt;
      return( true );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return( false );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Main program loop.&lt;br /&gt;
 */&lt;br /&gt;
void loop( )&lt;br /&gt;
{&lt;br /&gt;
  float temperature;&lt;br /&gt;
  float humidity;&lt;br /&gt;
&lt;br /&gt;
  /* Measure temperature and humidity.  If the functions returns&lt;br /&gt;
     true, then a measurement is available. */&lt;br /&gt;
  if( measure_environment( &amp;amp;temperature, &amp;amp;humidity ) == true )&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print( &amp;quot;T = &amp;quot; );&lt;br /&gt;
    Serial.print( temperature, 1 );&lt;br /&gt;
    Serial.print( &amp;quot; deg. C, H = &amp;quot; );&lt;br /&gt;
    Serial.print( humidity, 1 );&lt;br /&gt;
    Serial.println( &amp;quot;%&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ライブラリを使わないで自分なりのコードにすると以下のようになりました。カウント部のデバッグ値も出力しています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;const byte DHT_PIN = 2;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // 待機状態（プルアップ）&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
    byte data[5] = {0};&lt;br /&gt;
&lt;br /&gt;
    bool success = true;&lt;br /&gt;
    int errorBit = -1;&lt;br /&gt;
    int errorStep = 0;&lt;br /&gt;
&lt;br /&gt;
    byte countlow[40] = {0};&lt;br /&gt;
    byte counthigh[40] = {0};&lt;br /&gt;
&lt;br /&gt;
    // ここから通信開始処理&lt;br /&gt;
  // ① Arduinoから通信開始信号を送信&lt;br /&gt;
  pinMode(DHT_PIN, OUTPUT);&lt;br /&gt;
  digitalWrite(DHT_PIN, LOW);&lt;br /&gt;
  delay(20);  // 20ms LOW&lt;br /&gt;
&lt;br /&gt;
  // 開始信号のLOWを終了&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  // センサーが応答を始めるまでの待ち時間&lt;br /&gt;
  delayMicroseconds(30);&lt;br /&gt;
&lt;br /&gt;
  // 応答開始：LOWになるのを待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: No response&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答LOW（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(HIGH, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response LOW&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答HIGH（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response HIGH&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ③ 40ビットを読み取る&lt;br /&gt;
  noInterrupts();&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 40; i++) {&lt;br /&gt;
    // LOWが続いた回数を数える&lt;br /&gt;
    unsigned int lowCount = countPulse(LOW);&lt;br /&gt;
    countlow[i] = lowCount;&lt;br /&gt;
    // HIGHが続いた回数を数える&lt;br /&gt;
    unsigned int highCount = countPulse(HIGH);&lt;br /&gt;
    counthigh[i] = highCount;&lt;br /&gt;
    if (lowCount == 0 || highCount == 0) {&lt;br /&gt;
      success = false;&lt;br /&gt;
      errorBit = i;&lt;br /&gt;
      errorStep = (lowCount == 0) ? 1 : 2;&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 受信データを左へ1ビットずらす&lt;br /&gt;
    data[i / 8] &amp;lt;&amp;lt;= 1;&lt;br /&gt;
&lt;br /&gt;
    // HIGHの方が長ければ1&lt;br /&gt;
    if (highCount &amp;gt; lowCount) {&lt;br /&gt;
      data[i / 8] |= 1;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  interrupts();&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
    Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    Serial.print(countlow[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
    Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    Serial.print(counthigh[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!success) {&lt;br /&gt;
    Serial.print(&amp;quot;Error: Reading failed, Bit=&amp;quot;);&lt;br /&gt;
    Serial.print(errorBit);&lt;br /&gt;
    Serial.print(&amp;quot;, Step=&amp;quot;);&lt;br /&gt;
    Serial.println(errorStep);&lt;br /&gt;
&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ④ 受信した40ビットを表示&lt;br /&gt;
  Serial.print(&amp;quot;Sample RAW Bits: &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
    for (int bit = 7; bit &amp;gt;= 0; bit--) {&lt;br /&gt;
      Serial.print((data[i] &amp;gt;&amp;gt; bit) &amp;amp; 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (i &amp;lt; 4) {&lt;br /&gt;
      Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  // ⑤ チェックサムを検証&lt;br /&gt;
  byte checksum = data[0] + data[1] + data[2] + data[3];&lt;br /&gt;
&lt;br /&gt;
  if (checksum == data[4]) {&lt;br /&gt;
    Serial.print(&amp;quot;Sample OK: &amp;quot;);&lt;br /&gt;
    Serial.print(data[2]);&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
    Serial.print(data[3]);&lt;br /&gt;
    Serial.print(&amp;quot; deg. C, &amp;quot;);&lt;br /&gt;
    Serial.print(data[0]);&lt;br /&gt;
    Serial.println(&amp;quot; %&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;Checksum Error&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(3000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// 指定した電圧状態になるまで待つ&lt;br /&gt;
// timeout はマイクロ秒単位&lt;br /&gt;
bool waitForLevel(byte level, unsigned long timeout) {&lt;br /&gt;
  unsigned long start = micros();&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) != level) {&lt;br /&gt;
    if (micros() - start &amp;gt;= timeout) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned int countPulse(byte level) {&lt;br /&gt;
  unsigned int count = 0;&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) == level) {&lt;br /&gt;
    count++;&lt;br /&gt;
&lt;br /&gt;
    if (count &amp;gt;= 1000) {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return count;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;             47/              0/             28/              3/             78&amp;lt;/span&amp;gt; &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;0 0 1 0 1 1 1 1/0 0 0 0 0 0 0 0/0 0 0 1 1 1 0 0/0 0 0 0 0 0 1 1/0 1 0 0 1 1 1 0&amp;lt;/span&amp;gt;&lt;br /&gt;
  7 7 7 6 6 7 6 7 6 6 6 7 7 6 6 6 6 6 7 7 6 7 6 6 6 7 7 6 6 6 6 7 6 6 7 6 6 7 6 7 &lt;br /&gt;
  2 2 9 3 9 9 9 9 3 3 2 2 2 3 3 3 3 2 2 9 9 9 3 3 2 2 2 3 3 3 9 9 3 9 2 3 9 9 9 2 &lt;br /&gt;
 Sample RAW Bits: 00101111 00000000 00011100 00000011 01001110&lt;br /&gt;
 Sample OK: 28.3 deg. C, 47 %&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ビット列は8ビットずつ、湿度、湿度補助、温度、温度補助、チェックサムになっています。チェックサムは47+0+28+3=78という計算です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
	<entry>
		<id>https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14168</id>
		<title>Arduino Mega 2560 LESSON:12 DHT11 温度湿度センサー</title>
		<link rel="alternate" type="text/html" href="https://wiki.yo-net.jp/index.php?title=Arduino_Mega_2560_LESSON:12_DHT11_%E6%B8%A9%E5%BA%A6%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&amp;diff=14168"/>
		<updated>2026-10-16T15:26:59Z</updated>

		<summary type="html">&lt;p&gt;Yo-net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;yjavascript&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // 最初に実行されるスクリプト&lt;br /&gt;
    document.addEventListener('DOMContentLoaded', () =&amp;gt; {&lt;br /&gt;
      const observer = new MutationObserver((mutations) =&amp;gt; {&lt;br /&gt;
        mutations.forEach((mutation) =&amp;gt; {&lt;br /&gt;
          mutation.addedNodes.forEach((node) =&amp;gt; {&lt;br /&gt;
            if (node.tagName === 'SCRIPT' &amp;amp;amp;@@&amp;amp;amp; node.textContent) {&lt;br /&gt;
                // JavaScriptコードを変換&lt;br /&gt;
                const originalCode = node.textContent;&lt;br /&gt;
                const transformedCode = originalCode.replace(&amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;@@&amp;amp;amp;&amp;quot;);&lt;br /&gt;
              &lt;br /&gt;
                // 元のスクリプトを置き換え&lt;br /&gt;
                const newScript = document.createElement('script');&lt;br /&gt;
                newScript.textContent = transformedCode;&lt;br /&gt;
                node.replaceWith(newScript);&lt;br /&gt;
            }&lt;br /&gt;
          });&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      // `&amp;lt;head&amp;gt;` または `&amp;lt;body&amp;gt;` に挿入されるスクリプトを監視&lt;br /&gt;
      observer.observe(document.head, { childList: true });&lt;br /&gt;
      observer.observe(document.body, { childList: true });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://wiki.yo-net.jp/custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/highlight/highlight.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://wiki.yo-net.jp/custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
  MathJax.Ajax.config.path[&amp;quot;Contrib&amp;quot;]=&amp;quot;https://wiki.yo-net.jp/mathjax/&amp;quot;;&lt;br /&gt;
  MathJax.Hub.Register.StartupHook(&amp;quot;TeX Jax Ready&amp;quot;,function (){&lt;br /&gt;
    MathJax.Hub.Insert(&lt;br /&gt;
      MathJax.InputJax.TeX.Definitions.macros,{&lt;br /&gt;
        cancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        bcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        xcancel: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;], &lt;br /&gt;
        cancelto: [&amp;quot;Extension&amp;quot;,&amp;quot;cancel&amp;quot;]&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }); &lt;br /&gt;
  MathJax.Hub.Config({&lt;br /&gt;
    tex2jax:{&lt;br /&gt;
      displayMath: [['$$', '$$'],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定&lt;br /&gt;
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定&lt;br /&gt;
                                                   //ここは使う人が自由に設定する部分です。&lt;br /&gt;
      processEscapes: true&lt;br /&gt;
    },&lt;br /&gt;
    TeX:{&lt;br /&gt;
//    equationNumbers:{autoNumber: &amp;quot;AMS&amp;quot;}, &lt;br /&gt;
      extensions: [&amp;quot;[Contrib]/physics/physics.js&amp;quot;,&amp;quot;[Contrib]/siunitx/siunitx.js&amp;quot;, &amp;quot;color.js&amp;quot;, &amp;quot;cancel.js&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
      availableFonts: [],&lt;br /&gt;
      preferredFont: null,&lt;br /&gt;
      webFont: &amp;quot;Neo-Euler&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&amp;lt;/yjavascript&amp;gt;&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;br /&gt;
&lt;br /&gt;
== '''概要''' ==&lt;br /&gt;
　DHT11 温度湿度センサーを接続するレッスンです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AIによるタイミングチャート作図です。&lt;br /&gt;
&lt;br /&gt;
[[ファイル:Mega2560 L12 01 DHT11通信タイミングチャート.png|380px||none|DHT11通信タイミングチャート]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　以下のようなコードです。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;//www.elegoo.com&lt;br /&gt;
//2018.10.25&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dht_nonblocking.h&amp;gt;&lt;br /&gt;
#define DHT_SENSOR_TYPE DHT_TYPE_11&lt;br /&gt;
&lt;br /&gt;
static const int DHT_SENSOR_PIN = 2;&lt;br /&gt;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Initialize the serial port.&lt;br /&gt;
 */&lt;br /&gt;
void setup( )&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin( 9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Poll for a measurement, keeping the state machine alive.  Returns&lt;br /&gt;
 * true if a measurement is available.&lt;br /&gt;
 */&lt;br /&gt;
static bool measure_environment( float *temperature, float *humidity )&lt;br /&gt;
{&lt;br /&gt;
  static unsigned long measurement_timestamp = millis( );&lt;br /&gt;
&lt;br /&gt;
  /* Measure once every four seconds. */&lt;br /&gt;
  if( millis( ) - measurement_timestamp &amp;gt; 3000ul )&lt;br /&gt;
  {&lt;br /&gt;
    if( dht_sensor.measure( temperature, humidity ) == true )&lt;br /&gt;
    {&lt;br /&gt;
      dht_sensor.print_raw_data();&lt;br /&gt;
      measurement_timestamp = millis( );&lt;br /&gt;
      return( true );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return( false );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Main program loop.&lt;br /&gt;
 */&lt;br /&gt;
void loop( )&lt;br /&gt;
{&lt;br /&gt;
  float temperature;&lt;br /&gt;
  float humidity;&lt;br /&gt;
&lt;br /&gt;
  /* Measure temperature and humidity.  If the functions returns&lt;br /&gt;
     true, then a measurement is available. */&lt;br /&gt;
  if( measure_environment( &amp;amp;temperature, &amp;amp;humidity ) == true )&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print( &amp;quot;T = &amp;quot; );&lt;br /&gt;
    Serial.print( temperature, 1 );&lt;br /&gt;
    Serial.print( &amp;quot; deg. C, H = &amp;quot; );&lt;br /&gt;
    Serial.print( humidity, 1 );&lt;br /&gt;
    Serial.println( &amp;quot;%&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　ライブラリを使わないで自分なりのコードにすると以下のようになりました。カウント部のデバッグ値も出力しています。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;freescript&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;div class=&amp;quot;hljs-wrap&amp;quot;&amp;gt;&amp;lt;pre data-label=&amp;quot;Arduino Code&amp;quot; class=&amp;quot;pre-wrap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;const byte DHT_PIN = 2;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // 待機状態（プルアップ）&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
    byte data[5] = {0};&lt;br /&gt;
&lt;br /&gt;
    bool success = true;&lt;br /&gt;
    int errorBit = -1;&lt;br /&gt;
    int errorStep = 0;&lt;br /&gt;
&lt;br /&gt;
    byte countlow[40] = {0};&lt;br /&gt;
    byte counthigh[40] = {0};&lt;br /&gt;
&lt;br /&gt;
    // ここから通信開始処理&lt;br /&gt;
  // ① Arduinoから通信開始信号を送信&lt;br /&gt;
  pinMode(DHT_PIN, OUTPUT);&lt;br /&gt;
  digitalWrite(DHT_PIN, LOW);&lt;br /&gt;
  delay(20);  // 20ms LOW&lt;br /&gt;
&lt;br /&gt;
  // 開始信号のLOWを終了&lt;br /&gt;
  pinMode(DHT_PIN, INPUT_PULLUP);&lt;br /&gt;
&lt;br /&gt;
  // センサーが応答を始めるまでの待ち時間&lt;br /&gt;
  delayMicroseconds(30);&lt;br /&gt;
&lt;br /&gt;
  // 応答開始：LOWになるのを待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: No response&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答LOW（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(HIGH, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response LOW&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 応答HIGH（約80us）の終了を待つ&lt;br /&gt;
  if (!waitForLevel(LOW, 200)) {&lt;br /&gt;
    Serial.println(&amp;quot;Error: Response HIGH&amp;quot;);&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ③ 40ビットを読み取る&lt;br /&gt;
  noInterrupts();&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 40; i++) {&lt;br /&gt;
    // LOWが続いた回数を数える&lt;br /&gt;
    unsigned int lowCount = countPulse(LOW);&lt;br /&gt;
    countlow[i] = lowCount;&lt;br /&gt;
    // HIGHが続いた回数を数える&lt;br /&gt;
    unsigned int highCount = countPulse(HIGH);&lt;br /&gt;
    counthigh[i] = highCount;&lt;br /&gt;
    if (lowCount == 0 || highCount == 0) {&lt;br /&gt;
      success = false;&lt;br /&gt;
      errorBit = i;&lt;br /&gt;
      errorStep = (lowCount == 0) ? 1 : 2;&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 受信データを左へ1ビットずらす&lt;br /&gt;
    data[i / 8] &amp;lt;&amp;lt;= 1;&lt;br /&gt;
&lt;br /&gt;
    // HIGHの方が長ければ1&lt;br /&gt;
    if (highCount &amp;gt; lowCount) {&lt;br /&gt;
      data[i / 8] |= 1;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  interrupts();&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
  Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
  Serial.print(countlow[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
  for(byte i = 0; i &amp;lt; 40; i++){&lt;br /&gt;
  Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
  Serial.print(counthigh[i]);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!success) {&lt;br /&gt;
    Serial.print(&amp;quot;Error: Reading failed, Bit=&amp;quot;);&lt;br /&gt;
    Serial.print(errorBit);&lt;br /&gt;
    Serial.print(&amp;quot;, Step=&amp;quot;);&lt;br /&gt;
    Serial.println(errorStep);&lt;br /&gt;
&lt;br /&gt;
    delay(3000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ④ 受信した40ビットを表示&lt;br /&gt;
  Serial.print(&amp;quot;Sample RAW Bits: &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
    for (int bit = 7; bit &amp;gt;= 0; bit--) {&lt;br /&gt;
      Serial.print((data[i] &amp;gt;&amp;gt; bit) &amp;amp; 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (i &amp;lt; 4) {&lt;br /&gt;
      Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println();&lt;br /&gt;
&lt;br /&gt;
  // ⑤ チェックサムを検証&lt;br /&gt;
  byte checksum = data[0] + data[1] + data[2] + data[3];&lt;br /&gt;
&lt;br /&gt;
  if (checksum == data[4]) {&lt;br /&gt;
    Serial.print(&amp;quot;Sample OK: &amp;quot;);&lt;br /&gt;
    Serial.print(data[2]);&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
    Serial.print(data[3]);&lt;br /&gt;
    Serial.print(&amp;quot; deg. C, &amp;quot;);&lt;br /&gt;
    Serial.print(data[0]);&lt;br /&gt;
    Serial.println(&amp;quot; %&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;Checksum Error&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(3000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// 指定した電圧状態になるまで待つ&lt;br /&gt;
// timeout はマイクロ秒単位&lt;br /&gt;
bool waitForLevel(byte level, unsigned long timeout) {&lt;br /&gt;
  unsigned long start = micros();&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) != level) {&lt;br /&gt;
    if (micros() - start &amp;gt;= timeout) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned int countPulse(byte level) {&lt;br /&gt;
  unsigned int count = 0;&lt;br /&gt;
&lt;br /&gt;
  while (digitalRead(DHT_PIN) == level) {&lt;br /&gt;
    count++;&lt;br /&gt;
&lt;br /&gt;
    if (count &amp;gt;= 1000) {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return count;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/freescript&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;             47/              0/             28/              3/             78&amp;lt;/span&amp;gt; &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: darkred;&amp;quot;&amp;gt;0 0 1 0 1 1 1 1/0 0 0 0 0 0 0 0/0 0 0 1 1 1 0 0/0 0 0 0 0 0 1 1/0 1 0 0 1 1 1 0&amp;lt;/span&amp;gt;&lt;br /&gt;
  7 7 7 6 6 7 6 7 6 6 6 7 7 6 6 6 6 6 7 7 6 7 6 6 6 7 7 6 6 6 6 7 6 6 7 6 6 7 6 7 &lt;br /&gt;
  2 2 9 3 9 9 9 9 3 3 2 2 2 3 3 3 3 2 2 9 9 9 3 3 2 2 2 3 3 3 9 9 3 9 2 3 9 9 9 2 &lt;br /&gt;
 Sample RAW Bits: 00101111 00000000 00011100 00000011 01001110&lt;br /&gt;
 Sample OK: 28.3 deg. C, 47 %&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　&lt;br /&gt;
&lt;br /&gt;
[[Arduino Mega 2560]]に戻る。&lt;/div&gt;</summary>
		<author><name>Yo-net</name></author>
	</entry>
</feed>