Arduino爱好者

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: eagler8

【Arduino】168种传感器模块系列实验(49)---有源蜂鸣器模块

[复制链接]
 楼主| 发表于 2022-5-5 16:56 | 显示全部楼层
程序十七:利用蜂鸣器播放天空之城

13.1-36.jpg

 楼主| 发表于 2022-5-5 16:59 | 显示全部楼层
Arduino参考开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   程序十七:利用蜂鸣器播放天空之城
  4. */

  5. #define NOTE_D0 -1
  6. #define NOTE_D1 294
  7. #define NOTE_D2 330
  8. #define NOTE_D3 350
  9. #define NOTE_D4 393
  10. #define NOTE_D5 441
  11. #define NOTE_D6 495
  12. #define NOTE_D7 556

  13. #define NOTE_DL1 147
  14. #define NOTE_DL2 165
  15. #define NOTE_DL3 175
  16. #define NOTE_DL4 196
  17. #define NOTE_DL5 221
  18. #define NOTE_DL6 248
  19. #define NOTE_DL7 278

  20. #define NOTE_DH1 589
  21. #define NOTE_DH2 661
  22. #define NOTE_DH3 700
  23. #define NOTE_DH4 786
  24. #define NOTE_DH5 882
  25. #define NOTE_DH6 990
  26. #define NOTE_DH7 112
  27. //以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写

  28. #define WHOLE 1
  29. #define HALF 0.5
  30. #define QUARTER 0.25
  31. #define EIGHTH 0.25
  32. #define SIXTEENTH 0.625
  33. //这部分是用英文对应了拍子,这样后面也比较好看

  34. int tune[] =
  35. {
  36.   NOTE_D0, NOTE_D0, NOTE_D0, NOTE_D6, NOTE_D7, NOTE_DH1, NOTE_D7, NOTE_DH1, NOTE_DH3, NOTE_D7, NOTE_D7, NOTE_D7, NOTE_D3, NOTE_D3,
  37.   NOTE_D6, NOTE_D5, NOTE_D6, NOTE_DH1, NOTE_D5, NOTE_D5, NOTE_D5, NOTE_D3, NOTE_D4, NOTE_D3, NOTE_D4, NOTE_DH1,
  38.   NOTE_D3, NOTE_D3, NOTE_D0, NOTE_DH1, NOTE_DH1, NOTE_DH1, NOTE_D7, NOTE_D4, NOTE_D4, NOTE_D7, NOTE_D7, NOTE_D7, NOTE_D0, NOTE_D6, NOTE_D7,
  39.   NOTE_DH1, NOTE_D7, NOTE_DH1, NOTE_DH3, NOTE_D7, NOTE_D7, NOTE_D7, NOTE_D3, NOTE_D3, NOTE_D6, NOTE_D5, NOTE_D6, NOTE_DH1,
  40.   NOTE_D5, NOTE_D5, NOTE_D5, NOTE_D2, NOTE_D3, NOTE_D4, NOTE_DH1, NOTE_D7, NOTE_D7, NOTE_DH1, NOTE_DH1, NOTE_DH2, NOTE_DH2, NOTE_DH3, NOTE_DH1, NOTE_DH1, NOTE_DH1,
  41.   NOTE_DH1, NOTE_D7, NOTE_D6, NOTE_D6, NOTE_D7, NOTE_D5, NOTE_D6, NOTE_D6, NOTE_D6, NOTE_DH1, NOTE_DH2, NOTE_DH3, NOTE_DH2, NOTE_DH3, NOTE_DH5,
  42.   NOTE_DH2, NOTE_DH2, NOTE_DH2, NOTE_D5, NOTE_D5, NOTE_DH1, NOTE_D7, NOTE_DH1, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3,
  43.   NOTE_D6, NOTE_D7, NOTE_DH1, NOTE_D7, NOTE_DH2, NOTE_DH2, NOTE_DH1, NOTE_D5, NOTE_D5, NOTE_D5, NOTE_DH4, NOTE_DH3, NOTE_DH2, NOTE_DH1,
  44.   NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH6, NOTE_DH6, NOTE_DH5, NOTE_DH5, NOTE_DH3, NOTE_DH2, NOTE_DH1, NOTE_DH1, NOTE_D0, NOTE_DH1,
  45.   NOTE_DH2, NOTE_DH1, NOTE_DH2, NOTE_DH2, NOTE_DH5, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH6, NOTE_DH6, NOTE_DH5, NOTE_DH5,
  46.   NOTE_DH3, NOTE_DH2, NOTE_DH1, NOTE_DH1, NOTE_D0, NOTE_DH1, NOTE_DH2, NOTE_DH1, NOTE_DH2, NOTE_DH2, NOTE_D7, NOTE_D6, NOTE_D6, NOTE_D6, NOTE_D6, NOTE_D7
  47. };//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数

  48. float duration[] =
  49. {
  50.   1, 1, 1, 0.5, 0.5,     1 + 0.5, 0.5, 1, 1,     1, 1, 1, 0.5, 0.5,
  51.   1 + 0.5, 0.5, 1, 1,     1, 1, 1, 1,          1 + 0.5, 0.5, 1, 1,
  52.   1, 1, 0.5, 0.5, 0.5, 0.5,    1 + 0.5, 0.5, 1, 1,     1, 1, 1, 0.5, 0.5,
  53.   1 + 0.5, 0.5, 1, 1,    1, 1, 1, 0.5, 0.5,     1 + 0.5, 0.5, 1, 1,
  54.   1, 1, 1, 0.5, 0.5,    1, 0.5, 0.25, 0.25, 0.25, 0.5,    0.5, 0.5, 0.5, 0.25, 0.5, 1,
  55.   0.5, 0.5, 0.5, 0.5, 1, 1,    1, 1, 1, 0.5, 0.5,    1 + 0.5, 0.5, 1, 1,
  56.   1, 1, 1, 0.5, 0.5,    1.5, 0.5, 1, 1,    1, 1, 1, 1,
  57.   0.5, 0.5, 1, 1, 0.5, 0.5,    1.5, 0.25, 0.5, 1,    1, 1, 1, 1,
  58.   1, 1, 1, 1,    1, 1, 1, 1,    0.5, 0.5, 1, 1, 0.5, 0.5,
  59.   1, 0.5, 0.5, 1, 1,    1, 1, 1, 1,    1, 1, 1, 1,
  60.   0.5, 0.5, 1, 1, 0.5, 0.5,    1, 0.5, 0.25, 0.5, 1,    1, 1, 1, 0.5, 0.5
  61. };//这部分是整首曲子的节拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应么)

  62. int length;//这里定义一个变量,后面用来表示共有多少个音符
  63. int tonePin = 3; //蜂鸣器的pin

  64. void setup(){
  65.   pinMode(tonePin, OUTPUT); //设置蜂鸣器的pin为输出模式
  66.   length = sizeof(tune) / sizeof(tune[0]); //这里用了一个sizeof函数, 可以查出tone序列里有多少个音符
  67. }

  68. void loop(){
  69.   for (int x = 0; x < length; x++) //循环音符的次数
  70.   {
  71.     tone(tonePin, tune[x]); //此函数依次播放tune序列里的数组,即每个 音符
  72.     delay(400 * duration[x]); //每个音符持续的时间,即节拍duration,是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握
  73.     noTone(tonePin);//停止当前音符,进入下一音符
  74.   }
  75.   delay(5000);//等待5秒后,循环重新开始
  76. }
复制代码


 楼主| 发表于 2022-5-5 17:03 | 显示全部楼层
slby 发表于 2022-5-5 16:51
你好,想问一下这个程序要是把超声波测距模块改成漫反射式光电红外传感器应该怎么改? ...

定义引脚接A0就行了
 楼主| 发表于 2022-5-5 17:04 | 显示全部楼层
slby 发表于 2022-5-5 16:51
你好,想问一下这个程序要是把超声波测距模块改成漫反射式光电红外传感器应该怎么改? ...

是这个模块吗?

【Arduino】168种传感器模块系列实验(147)---E18-D80避障传感器
https://www.arduino.cn/forum.php ... 4&fromuid=61537
(出处: Arduino中文社区)
 楼主| 发表于 2022-5-5 17:30 | 显示全部楼层

实验的视频记录

https://v.youku.com/v_show/id_XN ... o_XNTg2Nzk3Njk1Mg==



发表于 2022-5-6 17:00 | 显示全部楼层
eagler8 发表于 2022-5-5 17:04
是这个模块吗?

【Arduino】168种传感器模块系列实验(147)---E18-D80避障传感器

对,就是型号不一样
发表于 2022-5-6 17:04 | 显示全部楼层
eagler8 发表于 2022-5-5 17:03
定义引脚接A0就行了

可不可以具体帮忙写写,没太搞懂
发表于 2022-5-6 17:25 | 显示全部楼层
slby 发表于 2022-5-6 17:04
可不可以具体帮忙写写,没太搞懂

中间应该怎么写,麻烦帮忙看一下
#define buzzer 7 //蜂鸣器接D7
#define  //光电开关接A0
void setup() {
  Serial.begin (9600);
  pinMode(, INPUT);//设置为输入
  pinMode(buzzer, OUTPUT);//设置为输出
}
void loop() {

  if (distance < 10)
{
    digitalWrite(buzzer , HIGH);//蜂鸣器响
    delay(1000);
  }
  else {
    digitalWrite(buzzer , LOW);
    delay(1000);
  }
}
 楼主| 发表于 2022-5-7 09:42 | 显示全部楼层
slby 发表于 2022-5-6 17:25
中间应该怎么写,麻烦帮忙看一下
#define buzzer 7 //蜂鸣器接D7
#define  //光电开关接A0

盲人避障器(有障碍时蜂鸣器鸣响)
1)实验开源仿真编程(Linkboy V4.63

6.9-27.jpg

 楼主| 发表于 2022-5-7 09:43 | 显示全部楼层
2)实验场景图

6.9-28.jpg

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

本版积分规则

小黑屋|Archiver|手机版|Arduino爱好者

GMT+8, 2022-12-3 04:13 , Processed in 0.072533 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表