您好我正试图在mbed应用程序屏蔽上使用不同的声音频率来创建一首歌曲。虽然我已经获得了所有的频率,但我似乎无法减慢速度,因为它只是非常快地遍历所有频率。我试过使用wait();功能,但似乎没有正常工作。关于如何纠正这个或替代解决方案,我将不胜感激。
这是我的代码
#include "mbed.h"
#include "C12832.h" // for the LCD
#include "LM75B.h" //for the temperature sensor
#include "MMA7660.h" //For the accelerometer
/***************************************************************************
Global Variables
***************************************************************************/
C12832 shld_lcd (D11, D13, D12, D7, D10); // LCD on the application shield
PwmOut spkr(D6); //speaker
float c = 262.0; //These are the different frequencies
float d = 294.0;
float e = 330.0;
float f = 349.0;
float g = 392.0;
float a = 440.0;
float b = 494.0;
float C = 523.0;
void hotLineBling() {
//Here I am trying to use the frequencies to play the tone
spkr.period(1/e);
spkr.period(1/e);
spkr.period(1/e);
wait(0.5f);
spkr.period(1/C);
spkr.period(1/a);
spkr.period(1/e);
wait(0.5f);
spkr.period(1/d);
spkr.period(1/a);
spkr.period(1/d);
wait(1.0);
spkr.period(1/C);
spkr.period(1/a);
spkr.period(1/e);
wait(0.5f);
spkr.period(1/d);
spkr.period(1/a);
spkr.period(1/d);
spkr.period(1/c);
wait(1.0);
spkr.period(1/C);
spkr.period(1/a);
spkr.period(1/e);
wait(0.5f);
spkr.period(1/d);
spkr.period(1/a);
spkr.period(1/d);
wait(5.0);
}
int main()
{
hotLineBling();
while (1) {
spkr = 0.5;
wait(0.2f); //wait a little
}
}
答案 0 :(得分:2)
您需要将PWM引脚的值设置为可播放的值,也可以通过该方式控制音量。第二件事是你需要在设置period
之间等待,否则笔记没有时间在该频率上实际做任何事情。试试这个:
#include "mbed.h"
PwmOut spkr(D3);
float c = 262.0; //These are the different frequencies
float d = 294.0;
float e = 330.0;
float f = 349.0;
float g = 392.0;
float a = 440.0;
float b = 494.0;
float C = 523.0;
float _ = 0.0;
void hotLineBling() {
float notes[] = { e, e, e, _, C, a, e, _, d, a, d, _, _,
C, a, e, _, d, a, d, c, _, _, C, a, e,
_, d, a, d };
for (int i = 0; i < sizeof(notes) / sizeof(float); i++) {
if (notes[i] == _) {
spkr = 0.0f;
}
else {
spkr = 0.3f;
spkr.period(1 / notes[i]);
}
wait(0.5f);
}
spkr = 0.0f;
}
int main() {
hotLineBling();
}
虽然我不知道这听起来是否像你想要的那样: - )
答案 1 :(得分:0)
我既不熟悉mbed也不熟悉你正在使用的环境 - 但有些事情似乎显而易见:
所有O.K,但是: - 您似乎没有等待PWM实际播放音符,具体取决于您希望音调存在多长时间(在为每个音符设置PWM频率后应该有延迟 - 这就像把手指放在锡口哨的孔上,而不是吹......)
你应该在spkr.period()行之间传播一些wait(),具体取决于你想要每个音符播放多长时间。
如果您想要一段时间的静音,还应将PWM频率设置为0.
我不知道的是mbed是否要求您实际“启动”PWM或是否是自由运行。