呼吸灯的小研究
本帖最后由 shihaipeng04 于 2014-2-23 13:44 编辑呼吸灯好像没什么可说的,for++,然后for--,小学生水平哦。不过for出来的呼吸灯有些生硬,看着很机械,和苹果的那种呼吸感觉完全不一样。所以我就研究了一下,哈哈,网上很多文章,原来呼吸的变化幅度是个类似正弦波的曲线。
呼吸的频率从16~20次不等,实际效果感觉慢一些会更平和,快了有点心忙。
void setup()
{
//我懒pinmode是可以忽略的,这不是个好习惯,正经应用还是加上的好。
}
void loop() {
double a,i,s;
s = 0.006;
for (i=.1;i<3.04;i+=s)//弧度0~3.14很麻烦,所以用了浮点数,没从0度开始,不同的led不太一样,我这个从0.1才会亮起来,0.1以下忽然就黑了,感觉很不好,还是连贯一些比较舒服
//步长.006是 3.14的512分之一,步长太大会有闪动
{
if (i > 1.57) s = 0.004;//当到达半π后,下降区间加大步长,让吐气变的更慢
a = sin(i)*255; //返回值0~1,所以*255
analogWrite(3,a);
delay(9); //一个小的延时
}
delay(170);//适度间隔
}
欢迎大家继续研究,有好的成果共享一下。
a值还可以用Serial.print出来,把数值直接粘到数组变量里,就不用计算了。
应楼下的想法不错,搞了个数组,省的算了。
char BL=//注意这个数组类型,int 和 char 会有不同的效果
{0,1,3,4,6,8,9,11,13,14,16,18,19,21,23,24,26,28,29,31,33,34,36,
38,39,41,43,44,46,47,49,51,52,54,56,57,59,60,62,64,65,67,69,70,
72,73,75,76,78,80,81,83,84,86,88,89,91,92,94,95,97,98,100,101,
103,104,106,107,109,111,112,113,115,116,118,119,121,122,124,
125,127,128,130,131,132,134,135,137,138,139,141,142,144,145,
146,148,149,150,152,153,154,156,157,158,160,161,162,164,165,
166,167,169,170,171,172,174,175,176,177,178,180,181,182,183,
184,185,186,188,189,190,191,192,193,194,195,196,197,199,200,
201,202,203,204,205,206,207,208,209,210,210,211,212,213,214,
215,216,217,218,219,219,220,221,222,223,224,224,225,226,227,
227,228,229,230,230,231,232,233,233,234,235,235,236,236,237,
238,238,239,240,240,241,241,242,242,243,243,244,244,245,245,
246,246,247,247,247,248,248,249,249,249,250,250,250,251,251,
251,252,252,252,252,253,253,253,253,254,254,254,254,254,254,
255,255,255,255,255,255,255,255,255,255,255,255,255};
void setup()
{
}
void loop() {
int i=0,s=2,t=1;;
while (1)
{
analogWrite(3,BL);
i+=t;//i = i + t;
if (i > 240) t = -1; //到达上限变减
if (i < 1) t = 1; //到达下限变加
delay(s);
}
}
哈哈,手贱,把BL的类型从int改成了char,结果意外的发现不是呼吸灯,变成了心跳灯了。
感觉数组有点大,可以适当缩小点。有个100级应该肉眼就看不出啥来了。 不错,学习了! 支持楼主,善于发现生活中的细节 本帖最后由 Lance 于 2014-2-22 20:26 编辑
灯并联个电容, 不知道效果会怎么样. :P
不过研究成果挺好. 以后我做呼吸灯也有依据了. 这个好,有点专业性 :funk:传说中的深入研究,刚好要用,留个脚印备查 楼主观察很仔细,钻研精神值得学习。算浮动数特别是正弦运算量较大,可以在用这个程序找到好的变化序列后存在数组里直接调用,在插入其它代码时会更省资源。4楼说的并联电容的方法也值得一试。 不错不错!支持一下!呼吸灯可以通过模拟电路的方式来实现的。这样就不会消耗宝贵的运算资源了嘛,arduino最为一个信号源控制信号。 {:soso_e113:}Arduino做呼吸灯成本太高了,我有两块钱STC单芯片的呼吸灯。外围元件只要一只电阻。
http://www.geek-workshop.com/thread-530-1-1.html
页:
[1]