用户工具

站点工具


learing:examples:pitch_follower

Pitch follower using the tone() function (使用tone功能随输入量改变音高)

此例程演示了使用tone功能来产生一个随输入值变化的音高。

ALPHA MEGA328-U核心

硬件

搭建电路

  1. ALPHA MEGA328-U模块插入并行扩展板1号槽位。
  2. ALPHA 蜂鸣器模块插入并行扩展版1号槽位堆叠于MEGA328-U上。
  3. ALPHA 电位器模块插入并行扩展版2号槽位。
  4. USB线连接计算机与ALPHA MEGA328-U。

代码

/*
 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);        // 延时
}

ALPHA 8F328D-U核心

硬件

搭建电路

代码

MangoII

硬件要求

8欧姆阻抗扬声器
1个光敏电阻
4.7K欧姆电阻
100欧姆电阻
面包板
连接线

电路图

在扬声器的一端接100欧姆电阻到数字口9,另一端接地。给光敏电阻提供5v电源,并且用接地的4.7欧姆电阻连接到A0口。

代码

代码很简单,读取模拟输入并且标定模拟值到一定范围的音高。人类可以听到20-20000hz频率的声音,但是这里我们用120-1500hz更合适。

你需要得到真实的模拟输入变化范围。电路图中可以知道模拟输入值大约在400-1000变化。改变map值来对比你的传感器的变化范围。

/*
 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);        // 延时
}
learing/examples/pitch_follower.txt · 最后更改: 2023/06/07 04:23 由 127.0.0.1