768|4

107

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

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变量指定)来生成声音。下面是代码的详细解释:

  1. 变量定义

    • speakerPin:用于播放声音的引脚号。
    • length:音符序列的长度。
    • notes:一个字符串,包含要播放的音符,其中空格表示休止。
    • beats:一个整数数组,表示每个音符或休止的节拍数。
    • tempo:每个节拍的持续时间(以毫秒为单位)。
  2. playTone函数

    • 这个函数接收一个音高(tone)和一个持续时间(duration)。
    • 它使用了一个简单的PWM(脉冲宽度调制)方法来生成声音。不过,由于这里的delayMicroseconds函数,是us极延时函数,实际上并没有产生PWM效果(因为PWM通常涉及更快的切换),所以这里的tone参数实际上只是决定了声音包络中的高电平持续时间,而不是真正的音高。
    • 函数内部通过循环在HIGH和LOW之间切换speakerPin引脚,并使用了delayMicroseconds来延迟。
  3. 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的开发环境,以便更多的开发者能够更顺畅地使用这款强大的芯片。

最新回复

这个蜂鸣器是有源蜂鸣器还是无源蜂鸣器  详情 回复 发表于 2024-6-7 12:23
点赞 关注
 
 

回复
举报

6828

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

ESP32 C6的Arduino开发环境生态链做的确实不好

点评

是啊。我是写了两个评测用arduino 后来写不下去了。 直接转idf 干了。还是用乐鑫的idf来得实在。  详情 回复 发表于 2024-6-7 08:55
 
 
 

回复

6107

帖子

4

TA的资源

版主

板凳
 
Jacktang 发表于 2024-6-7 07:47 ESP32 C6的Arduino开发环境生态链做的确实不好

是啊。我是写了两个评测用arduino 后来写不下去了。

直接转idf 干了。还是用乐鑫的idf来得实在。

 
 
 

回复

229

帖子

3

TA的资源

一粒金砂(高级)

4
 

这个蜂鸣器是有源蜂鸣器还是无源蜂鸣器


点评

当然无源,有源的只有一个声  详情 回复 发表于 2024-6-7 12:57
 
 
 

回复

107

帖子

1

TA的资源

一粒金砂(高级)

5
 
Maker_kun 发表于 2024-6-7 12:23 这个蜂鸣器是有源蜂鸣器还是无源蜂鸣器

当然无源,有源的只有一个声

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表