## **制作你的特雷门琴**
> 本例向你展示如何使用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)
- 说明
- 系统示例文件目录结构及说明
- 01.Basics
- AnalogReadSerial
- BareMinimum
- Blink
- DigitalReadSerial
- Fade
- ReadAnalogVoltage
- 02.Digital
- BlinkWithoutDelay
- Button
- Debounce
- DigitalInputPullup
- StateChangeDetection
- toneKeyboard
- toneMelody
- toneMultiple
- tonePitchFollower
- 03.Analog
- AnalogInOutSerial
- AnalogInput
- AnalogWriteMega
- Calibration
- Fading
- Smoothing
- 04.Communication
- ASCIITable
- Dimmer
- Graph
- Midi
- MultiSerial
- PhysicalPixel
- ReadASCIIString
- SerialCallResponse
- SerialCallResponseASCII
- SerialEvent
- SerialPassthrough
- VirtualColorMixer
- 05.Control
- Arrays
- ForLoopIteration
- IfStatementConditional
- switchCase
- switchCase2
- WhileStatementConditional
- 06.Sensors
- ADXL3xx
- Knock
- Memsic2125
- Ping
- 07.Display
- barGraph
- RowColumnScanning
- 08.Strings
- CharacterAnalysis
- StringAdditionOperator
- StringAppendOperator
- StringCaseChanges
- StringCharacters
- StringComparisonOperators
- StringConstructors
- StringIndexOf
- StringLength
- StringLengthTrim
- StringReplace
- StringStartsWithEndsWith
- StringSubstring
- StringToInt
- 09.USB
- Keyboard
- KeyboardLogout
- KeyboardMessage
- KeyboardReprogram
- KeyboardSerial
- KeyboardAndMouseControl
- Mouse
- ButtonMouseControl
- JoystickMouseControl
- 10.StarterKit_BasicKit (与特定硬件相关,暂无)
- p02_SpaceshipInterface
- p03_LoveOMeter
- p04_ColorMixingLamp
- p05_ServoMoodIndicator
- p06_LightTheremin
- p07_Keyboard
- p08_DigitalHourglass
- p09_MotorizedPinwheel
- p10_Zoetrope
- p11_CrystalBall
- p12_KnockLock
- p13_TouchSensorLamp
- p14_TweakTheArduinoLogo
- p15_HackingButtons
- 11.ArduinoISP(暂无)
- ArduinoISP