用户工具

站点工具


learing:examples:pitch_follower

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
learing:examples:pitch_follower [2017/10/05 03:29] 弘毅learing:examples:pitch_follower [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1
行 1: 行 1:
 +====== Pitch follower using the tone() function (使用tone功能随输入量改变音高)======
 +
 +<WRAP left round info 65%>
 +此例程演示了使用tone功能来产生一个随输入值变化的音高。
 +</WRAP>
 +
 +<WRAP left round box 100%>
 +===== ALPHA MEGA328-U核心 =====
 +==== 硬件 ====
 +  * [[ocrobot:alpha:parallelexpansion:index|ALPHA 并行扩展板]]
 +  * [[ocrobot:alpha:mega328-u:main|ALPHA MEGA328-U]]
 +  * [[ocrobot:alpha:potentiometer:main|ALPHA 电位器模块]]
 +  * [[[ocrobot:alpha:buzzer:main|ALPHA 蜂鸣器模块]]
 +==== 搭建电路 ====
 +
 +  - ALPHA MEGA328-U模块插入并行扩展板1号槽位。
 +  - ALPHA 蜂鸣器模块插入并行扩展版1号槽位堆叠于MEGA328-U上。
 +  - ALPHA 电位器模块插入并行扩展版2号槽位。
 +  - USB线连接计算机与ALPHA MEGA328-U。
 +
 +==== 代码 ====
 +
 +<code cpp>/*
 + Pitch follower
 + 播放基于模拟输入变化的音符
 +*/
 +void setup() {
 +  // 初始化通信速率(调试用):
 +  Serial.begin(9600);
 +}
 +
 +void loop() {
 +  // 读取传感器值:
 +  int sensorReading = analogRead(A0);
 +  // 显示到串口
 +  Serial.println(sensorReading);
 +  // 模拟输入变化范围 (这里,从光敏电阻得到的大约400 - 1000 )
 +  // 输出范围(120 - 1500Hz)
 +  // 基于传感器值变化范围改变输入最大最小输入值
 +    int thisPitch = map(sensorReading, 400, 1000, 120, 1500);
 +
 +  // 播放音符:
 +  tone(9, thisPitch, 10);
 +  delay(1);        // 延时
 +}</code>
 +
 +</WRAP>
 +
 +<WRAP left round box 100%>
 +===== ALPHA 8F328D-U核心 =====
 +==== 硬件 ====
 +
 +==== 搭建电路 ====
 +
 +==== 代码 ====
 +</WRAP>
 +
 +
 +<WRAP left round box 100%>
 +===== MangoII =====
 +
 +==== 硬件要求 ====
 +
 +|8欧姆阻抗扬声器|
 +|1个光敏电阻|
 +|4.7K欧姆电阻|
 +|100欧姆电阻|
 +|面包板|
 +|连接线|
 +
 +==== 电路图 ====
 +
 +在扬声器的一端接100欧姆电阻到数字口9,另一端接地。给光敏电阻提供5v电源,并且用接地的4.7欧姆电阻连接到A0口。
 +
 +==== 代码 ====
 +
 +代码很简单,读取模拟输入并且标定模拟值到一定范围的音高。人类可以听到20-20000hz频率的声音,但是这里我们用120-1500hz更合适。
 +
 +你需要得到真实的模拟输入变化范围。电路图中可以知道模拟输入值大约在400-1000变化。改变map值来对比你的传感器的变化范围。
 +
 +<code cpp>/*
 + Pitch follower
 + 播放基于模拟输入变化的音符
 +
 + */
 +
 +
 +void setup() {
 +  // 初始化通信速率(调试用):
 +  Serial.begin(9600);
 +}
 +
 +void loop() {
 +  // 读取传感器值:
 +  int sensorReading = analogRead(A0);
 +  // 显示到串口
 +  Serial.println(sensorReading);
 +  // 模拟输入变化范围 (这里,从光敏电阻得到的大约400 - 1000 )
 +  // 输出范围(120 - 1500Hz)
 +  // 基于传感器值变化范围改变输入最大最小输入值
 +    int thisPitch = map(sensorReading, 400, 1000, 120, 1500);
 +
 +  // 播放音符:
 +  tone(9, thisPitch, 10);
 +  delay(1);        // 延时
 +}</code>
 +</WRAP>