查看: 3544|回复: 0

[FireBeetle] 来做一下ESP32的PWM调速

[复制链接]
2018-10-30_191840.jpg
ESP32有16口可以做PWM调速,0-15
然后要选PWM的信号频率控LED,5000Hz。
LED亮度调节用8位精度。也就是0-255来调节。
最后选定针脚来工作,命令如下:
ledcAttachPin(GPIO, channel)
控制亮度用另一个函数
ledcWrite(channel, dutycycle)
2018-10-30_192448.jpg
举个例,我用一个16脚来控制LED。
那程序如下:
[AppleScript] 纯文本查看 复制代码
// Done by gada888
//设定LED脚
const int ledPin = 16; // 16 = GPIO16
// 设PWM参数
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
void setup(){
// 设LED PWM 功能
ledcSetup(ledChannel, freq, resolution);
// 指定选的GPIO位LED控制脚
ledcAttachPin(ledPin, ledChannel);
}
void loop(){
// 调亮
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// PWM调节
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
// 调暗
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// PWM调节
ledcWrite(ledChannel, dutyCycle);
delay(15);缓冲
}
}


同样道理,可以一次调好几个灯
2018-10-30_193355.jpg
[AppleScript] 纯文本查看 复制代码
//done by gada888
// 设定LED 脚
const int ledPin = 16; // 16=GPIO16
const int ledPin2 = 17; // 17=GPIO17
const int ledPin3 = 5; // 5=GPIO5
// 设PWM参数
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
void setup(){
// 设定LED调速功能
ledcSetup(ledChannel, freq, resolution);
//指定要干活的GPIO
ledcAttachPin(ledPin, ledChannel);
ledcAttachPin(ledPin2, ledChannel);
ledcAttachPin(ledPin3, ledChannel);
}
void loop(){
// 调亮
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// PWM调速
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
// 调暗
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// PWM 调速
ledcWrite(ledChannel, dutyCycle);
delay(15);缓冲
}
}


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail