极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 迷你强

Arduino入门教程--第五课--按钮PWM控制LED亮度

  [复制链接]
 楼主| 发表于 2013-4-23 17:23:21 | 显示全部楼层
johnny 发表于 2013-4-23 15:27
接上问:我将UP设为n=n+5,DOWN设为n=n-10,按一下UP按钮,必须得按两下DOWN才能把灯关掉。按理说N初始值为 ...

这种关于算法程序的优化问题就自己研究了。。。我还没玩转呢。。。。。5~~~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2013-4-23 18:00:13 | 显示全部楼层
johnny 发表于 2013-4-23 14:53
为什么感觉有点不对啊,我按一下UP按钮,必须得按三下DOWN才能把灯关掉,看程序N增减的幅度是一样的啊,十分 ...

...

if (down==HIGH)                    //减少亮度
  {
    analogWrite(6,n);
   n=n-5;
    if (n<=0) {
      n=0;
    }
    delay (300);
}

你没发现 , 当你按下DOWN进入这部分控制的时候,实际是先驱动LED么, 这时候的n其实是你上次按UP后+5后的n,而这个n在你按UP的时先输出后才+了5, 当然你按DOWN是感觉会再亮了一级咯...

把两个analogWrite(6,n); 对n处理的后面就正常了...

当然 强哥 我表示对这个DEMO吐槽无力..  
回复 支持 反对

使用道具 举报

发表于 2013-4-23 19:11:52 | 显示全部楼层
不是很明白 ,待会儿再仔细看看。多谢了
回复 支持 反对

使用道具 举报

发表于 2013-4-28 15:23:48 | 显示全部楼层
班门弄个斧~~

int light=0;
int jiajian=1;

void setup(){
    pinMode(4,INPUT);
    pinMode(9,OUTPUT);
}

void loop(){
analogWrite(9,light);
int n=digitalRead(4);

if (jiajian==1){
  if (n==HIGH){
    light=light+1;
    if (light==255){
      jiajian=0;
    }
    delay(5);
  }
}
if (jiajian==0){
  if (n==HIGH){
    light=light-1;
    if (light==0){
      jiajian=1;
    }
    delay(5);
  }
}


对了,这个微动开关,我怎么不能插进去啊,感觉针脚有些粗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-29 10:16:26 | 显示全部楼层
pumpitup 发表于 2013-4-28 15:23
班门弄个斧~~

int light=0;

用力按进去,弯脚一般有弹性,用点力气
回复 支持 反对

使用道具 举报

发表于 2013-7-21 20:19:19 | 显示全部楼层
迷你强 发表于 2012-7-25 20:12
1。输入端的数字口无所谓,可以换,只要修改程序对应位置即可
2.这个真不清楚,没这么用过
3.延迟300毫 ...

菜鸟有话说啊!强哥,请问把两个delay注释掉后开关摁一下全亮全灭是因为程序执行太快,直接从0加到了255吗?
回复 支持 反对

使用道具 举报

发表于 2013-7-21 20:22:42 | 显示全部楼层
迷你强 发表于 2012-6-28 22:28
我懒,外带按钮质量好,按标准,应该是按下开关后30ms再取值的。。。。

强哥,菜鸟有麻烦了,麻烦给写个除颤语句观摩学习一下吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-22 09:33:24 | 显示全部楼层
学学学 发表于 2013-7-21 20:22
强哥,菜鸟有麻烦了,麻烦给写个除颤语句观摩学习一下吧

硬件除颤吧,并连个104电容吧
回复 支持 反对

使用道具 举报

发表于 2013-8-12 14:28:44 | 显示全部楼层
#define LED 9
int i=0;// 定义变量i存储变量,并用于计数

void setup(){
pinMode(9,OUTPUT);
}

void loop(){
for(i=0;i<225;i++){
analogWrite(LED,i);
delay(10);//延时10ms,因为analogWrite执行瞬间完成,速度太快眼睛不易

察觉
}
if(i==255){
i=0;
analogWrite(LED,i);
delay(1000);
}
}
为什么if语句不起作用啊?
回复 支持 反对

使用道具 举报

发表于 2013-11-2 20:30:58 | 显示全部楼层
analogWrite(6,n)里面的n的取值是不是可以在0-255随便取值呢?还有就是为什么在255内呢,最大可以到达多少呢?是不是1024?他的物理输出是多少V呢?麻烦了~
回复 支持 反对

使用道具 举报

发表于 2013-11-2 20:32:06 | 显示全部楼层
再好奇问下~~mega2560是不是0-13口都可以做pwm输出呢?
回复 支持 反对

使用道具 举报

发表于 2013-11-30 14:42:27 | 显示全部楼层
很好玩按住接口2不动是渐亮,按住接口10是渐暗到灭,两个同时按下LED就闪烁了。
回复 支持 反对

使用道具 举报

发表于 2013-12-1 09:46:58 | 显示全部楼层
新手又来了...
老师,我如果想按着按键就能持续变亮或者变暗,是不是只需要将n值修改小点,然后把按键读取的delay也改小就可以了呢?这样就能实现,好比下一节课的电位器调整亮度一样..让灯的过度看起来连续...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-3 11:28:42 | 显示全部楼层
melodynn03 发表于 2013-12-1 09:46
新手又来了...
老师,我如果想按着按键就能持续变亮或者变暗,是不是只需要将n值修改小点,然后把按键读取的d ...

恩。应该是可以的,建议尝试
回复 支持 反对

使用道具 举报

发表于 2013-12-27 18:59:22 | 显示全部楼层
开关电路没看懂,不知道开关那下面的电阻怎么在电路里工作的,求大神帮忙啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 12:14 , Processed in 0.044351 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表