Arduino Dueのアナログ出力でちょっと遊んでみたと思います。
ファミコンの三角波を再現してみます。
この三角波は正確な三角波ではなく、16段階の階段状になっています。
音を鳴らすにはスピーカーが必要です。
Arduinoエントリーキットに入っているような圧電スピーカーが手軽です。
+極をArduino DueのDAC0へ、−極をGNDへ接続してください。
三角波を出力するソースです。
#define RANGE 4095
unsigned int buffer_tri[] = {
15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
};
void setup() {
analogWriteResolution(12);
for (int i = 0; i < 32; i++) {
buffer_tri[i] = (unsigned int)(RANGE * (float)(buffer_tri[i] / 15.0f));
}
}
void loop() {
int times_us_one = (int)((1000000 / 440) + 0.5);
int times_mod = micros() % times_us_one;
int f_no = times_mod * 32 / times_us_one;
analogWrite(DAC0, buffer_tri[f_no]);
}
この出力結果の波形です。
(DSO203 ポケット デジタルオシロスコープでの計測結果)
きれいな階段状の三角波になっています。
これを応用すれば、自作のアナログシンセも作れそうです。
Arduino Dueは少々高価ですが、互換品も検討してみてください。
純正品とAliExpressから$15程で購入した互換品も全く同じ動作をしているので、問題はないと思います。