枫飞秋语
发表于 2016-9-26 14:53:01
我爱萝丽爱萝丽 发表于 2016-9-26 13:40
也没几个人回复,还以为都没人看
大神,估计大家都没懂,不敢乱回复,快公布吧
机甲老顽童
发表于 2016-9-26 15:14:11
群主,学生最怕的就是作业!一看是作业,一个头两个大。
猪猪宠物
发表于 2016-9-26 18:28:03
都在默默的看呢。每天都要来看几遍更新没有。老火。
838055757
发表于 2016-9-27 00:12:09
count=count+1; if(count>9) { count=0; } if(duty_R>count) { LED_R=1; } else { LED_R=0; } if(duty_G>count) { LED_G=1; } else { LED_G=0; } if(duty_B>count) { LED_B=1; } else { LED_B=0; }
838055757
发表于 2016-9-27 00:15:11
睡了一觉醒来想出来的 就是这学习劲不知道对不对
我爱萝丽爱萝丽
发表于 2016-9-27 00:53:55
838055757 发表于 2016-9-27 00:12
count=count+1; if(count>9) { count ...
对,就是这样。起码的互动还是要有的,不然整天自言自语什么意思。
我爱萝丽爱萝丽
发表于 2016-9-27 01:27:42
1.3 添加PWM程序
上一小节中,留了一个小坑让大家自己填。要求实现的功能是:用每个LED的占空比独立的控制三种颜色的亮度。
一共有三位童鞋提交了自己的答案:
第一位:只能亮白色或熄灭,达不到要求;
第二位:能够实现控制亮度、颜色的目的,但逻辑不清晰,引脚只能是0或1,将0~10的duty值赋给引脚没有意义;
第三位:能够实现要求。
为什么要使用三个PWM?独立控制每个LED亮度才能实现更多的色彩,方便接下来更复杂的程序编写。
count=count+1; //每过1ms计数+1
if(count>9)
{
count=0; //计数大于9后又变成0!,0~9十毫秒PWM周期
}
if(duty_R>count) //在count 0~9变化中,duty大于count的次数就是占空比
{
LED_R=1; //改变duty改变高电平时间,亮度变化
}
else
{
LED_R=0;
}
if(duty_G>count) //绿色LED PWM
{
LED_G=1;
}
else
{
LED_G=0;
}
if(duty_B>count) //蓝色LED PWM
{
LED_B=1;
}
else
{
LED_B=0;
}
我爱萝丽爱萝丽
发表于 2016-9-27 02:33:37
1.4 更多模式怎么加
首先你应该注意到,无论什么模式,都是有它的周期性的。
举例说最简单的爆闪模式:亮半秒灭半秒,两个状态不断循环;
双闪模式:亮半秒、灭半秒、亮半秒、灭三秒,四种状态循环;
七色舞台灯的模式:每种颜色亮1秒,7个状态不断循环;
……
举例程序如何实现爆闪模式,学到以后你可以试试自己实现其他功能。
循环程序必定有有一个数据计算时间,所以你要先定义一个数据:
unsigned int delay_time; //定义一个数据,记录时间
注意数据大于255时,必须使用unsigned int
增加了模式7,所以按键改变模式的最大值也要相应更改。
添加模式7的代码:
更多更复杂的模式程序,就要看每个人的能力自己深入练习了。第一个项目的学习算是结束。
if(mode==7) //模式7 爆闪
{
delay_time=delay_time+1;
if(delay_time>1000)//爆闪周期1000ms
{
delay_time=0;
}
if(delay_time<400) //前0.4秒全亮
{
duty_R=10;
duty_G=10;
duty_B=10;
}
else //后0.6秒熄灭
{
duty_R=0;
duty_G=0;
duty_B=0;
}
}
panlongdian
发表于 2016-9-27 08:20:44
谢谢老师的更新,一个PWM和三个PWM效果没有什么区别呀!只是需要更多的功能时,才能显示出led变量的用处。谢谢老师详细而渐进的引导!
我是天才
发表于 2016-9-27 22:42:17
楼主,pwm掌握的差不多了,希望楼主尽快推出ppm教程和ad检测功能,这样就可以自己做一些东西插在接收机上了,楼主辛苦
机甲老顽童
发表于 2016-9-28 00:04:02
你们都那么牛逼,咋都不上天呢,我还没学会呢,群主关键词都没教完
838055757
发表于 2016-9-28 14:22:20
unsigned char jaotishan;if(mode==8) { jaotishan=jaotishan+1; if(jaotishan>3) { jaotishan=0; } if(jaotishan==1) { duty_R=10; duty_G=0; duty_B=0; } if(jaotishan==2) { duty_R=0; duty_G=10; duty_B=0; } if(jaotishan==3) { duty_R=0; duty_G=0; duty_B=10; }}
838055757
发表于 2016-9-28 19:30:37
unsigned char jaotishan;
if(mode==8)
{
jaotishan=jaotishan+1;
if(jaotishan>3)
{
jaotishan=0;
}
if(jaotishan==1)
{
duty_R=10;
duty_G=0;
duty_B=0;
}
if(jaotishan==2)
{
duty_R=0;
duty_G=10;
duty_B=0;
}
if(jaotishan==3)
{
duty_R=0;
duty_G=0;
duty_B=10;
}
}
萝丽大师 你看下 哪里不对 我想让他交替闪
panlongdian
发表于 2016-9-28 20:31:05
838055757 发表于 2016-9-28 19:30 static/image/common/back.gif
unsigned char jaotishan;
if(mode==8)
{
牛,有思想。
机甲老顽童
发表于 2016-9-28 21:34:02
本帖最后由 yrj 于 2016-9-28 21:47 编辑
爆闪的编译出错,呵呵,原来自己没定义unsigned int delay_time;
我爱萝丽爱萝丽
发表于 2016-9-29 03:27:03
我是天才 发表于 2016-9-27 22:42
楼主,pwm掌握的差不多了,希望楼主尽快推出ppm教程和ad检测功能,这样就可以自己做一些东西插在接收机上了 ...
恩,会慢慢有的。这样会的人多了以后简单DIY你们可以自己搞定了
我爱萝丽爱萝丽
发表于 2016-9-29 03:31:16
838055757 发表于 2016-9-28 19:30
unsigned char jaotishan;
if(mode==8)
{
交替闪变化太快了,1ms变化一次看不出来。至少要200ms吧.先用delay_time等待200ms后,jiaotishan再+1
签签
发表于 2016-9-29 08:53:32
原来大神在这里呀。。找的好辛苦。
LIHUA
发表于 2016-9-29 09:10:27
催更http://www.moz8.com//mobcent//app/data/phiz/default/15.png
LIHUA
发表于 2016-9-29 09:13:09
time变量有什么用呢? 没看懂,