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