【Beetle ESP32-C3】三、旋钮(电位器)调整LED亮度(Arduino)
<div class='showpostmsg'><h2><b>1、功能说明</b></h2><p> 本篇介绍旋钮控制LED亮度的过程。旋钮使用电位器,旋转产生电压变化,然后接入ESP32-C3,做ADC采样,再根据采样值——也就是电压值,来调整PWM占空比,达到控制LED亮度的效果。</p>
<p> </p>
<p class="imagemiddle" style="text-align: center;"></p>
<p align="center">图3-1 蓝白电位器连接(图中A0接入ESP32的ADC)</p>
<p align="center"> </p>
<h2><b>2、ESP32-C3的ADC</b></h2>
<p> ESP32-C3技术规格书(datasheet)上有管脚介绍。本例选择了IO5,也就是ADC2_CH0作为模拟信号输入管脚。</p>
<p> Arduino-ESP32框架中ADC的使用非常简单,IO无须初始化,只要调用函数analogRead(pin)就可以读取管脚上的电压值,当然参考电压是3.3V,可以测量的电压值也在0~3.3V之间,因为是12位的ADC,所以对应数字转换值为0~4095。</p>
<p> </p>
<p class="imagemiddle" style="text-align: center;"></p>
<p align="center">图3-2 ESP32-C3的管脚描述表截图</p>
<p align="center"> </p>
<h2><b>3、串口启用</b></h2>
<p> 本人开始准备启用Serial1(DFROBOT文档介绍的用法),后来就想先试试Serial看看,没想到板子的Type-C USB口就可以作为串口使用(对应Serial),这就省得连接USB-TTL模块了。</p>
<p> 当然,本人在测试过程中也遇到一些坑。基本就是一旦板子程序启用了Serial,那么上电后就可以自动通过Type-C USB识别到串口,这样还省得将IO9脚拉低了。不过开始不清楚,再加上这种形式有时也会识别不到,所以连接USB-TTL搞了半天。</p>
<p> 目前的测试现象是:Type-C USB识别为串口后,使用USB-TTL模块连接板子的20、21脚(看管脚描述是RxD和TxD)并没有效果。即只能使用Type-C USB自动识别的串口。</p>
<p> </p>
<p class="imagemiddle" style="text-align: center;"></p>
<p align="center">图3-3 板子Type-C USB自动识别串口的输出</p>
<p align="center"> </p>
<h2><b>4、ADC_PWM案例代码</b></h2>
<pre>
<code class="language-cpp">#define LED 7//GPIO7 控制LED
#define Ain 5//GPIO6 模拟输入
int i = 0;
/*
* 设置PWM参数,采用10位分辨率,这样PWM有效值0~1023
* 和12 bit ADC采样值0~4095呈1:4,方便转化。
*/
const int freq = 5000; //PWM频率
const int ledChannel = 0; //信号生成GPIO
const int resolution = 10;//10位分辨率
void setup() {
/*
* 个人测试,如果启用了Serial,那么Beetle ESP32-C3的USB口可以作为串口使用,
* 而且重启后,即使IO9没有拉低也可以检测到串口(可能有小概率会检测不到)。
*/
Serial.begin(115200);
//设置LEDC通道8频率为5000,分辨率为10位
ledcSetup(ledChannel, freq, resolution);
//设置LEDC通道0在IO7上输出
ledcAttachPin(LED, ledChannel);
}
void loop() {
//读取Ain模拟口的数值(0-3.3V对应0-4095取值)
int n = analogRead(Ain);
//PWM输出,占空比有效值0~1023
ledcWrite(ledChannel, n/4);
delay(1);
i++;
if(i>=2000){
Serial.print("ADC value : ");
Serial.println(n);
i=0;
}
}</code></pre>
<p> </p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>一般是Type-C USB是自动识别的串口的</p>
页:
[1]