介绍
使用光线传感器的值的变化.PWM控制蜂鸣器发出有趣的声音
准备材料
- QHC02-ESP32主控板
- C01光线声音传感器
- 连接线
连接
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLzkEROBTWE5UNJpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmLxUjM2MTNxATMyIDNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
程序编写
int photopin = 12; // 光敏传感器连接引脚定义
int photValue; // 光敏电阻读数
int buzzerPin = 4; // 蜂鸣器引脚定义
long buzzerFreq; // 蜂鸣器频率
// 调整这些值发出不同的声音变化:
long buzzMAX = 2500; // 蜂鸣器最大频率
long photoMAX = 1023; //光线传感器最大值
void setup() {
pinMode(buzzerPin, OUTPUT); // 设置蜂鸣器为输出模式
}
void loop() {
// 读取光线传感器的值
photValue = analogRead(photopin); // 0-1023
// 将光线传感器的值转化为蜂鸣器的频率
buzzerFreq = (photValue * buzzMAX) / photoMAX;
buzz(buzzerPin, buzzerFreq, 10);
}
void buzz(int targetPin, long frequency, long length) {
long delayValue = 1000000 / frequency / 2;
long numCycles = frequency * length / 1000;
for (long i = 0; i < numCycles; i++) {
digitalWrite(targetPin, HIGH);
delayMicroseconds(delayValue);
digitalWrite(targetPin, LOW);
delayMicroseconds(delayValue);
}
}
ESP32Arduino学习(二).魔法音效
Have fun!