2023.11.8----Arduino流水呼吸灯

文章描述了一个编程者在使用C++控制LED灯的流水呼吸效果时遇到的问题,怀疑是接口选择和AD板的使用问题。作者通过代码更新和视频参考解决了LED只显示单一颜色的问题,强调了接口符号~对于analogWrite函数的重要性。

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 ;

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值