0
我尝试编写一个带有6个扬声器的Arduino播放的小歌。这个过程应该是,我打开频率上的不同说话者并计算音符的持续时间。如果持续时间结束,我播放下一个声音或转动扬声器。我为6个扬声器定义了不同的阵列。此外,我还有很多关于音符频率的定义以及持续时间。用Arduino播放音乐
问题是,我只是得到一个深沉的嗡嗡声,但不是一个调。
有没有人有建议可能是错误的代码?
#define pause 0
#define c1 32.7
#define cis1 34.6
#define d1 36.7
#define dis1 38.9
...
#define l1 32
#define l2 16
...
#define note 0
#define laenge 1
int myChannels[] = { 8, 9, 10, 11, 12, 13 };
int myDuration[] = { 0, 0, 0, 0, 0, 0 };
int myPointer[] = { 0, 0, 0, 0, 0, 0 };
const PROGMEM float myPlayList[6][600][2] = {
// 1st Voice
{
{ c2, l8}, { g2, l8}, { c2, l8}, { g2, l8}, { c2, l8}, { g2, l8}, { c2, l8}, { g2, l8},
{ c2, l8}, { g2, l8}, { c2, l8}, { g2, l8}, { c2, l8}, { g2, l8}, { c2, l8}, { g2, 18},
...
}
};
void play(int out, float freq, float len) {
if (freq > 0) {
tone (myChannels[out], freq);
} else {
noTone (freq);
}
myDuration[ out] = len;
}
void setup() {
for (int channel = 0; channel < 6; channel++) {
pinMode (myChannels[channel], OUTPUT);
}
}
void loop() {
boolean playing = false;
for (int channel = 0; channel < 6; channel++) {
if (myDuration[channel] == 0) {
if (myPointer[channel] < sizeof(myPlayList[channel])) {
play(channel, myPlayList[channel][myPointer[channel]][0], myPlayList[channel][myPointer[channel]][1]);
myPointer[channel]++;
playing = true;
} else {
noTone (channel);
}
} else {
myDuration[channel]--;
playing = true;
}
}
if (!playing) {
delay (10000);
for (int channel = 0; channel < 6; channel++) {
myDuration[channel] = 0;
myPointer[channel] = 0;
}
}
delay (25);
}