🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## **制作你的特雷门琴** > 本例向你展示如何使用tone()函数根据模拟信号的变化播放不同的音符。  > 用一个光敏电阻将Arduino或Genuino板变成一个简易版**特雷门琴**。 ### **所需硬件** * Arduino板Genuino板 * 8Ω扬声器 * 光敏电阻 * 100Ω电阻 * 面包板连接线/杜邦线、 * 面包板 ### **电路** ![图片来自官网](http://img.blog.csdn.net/20160504125632348) 将扬声器一端通过100Ω的电阻连接到9号引脚,另一端连接到GND。5V连接到光敏电阻一端,另一端连接到A0口,并加一个4.7KΩ下拉电阻。 ### **原理图** ![图片来自官网](http://img.blog.csdn.net/20160504125643673) ### **代码** 本例的代码超级简单。你只需要读取模拟信号输入值然后将它与一些音符对应即可。人类能够听见20-20,000HZ的声音,但120-1,500HZ的声音比较适合在这个例子中使用。 为了达到音符与模拟输入值的对应,你需要知道模拟信号值的范围。在这个电路中,这个值在400-1000左右。你可改变传入map函数的参数来根据你用的传感器进行调整。 代码如下: ~~~ /* 制作你的特雷门琴 根据模拟输入值的改变播放不同的音符。 电路搭建: * 9号引脚连接8Ω扬声器 * 光敏电阻连0-5V * 4.7KΩ电阻连A0-GND 代码是公开的。 */ void setup() { // 初始化串口连接(调试用): Serial.begin(9600); } void loop() { // 读取传感器值: int sensorReading = analogRead(A0); //打印一下传感器的值来找到范围: Serial.println(sensorReading); // 将模拟输入值的对应到120-1500HZ的声音 //注:可能要根据实际情况调整下列数值: int thisPitch = map(sensorReading, 400, 1000, 120, 1500); // 播放音符: tone(9, thisPitch, 10); delay(1); // delay以保证稳定 } ~~~ ### **相关资料** [Array()](http://www.arduino.cc/en/Reference/Array)  [for()](http://www.arduino.cc/en/Reference/For)  [tone()](http://www.arduino.cc/en/Reference/Tone)  [map()](http://www.arduino.cc/en/Reference/Map)