先日に続いて音声基盤をarduinoから動かしてみる。
こちらのサイト様を参考にさせていただきました。
arduinoからフルコントロールするにはD8/D9ピンを使う。
arduinoライブラリはこちらからDL
DLが危険だと警告が出たが無視して続行
DLフォルダへのアクセスが尋常じゃないほど時間がかかる。
怖かったので再起動させたがパスワード入力で文字入力ができん!!!
くそっ、ウイルスか・・
たまたまWin11アプデと重なったらしく、ログインしたらあのしつっこいWin11アプデのお願い。
焦ったわ! 何回嫌だと言わせるんじゃおメーラは
で、Zipそのままでインスコしようとしたらエラーが出た。
手動で展開してmyDoc配下のarduinoライブラリフォルダへ入れ込む。
コンパイルは一発Ok!
このarduinoは5Vで動いてるので1kΩの抵抗を入れないといけない。
参考としたサイトと同じようにソフトウエアシリアルを使う。
今回は「イチ」「ニイ」・・「ゴ」と喋るMP3を001.mp3, 002.mp3 と3桁の数字のファイル名にして転送
JQ6500をUSB接続するとCD-ROMデバイスが現れ、そこにある書き込みソフト「MusicDownload.exe」で転送する。
先頭3桁が数字でないと番号指定ができないらしい。
小さな声で「イチ」「ニイ」・・と喋り続けています。
ちなみにスイッチは付けたままだったので試しに押すと、スイッチのほうが優先されるのか割り込んだ感じで発声する。
arduinoとJQ6500だけを直結し、同時に電源投入しても、ちゃんと通信し開始が乱れると言うことは無かった。
(もしかすると「イチ」を飛ばしたりするかなと思ったが)
以下はサンプルプログラムから得たソースコードです。(7/24追記)
※SDカードは普通付いてません。(改造すると付けられる)
■プレイヤーリセット
mp3.reset();
■音量セット
mp3.setVolume(20);
■再生デバイスを内蔵メモリにする
numFiles = mp3.countFiles(MP3_SRC_BUILTIN);
if(numFiles) {
mp3.setSource(MP3_SRC_BUILTIN);
}
■再生デバイスをSDカードにする(上記と同様の手順で取得曲数が有効な場合)
mp3.setSource(MP3_SRC_SDCARD);
■ループモードで再生
mp3.setLoopMode(MP3_LOOP_ALL);
mp3.play();
■番号指定で再生
mp3.setLoopMode(MP3_LOOP_NONE);
if(mp3.getStatus() != MP3_STATUS_PLAYING){
mp3.playFileByIndexNumber(1);
}
■内蔵メモリに格納された曲数を求める
mp3.setSource(MP3_SRC_BUILTIN);
numFiles = mp3.countFiles(MP3_SRC_BUILTIN);
■SDカードに格納された曲数を求める
mp3.setSource(MP3_SRC_SDCARD);
numFiles = mp3.countFiles(MP3_SRC_SDCARD);
■ランダム再生(基盤メモリから)
mediaType = MP3_SRC_BUILTIN;
randomSeed(analogRead(A0));
byte stat = mp3.getStatus();
if(stat != MP3_STATUS_PLAYING){
unsigned int pick;
do{
pick = random(1,numFiles+1);
} while(pick == mp3.currentFileIndexNumber(mediaType));
mp3.playFileByIndexNumber(pick);
}
■SDカードの場合ファイル名を取得可能
if(mediaType == MP3_SRC_SDCARD){
char buffer[20];
mp3.currentFileName(buffer, sizeof(buffer));
Serial.print("> ");
Serial.println(buffer);
}
======実験ソースコード ほぼサイト様サンプルそのままです==========
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "JQ6500_Serial.h"
SoftwareSerial mySerial(8, 9);
JQ6500_Serial mp3(mySerial);
int fnum;
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
mp3.setVolume(100);
}
void loop() {
for (fnum = 1; fnum <= 5; fnum++) {
Serial.println(fnum);
mp3.playFileByIndexNumber(fnum);
delay(1000);
}
delay(3000);
for (fnum = 5; fnum >= 1; fnum--) {
Serial.println(fnum);
mp3.playFileByIndexNumber(fnum);
delay(1000);
}
}