電気素人主婦による備忘録 ※ ご利用は自己責任でお願いします ※
/************************************************* * 【 Elegoo:12 】DHT11 温度・湿度センサー * 温度・湿度をシリアルモニタに表示する *************************************************/ /*--------------------------------------------*/ /* SimpleDHT11ライブラリ */ /*--------------------------------------------*/ #include <simpledht.h> // SimpleDHT11オブジェクトを作成 SimpleDHT11 objDHT11; // ピン #define PIN_DHT11 2 /********/ /* loop */ /********/ void loop() { Serial.println("================================="); Serial.println("DHT11 サンプリング中..."); byte byteTemperature = 0; //温度 byte byteHumidity = 0; //湿度 byte byteData[40] = {0}; //取得データ // -------------------------------------------------- // DTH11から温度・湿度・データを取得する // -------------------------------------------------- if (objDHT11.read(PIN_DHT11, &byteTemperature, &byteHumidity, byteData)) { // 取得 失敗 Serial.print("Read DHT11 failed"); return; } // -------------------------------------------------- // 取得した温度・湿度・データをシリアルモニタに表示する // -------------------------------------------------- Serial.print("Read DHT11 OK : "); // -------------------------------------------------- // 温度 Serial.print((int)byteTemperature); Serial.print(" *C, "); // -------------------------------------------------- // 湿度 Serial.print((int)byteHumidity); Serial.println(" %"); // -------------------------------------------------- // データ // [湿度(整数)8Bit][湿度(小数)8Bit][温度(整数)8Bit][温度(小数)8Bit][チェックサム8bit] // チェックサム=温度・湿度のByteDataを足した下位8Bit Serial.print("RAW Bits: "); for (int i = 0; i < 40; i++) { Serial.print((int)byteData[i]); if (i > 0 && ((i + 1) % 4) == 0) { Serial.print(' '); } } Serial.println(""); // サンプリング:2秒以上 delay(2000); } /*********/ /* setup */ /*********/ void setup() { // シリアルモニタ開始 Serial.begin(9600); }
/************************************************* * pitches.h : 音階(NOTE_B0 - DS8)の周波数(Hz)を定義 * https://www.arduino.cc/en/Tutorial/ToneMelody * Public Constants *************************************************/ #define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 … #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
/************************************************* * 【melodyList.h】 メロディ リスト * [0] 音階 [ NOTE_xx, 0:休符 ] * [1] 音の長さ[ 4:四分音符, 8:八分音符 ] *------------------------------------------------- * ①ドレミの歌 [ドレミファソラシド] * ②きらきらぼし * ③ゆかいな牧場 * ④にんげんっていいな * ⑤おもちゃのチャチャチャ ************************************************/ // 音階の周波数(Hz) #include "pitches.h" #define NOTE 0 // 音階 #define DURATIONS 1 // 音の長さ //------------------------------------------------- // ドレミの歌 //------------------------------------------------- // ド[C] int aryMelodyC[][7] = { { NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_E4, NOTE_C4, NOTE_E4 }, { 2, 4, 2, 4, 2, 2, 2 } }; // レ[D] int aryMelodyD[][7] = { { NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_F4 }, { 2, 4, 2, 4, 2, 2, 2 } }; // ミ[E] int aryMelodyE[][7] = { { NOTE_E4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_G4, NOTE_E4, NOTE_G4 }, { 2, 4, 2, 4, 2, 2, 2 } }; // ファ[F] int aryMelodyF[][7] = { { NOTE_F4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_A4 }, { 2, 4, 8, 8, 8, 8, 2 } }; // ソ[G] int aryMelodyG[][7] = { { NOTE_G4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4 }, { 2, 4, 8, 8, 8, 8, 2 } }; // ラ[A] int aryMelodyA[][7] = { { NOTE_A4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4 }, { 2, 4, 8, 8, 8, 8, 2 } }; // シ[B] int aryMelodyB[][7] = { { NOTE_B4, NOTE_E4, NOTE_FS4, NOTE_GS4, NOTE_A4, NOTE_B4, NOTE_C5 }, { 2, 4, 8, 8, 8, 8, 2 } }; // ド[C5] int aryMelodyC5[][7] = { { NOTE_B4, NOTE_B4, NOTE_A4, NOTE_F4, NOTE_B4, NOTE_G4, NOTE_C5 }, { 8, 8, 4, 4, 4, 4, 2 } }; // C4 -> C5 int aryMelodyC4_C5[][8] = { { NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5 }, { 4, 4, 4, 4, 4, 4, 4, 4 } }; // C5 -> C4 int aryMelodyC5_C4[][8] = { { NOTE_C5, NOTE_B4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_C4 }, { 4, 4, 4, 4, 4, 4, 4, 4 } }; //------------------------------------------------- // きらきらぼし //------------------------------------------------- int aryMelodyStar[][14] = { { NOTE_C4, NOTE_C4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_F4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_C4}, { 4, 4, 4, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 2 } }; //------------------------------------------------- // ゆかいな牧場 //------------------------------------------------- int aryMelodyCow[][13] = { { NOTE_G4, NOTE_G4, NOTE_G4, NOTE_D4, NOTE_E4, NOTE_E4, NOTE_D4, 0, NOTE_B4, NOTE_B4, NOTE_A4, NOTE_A4, NOTE_G4 }, { 8, 8, 8, 8, 8, 8, 2, 8, 8, 8, 8, 8, 2 } }; //------------------------------------------------- // にんげんっていいな //------------------------------------------------- int aryMelodyHuman[][14] = { { NOTE_G4, NOTE_F4, NOTE_E4, NOTE_F4, NOTE_D4, NOTE_C4, 0, NOTE_E4, NOTE_E4, 0, NOTE_G4, NOTE_F4, NOTE_D4, NOTE_E4 }, { 4, 4, 4, 4, 4, 4, 8, 2, 4, 16, 8, 4, 4, 4 } }; //------------------------------------------------- // おもちゃのチャチャチャ //------------------------------------------------- int aryMelodyCha[][24] = { { NOTE_C4, NOTE_C4, NOTE_C4, NOTE_E4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_GS4, NOTE_G4, NOTE_B4, NOTE_C5 }, { 8, 8, 8, 8, 8, 8, 2, 8, 8, 8, 8, 8, 8, 2, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 } };
/************************************************** * 【 Elegoo:11 】膜(メンブレイン)スイッチモジュール * キーパッドでミュージックボックス *************************************************/ /*--------------------------------------------*/ /* Keypadライブラリ */ /*--------------------------------------------*/ #include <keypad .h> // 行列数 const byte bytRows = 4; // 行数 const byte bytCols = 4; // 列数 // 行列ピンNo byte aryRowPins[bytRows] = {9, 8, 7, 6}; // 行ピンNo byte aryColPins[bytCols] = {5, 4, 3, 2}; // 列ピンNo // キー配列 char hexKeymap[bytRows][bytCols] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; // Keypadオブジェクトを作成 Keypad objKeypad = Keypad( makeKeymap(hexKeymap), // キーマップ作成 aryRowPins, aryColPins, // 行列ピンNo bytRows, bytCols // 行列数 ); /*--------------------------------------------*/ /* ブザー */ /*--------------------------------------------*/ // ピンの定義 #define BUZZER 12 // D12 /*--------------------------------------------*/ /* メロディ */ /*--------------------------------------------*/ #include "pitches.h" // 音階の周波数(Hz) #include "melodyList.h" // メロディリスト /*****************************************/ /* 関数名:メロディ 出力 */ /* 引数:rAryNote [音階 ] */ /* :rAryDurations [音の長さ] */ /* :rBytNoteNum [音階総数] */ /*****************************************/ void outputMelody( int *rAryNote, int *rAryDurations, byte rBytNoteNum){ // -------------------------------------------------- // 音階数の周波数を音の長さだけ出力する // -------------------------------------------------- for( int i = 0; i < rBytNoteNum; i++){ tone( BUZZER, rAryNote[i],( 1000 / rAryDurations[i] ) ); delay( 500 ); //演奏速度 } // -------------------------------------------------- // 周波数の出力を停止する // -------------------------------------------------- noTone( BUZZER ); delay( 500 ); } /********/ /* loop */ /********/ void loop() { byte bytNoteNum; // 音階総数 // 押されたキーを取得する char chrKey = objKeypad.getKey(); // -------------------------------------------------- // 押されたキー別にメロディを出力する // メロディ[0] 音階 // メロディ[1] 音の長さ // -------------------------------------------------- if (chrKey){ switch(chrKey){ // -------------------------------------------------- // 1:ド case '1': // 音階総数 bytNoteNum = sizeof( aryMelodyC[NOTE] ) / sizeof( aryMelodyC[NOTE][0] ); // メロディ 出力 outputMelody( aryMelodyC[NOTE], aryMelodyC[DURATIONS], bytNoteNum ); break; // -------------------------------------------------- // 2:レ case '2': // 音階総数 bytNoteNum = sizeof( aryMelodyD[NOTE] ) / sizeof( aryMelodyD[NOTE][0] ); // メロディ 出力 outputMelody( aryMelodyD[NOTE], aryMelodyD[DURATIONS], bytNoteNum ); break; // -------------------------------------------------- // 3:ミ case '3': // 音階総数 bytNoteNum = sizeof( aryMelodyE[NOTE] ) / sizeof( aryMelodyE[NOTE][0] ); // メロディ 出力 outputMelody( aryMelodyE[NOTE], aryMelodyE[DURATIONS], bytNoteNum ); break; // -------------------------------------------------- // 4:ファ case '4': // 音階総数 bytNoteNum = sizeof( aryMelodyF[NOTE] ) / sizeof( aryMelodyF[NOTE][0] ); // メロディ 出力 outputMelody( aryMelodyF[NOTE], aryMelodyF[DURATIONS], bytNoteNum ); break; // -------------------------------------------------- // 5:ソ case '5': // 音階総数 bytNoteNum = sizeof( aryMelodyG[NOTE] ) / sizeof( aryMelodyG[NOTE][0] ); // メロディ 出力 outputMelody( aryMelodyG[NOTE], aryMelodyG[DURATIONS], bytNoteNum ); break; // -------------------------------------------------- // 6:ラ case '6': // 音階総数 bytNoteNum = sizeof( aryMelodyA[NOTE] ) / sizeof( aryMelodyA[NOTE][0] ); // メロディ 出力 outputMelody( aryMelodyA[NOTE], aryMelodyA[DURATIONS], bytNoteNum ); break; // -------------------------------------------------- // 7:シ case '7': // 音階総数 bytNoteNum = sizeof( aryMelodyB[NOTE] ) / sizeof( aryMelodyB[NOTE][0] ); // メロディ 出力 outputMelody( aryMelodyB[NOTE], aryMelodyB[DURATIONS], bytNoteNum ); break; // -------------------------------------------------- // 8:ド case '8': // 音階総数 bytNoteNum = sizeof( aryMelodyC5[NOTE] ) / sizeof( aryMelodyC5[NOTE][0] ); // メロディ 出力 outputMelody( aryMelodyC5[NOTE], aryMelodyC5[DURATIONS], bytNoteNum ); break; // -------------------------------------------------- // 9:ド[C4 -> C5] case '9': // 音階総数 bytNoteNum = sizeof( aryMelodyC4_C5[NOTE] ) / sizeof( aryMelodyC4_C5[NOTE][0] ); // メロディ 出力 outputMelody( aryMelodyC4_C5[NOTE], aryMelodyC4_C5[DURATIONS], bytNoteNum ); break; // -------------------------------------------------- // 0:ド[C5 -> C4] case '0': // 音階総数 bytNoteNum = sizeof( aryMelodyC5_C4[NOTE] ) / sizeof( aryMelodyC5_C4[NOTE][0] ); // メロディ 出力 outputMelody( aryMelodyC5_C4[NOTE], aryMelodyC5_C4[DURATIONS], bytNoteNum ); break; // -------------------------------------------------- // A:きらきらぼし case 'A': // 音階総数 bytNoteNum = sizeof( aryMelodyStar[NOTE] ) / sizeof( aryMelodyStar[NOTE][0] ); // メロディ 出力 outputMelody( aryMelodyStar[NOTE], aryMelodyStar[DURATIONS], bytNoteNum ); break; // -------------------------------------------------- // B:ゆかいな牧場 case 'B': // 音階総数 bytNoteNum = sizeof( aryMelodyCow[NOTE] ) / sizeof( aryMelodyCow[NOTE][0] ); // メロディ 出力 outputMelody( aryMelodyCow[NOTE], aryMelodyCow[DURATIONS], bytNoteNum ); break; // -------------------------------------------------- // C:にんげんっていいな case 'C': // 音階総数 bytNoteNum = sizeof( aryMelodyHuman[NOTE] ) / sizeof( aryMelodyHuman[NOTE][0] ); // メロディ 出力 outputMelody( aryMelodyHuman[NOTE], aryMelodyHuman[DURATIONS], bytNoteNum ); break; // -------------------------------------------------- // D:おもちゃのチャチャチャ case 'D': // 音階総数 bytNoteNum = sizeof( aryMelodyCha[NOTE] ) / sizeof( aryMelodyCha[NOTE][0] ); // メロディ 出力 outputMelody( aryMelodyCha[NOTE], aryMelodyCha[DURATIONS], bytNoteNum ); break; // -------------------------------------------------- // その他:シリアルモニタに表示 default: Serial.println(chrKey); } } } /*********/ /* setup */ /*********/ void setup(){ // pinの設定 pinMode( BUZZER, OUTPUT ); // BUZZER : 出力用 // シリアルモニタ開始 Serial.begin( 9600 ); }