FireBeetle 2 ESP32 C6评测 蜂鸣器播放小星星与完结感言
[复制链接]
播放视频
e30836970cce1707efaf7ec8d9dfe28d
程序代码(程序来源于Arduino实验室)
int speakerPin = D13;
int length = 15; // the number of notes
char notes[] = "ccggaagffeeddc "; // a space represents a rest
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;
void playTone(int tone, int duration) {
for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWrite(speakerPin, HIGH);
delayMicroseconds(tone);
digitalWrite(speakerPin, LOW);
delayMicroseconds(tone);
}
}
void playNote(char note, int duration) {
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
// play the tone corresponding to the note name
for (int i = 0; i < 8; i++) {
if (names[i] == note) {
playTone(tones[i], duration);
}
}
}
void setup() {
pinMode(speakerPin, OUTPUT);
}
void loop() {
for (int i = 0; i < length; i++) {
if (notes[i] == ' ') {
delay(beats[i] * tempo); // rest
} else {
playNote(notes[i], beats[i] * tempo);
}
// pause between notes
delay(tempo / 2);
}
}
这个程序实现了一个简单的音符播放的功能,该系统使用数字输出引脚(由speakerPin变量指定)来生成声音。下面是代码的详细解释:
-
变量定义
- speakerPin:用于播放声音的引脚号。
- length:音符序列的长度。
- notes:一个字符串,包含要播放的音符,其中空格表示休止。
- beats:一个整数数组,表示每个音符或休止的节拍数。
- tempo:每个节拍的持续时间(以毫秒为单位)。
-
playTone函数
- 这个函数接收一个音高(tone)和一个持续时间(duration)。
- 它使用了一个简单的PWM(脉冲宽度调制)方法来生成声音。不过,由于这里的delayMicroseconds函数,是us极延时函数,实际上并没有产生PWM效果(因为PWM通常涉及更快的切换),所以这里的tone参数实际上只是决定了声音包络中的高电平持续时间,而不是真正的音高。
- 函数内部通过循环在HIGH和LOW之间切换speakerPin引脚,并使用了delayMicroseconds来延迟。
-
playNote函数
- 这个函数接收一个音符字符(note)和一个持续时间(duration)。
- 它首先定义了一个音符名称数组(names)和一个与之对应的音高数组(tones)。
- 然后,它遍历names数组,找到与输入音符匹配的项,并使用playTone函数播放相应的音高。
- 注意:这个实现有点低效,因为它每次都遍历整个names数组来找到匹配的音符。一个更好的方法可能是使用一个哈希表或映射来直接查找音高。
完结感言
非常感谢DFROBOT的赞助和电子工程世界论坛的支持。通过参与这次FireBeetle 2 ESP32 C6开发板的评估活动,我对ESP32 C6有了一定的了解。尽管多年前我的朋友使用Arduino 来开发ESP8266开发产品取得了不错的效果,但在评估ESP32 C6的过程中,我遇到了一些问题。
如果让我选择,我不会选择当前的开发环境来开发ESP32 C6,因为相较于之前的产品如ESP32-S3或ESP32-C3,我感觉ESP32 C6的Arduino开发环境并不十分完善,这给我带来了很多困扰。据我所知,ESP-IDF(Espressif IoT Development Framework)是Espressif Systems最先推出的固件开发工具,他们之后才会逐步完善其他的生态系统。
因此,如果我是要开发产品的话,我会更倾向于选择ESP-IDF环境,因为它相对更为成熟和稳定。我希望Espressif Systems能进一步优化和完善ESP32 C6的开发环境,以便更多的开发者能够更顺畅地使用这款强大的芯片。
|