03_Touch-Speaker
タッチすると音を鳴らす
タッチセンサーに触れるとスピーカーから音を鳴らします。
準備する
CherryIoTとモジュールを接続する
CherryIoTの指定コネクタに以下のモジュールを接続し、CherryIoTをPCのUSB-A挿入口に接続します。
タッチセンサーモジュール
接続先:A
スピーカーモジュール
接続先:B
サンプルコード
GitHubで公開しているサンプルコードです。コードをコピーして Arduino IDEで使用します。
GitHubからコードを読み込んでいます...プログラムを書き込む
上のサンプルコードをコピーし、Arduino IDEに貼りつけます。
ボードとポートの設定を確認し、左上の 「→(書き込みボタン)」を押してCherryIoTに書き込みます。
初めて書き込む方は「はじめてのCherryIoT」で詳しい手順を確認してください。
動作確認
Arduino IDEの画面右上にあるアイコンをクリックすると、 画面下にシリアルモニターが表示されます。

タッチセンサーに触れると、スピーカーから音が鳴るなら成功です。
動作中、シリアルモニターにはタッチセンサーに触れている間は「Touch!」、離している間は「...」と表示されます。
コードの解説
タッチを検出したときだけ、音を鳴らす関数を呼び出します。
GitHubからコードを読み込んでいます...const int touchPin = 3;コネクタAのタッチセンサーに対応するGPIO3を、定数touchPinへ保存します。
const int spkrPin = 4;コネクタBのスピーカーに対応するGPIO4を、定数spkrPinへ保存します。
#define C4 806.964音に使用する周波数806.964を、C4という名前で定義します。周波数は1秒間の振動回数を表し、値によって音の高さが変わります。
#define D4 718.923別の音に使用する周波数718.923を、D4という名前で定義します。
void playmusic(){スピーカーからメロディーを鳴らす一連の処理を、playmusic関数にまとめます。関数にまとめることで、必要な場所から名前を指定して実行できます。
ledcWriteTone(spkrPin,C4);spkrPinからC4の周波数を出力して音を鳴らします。ledcWriteToneは、指定した端子から指定した周波数の音を出す命令です。以降も同じ方法でC4とD4を切り替え、メロディーを作ります。
delay(230);0.23秒待ちます。
ledcWriteTone(spkrPin,0);出力する周波数を0にして、音を止めます。音を鳴らす処理と止める処理を交互に並べることで、音の区切りを作ります。
void setup() {setup関数は最初に1回だけ実行されます。ここでシリアル通信、タッチセンサー、スピーカーを使う準備をします。
Serial.begin(115200);タッチの判定結果をPCへ表示するため、115200bpsでシリアル通信を開始します。
pinMode(touchPin, INPUT);タッチセンサーから届く信号を読み取れるように、touchPinをINPUT(入力)に設定します。
pinMode(spkrPin, OUTPUT);スピーカーへ信号を送れるように、spkrPinをOUTPUT(出力)に設定します。
ledcAttach(spkrPin, 12000, 8);spkrPinへ音を出すためのPWM機能を割り当てます。12000は使用できる最大周波数、8は出力を調整する細かさを表します。
void loop() {loop関数は繰り返し実行されます。タッチセンサーの状態を確認し、触れているときだけメロディーを再生します。
if (digitalRead(touchPin)==HIGH) {タッチセンサーの信号を読み取り、HIGH、つまり触れている状態かを確認します。
Serial.println("Touch!");触れていることを示す「Touch!」を表示します。
playmusic();playmusic関数を呼び出し、再生します。
} else {タッチセンサーに触れていない場合は、else以降の処理を実行します。
Serial.println("...");触れていない状態を示す「...」を表示します。
delay(500);0.5秒待ちます。