#author("2020-04-17T12:36:58+09:00","default:kuran","kuran") [[戻る>PyBadge]] #author("2020-04-22T01:53:02+09:00","default:kuran","kuran") [[戻る>pyBadge]] *サウンド再生 [#r7b6ae73] Adafruit_ArcadaクラスにtimerCallback関数があるのでそれを使って1秒間に11025回の割り込み処理を起こす。~ 割り込み処理でaudioデータ内の1バイトをanalogWriteでARCADA_RIGHT_AUDIO_PINに送っている。~ ARCADA_LEFT_AUDIO_PINは定義はされているが何も再生されない。~ audioはそのまま送ると音割れしたので値を半分にしました。~ *サンプルプログラム [#cee502b9] -SoundSample1.ino #include <Adafruit_Arcada.h> #include "audio.h" Adafruit_Arcada arcada; size_t sampleOffsetIndex; void timerCallback() { analogWrite(ARCADA_RIGHT_AUDIO_PIN, (uint16_t)audio[sampleOffsetIndex] / 2); analogWrite(ARCADA_LEFT_AUDIO_PIN, (uint16_t)audio[sampleOffsetIndex] / 2); ++ sampleOffsetIndex; if(sampleOffsetIndex >= sizeof(audio)) { sampleOffsetIndex = 0; } } void setup() { Serial.begin(9600); if(arcada.arcadaBegin() == false) { Serial.print("Failed to begin"); while(1); } analogWriteResolution(8); arcada.enableSpeaker(true); sampleOffsetIndex = 0; arcada.timerCallback(SAMPLE_RATE, timerCallback); } void loop() { } ~ -audio.h #define SAMPLE_RATE 11050 const unsigned char audio[] = { 143, 206, 192, 169, 175, 171, 166, 128, 61, 36, 40, 43, 96, 112, 115, 139, 77, 31, 45, 33, 62, 140, 150, 124, 154, 148, 139, 142, 137, 180, 204, 197, 178, 137, 106, 102, 97, 107, 138, 145, 165, 159, 113, 126, 137, 148, 159, 139, : : : 続く *実行結果 [#sa011f21] 画面には何も表示されず音声のみが再生されます。~ *サンプルプログラムのダウンロード [#j355e2b3] #ref(SoundSample1.zip)~