10_Speaker-melody

スピーカーでメロディーを鳴らす

複数の関数を使い、さまざまなメロディーを再生します。

スピーカーモジュール
1

準備する

CherryIoTとモジュールを接続する

CherryIoTの指定コネクタに以下のモジュールを接続し、CherryIoTをPCのUSB-A挿入口に接続します。

スピーカーモジュール

スピーカーモジュール

接続先:A

2

サンプルコード

GitHubで公開しているサンプルコードです。コードをコピーして Arduino IDEで使用します。

10_Speaker-melody.ino
GitHubで開く
GitHubからコードを読み込んでいます...
3

プログラムを書き込む

上のサンプルコードをコピーし、Arduino IDEに貼りつけます。

ボードとポートの設定を確認し、左上の 「→(書き込みボタン)」を押してCherryIoTに書き込みます。

初めて書き込む方は「はじめてのCherryIoT」で詳しい手順を確認してください。

4

動作確認

ドレミ、チャイム、フライヤーの3つのメロディーが順番に再生されるなら成功です。

5

コードの解説

曲ごとに処理を関数へまとめ、周波数と長さを組み合わせてメロディーを作ります。

10_Speaker-melody.ino
GitHubで開く
GitHubからコードを読み込んでいます...

const int spkrPin = 3;コネクタAのスピーカーに対応するGPIO3を、定数spkrPinへ保存します。

#define BEAT 230メロディーの基本となる1拍の長さ230ミリ秒を、BEATという名前で定義します。拍の長さを1か所で管理するために使います。

#define DO 261.6「ド」の音に対応する周波数261.6Hzを、DOという名前で定義します。周波数は1秒間に振動する回数で、値が大きいほど高い音になります。

#define _DO 277.18半音高い「ド」に対応する周波数277.18Hzを、_DOという名前で定義します。以降のREからoctDOまでの定義も、それぞれの音階に対応する周波数へ名前を付けています。

void doremi(){ドから1オクターブ上のドまで順番に鳴らす処理を、doremi関数にまとめます。関数にまとめると、関数名を書くことで一連の処理を呼び出せます。

ledcWriteTone(spkrPin, DO);spkrPinからDOの周波数を出力し、「ド」を鳴らします。ledcWriteToneは、指定した端子から指定した周波数の音を出す命令です。以降も音階名を変えながら、レ・ミ・ファ・ソ・ラ・シ・高いドを順番に鳴らします。

delay(250);0.25秒待ちます。

void melodychime(){別のメロディーを鳴らす処理を、melodychime関数にまとめます。音を出す処理と止める処理を交互に並べて、音の区切りを作っています。

void fryer(){別のメロディーを鳴らす処理を、fryer関数にまとめます。音を出す処理と止める処理を交互に並べて、音の区切りを作っています。

void setup() {setup関数は電源を入れたときやリセットしたときに1回だけ実行されます。ここでスピーカー端子と音を出すためのPWMを設定します。

pinMode(spkrPin, OUTPUT);スピーカーへ信号を送れるように、spkrPinをOUTPUT(出力)に設定します。

ledcAttach(spkrPin, 12000, 8);spkrPinへ、最大周波数12000Hz、8ビットのPWM出力を割り当てます。PWMは端子を高速でON・OFFして出力を制御する方法で、ここでは指定した周波数の音を作るために使います。

void loop() {loop関数は繰り返し実行されます。3つの関数を順番に呼び出し、それぞれのメロディーを続けて再生します。

doremi();doremi関数を呼び出し、ドから高いドまでの音階を再生します。

melodychime();melodychime関数を呼び出し、再生します。

fryer();fryer関数を呼び出し、再生します。