11.8的代码似乎存在错误
因为我没有AD板,用的是仿真软件。
int minlight = 0;//最小亮度
int maxlight = 255;//最大亮度
float breatheStep = 0.5;//亮度变化值
int delayTime = 1;//每个亮度保持时间,这其实也是一个一个阶梯型电平组成的大连续信号
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);//接上三个LED
}
void loop()
{
breathing(2);
breathing(3);
breathing(4);//三个LED依次亮度变化
}
void breathing(int pincode )
{
for (float light = 0; light <= maxlight ; light = light + breatheStep )//逐渐变亮,电压由0到百分之百
{
analogWrite(pincode, light);
delay(delayTime);
}
for (float light = 255; light >= minlight; light = light - breatheStep)//逐渐变暗,电压由百分之百到0
{
analogWrite(pincode, light);
delay(delayTime);
}
}
今天没时间,先贴个代码吧

===============================日期分割线==================================
11.9更新
猜测是接口选择的问题
参照下面这个视频的大约3:31处,作者提到要将LED灯接的接口应当有 “~” 这个符号。
https://www.bilibili.com/video/BV164411J7GE?p=26&vd_source=20347e81d5f586ee7a33d3a6c73ea587
我在11.8,LED灯只有绿色灯是接在了“3~”口上,剩下两个分别接在了“2”“4”口上,可能是这个原因导致了最后只会有一个绿灯呈现流水呼吸式效果,而另外两个没有。(PS:虽然我在模拟软件上看见的是三个都有效果,可能是什么我不知道的bug吧 xD )
下面是改过的代码和接线图
为了方便,我先统一定义了pin1-3三个变量来表示接口,方便您按照您的板子来修改(我还没有板子x_x,这个代码在板子上运行的真实情况如何我无法验证,在此致歉)
int minlight = 0;//最小亮度
int maxlight = 255;//最大亮度
float breatheStep = 0.5;//亮度变化值
int delayTime = 1;//每个亮度保持时间,这其实也是一个一个阶梯型电平组成的大连续信号
int pin1 = 3;
int pin2 = 5;
int pin3 = 6;//选择接口3,5,6,因为它们后面有“~”这个符号,似乎有这个符号的接口,analogWrite()才会真正发挥作用
void setup()
{
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);//接上三个LED
}
void loop()
{
breathing(pin1);//红光
breathing(pin2);//绿光
breathing(pin3);//蓝光
//三个LED依次亮度变化
}
void breathing(int pincode)
{
for (float light = 0; light <= maxlight; light = light + breatheStep)//逐渐变亮,电压由0到百分之百
{
analogWrite(pincode, light);
delay(delayTime);
}
for (float light = 255; light >= minlight; light = light - breatheStep)//逐渐变暗,电压由百分之百到0
{
analogWrite(pincode, light);
delay(delayTime);
}
}

学习小结:
1.AD库用法:analogWrite(pin,PMN*255),注意对应接口要带“~”。PMN是占空比,我理解上是可以当作等效电压(应该不太准确,但是不妨碍我实现效果hh),如75%PMN就可以近似为75%最高输出电压(高电平);255是因为这是8位AD板,2^8 = 255 。
2.C++语言:(1)for循环
for(初始条件;判断条件;每个循环最后一步)
{
判断为真时候运行的代码块;
}
(2)定义变量
变量类型+变量名称 = 给变量的值
int Sleepycat = 1314 ;
文章描述了一个编程者在使用C++控制LED灯的流水呼吸效果时遇到的问题,怀疑是接口选择和AD板的使用问题。作者通过代码更新和视频参考解决了LED只显示单一颜色的问题,强调了接口符号~对于analogWrite函数的重要性。

1万+

被折叠的 条评论
为什么被折叠?



