极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 迷你强

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

  [复制链接]
发表于 2013-2-22 19:49:20 | 显示全部楼层
代码有问题!减一档的时候灯反而会再亮一下再逐渐变暗
回复 支持 反对

使用道具 举报

发表于 2013-2-22 19:53:46 | 显示全部楼层
int n=0;
void setup ()
{
  pinMode(4,INPUT);
  pinMode(6,OUTPUT);      //该端口需要选择有#号标识的数字口
  pinMode(10,INPUT);
}

void loop()
{
  int up =digitalRead(4);          //读取4号口的状态
  int down = digitalRead(10);      //读取10号口的状态   
  if (up==HIGH)                    //判断4号口目前是否是高电平
  {
     n=n+5;                         //每次累加值为5
    analogWrite(6,n);               //使用PWM控制6号口输出,变量n的取值范围是0-255  
                          
    if (n>=255) {
      n=255;
    }            //限定最大值为255   
    delay (300);
  }
  if (down==HIGH)                    //减少亮度
  {
    n=n-5;
    analogWrite(6,n);
      if (n<=0) {
      n=0;
    }
    delay (300);
  }
}
回复 支持 反对

使用道具 举报

发表于 2013-3-2 00:06:00 | 显示全部楼层
如果两个按钮一起按下去会怎样?

  1. if (up==HIGH)
  2. if (down==HIGH)
复制代码
两个if在同一时间都会进入么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-2 18:29:43 | 显示全部楼层
paperen 发表于 2013-3-2 00:06
如果两个按钮一起按下去会怎样?两个if在同一时间都会进入么?

程序从上往下执行。。
回复 支持 反对

使用道具 举报

发表于 2013-3-3 12:52:02 | 显示全部楼层
迷你强 发表于 2013-3-2 18:29
程序从上往下执行。。

那就是两个if都执行了
回复 支持 反对

使用道具 举报

发表于 2013-3-4 12:24:37 | 显示全部楼层
本帖最后由 <一一巛 于 2013-3-5 10:14 编辑

交作业
  1. int n=0;
  2. void setup() {   
  3.    pinMode(11, OUTPUT);  
  4.    pinMode(6, INPUT);        
  5. }
  6. void loop() {
  7.    if(digitalRead(6)==HIGH) {
  8.     analogWrite(11, n);  
  9.     delay(200);
  10.      n+=5;      
  11.     if (n>=80) {n=0;}
  12.   }
  13.   else
  14.      digitalWrite(11, 0);
  15. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-3-30 11:22:32 | 显示全部楼层
本帖最后由 stongage9 于 2013-3-30 15:32 编辑

强哥,劳驾您给指点下吧。我是新手,但是特别想学这个。我按照线路图检查了好几遍,都没有发现问题出在哪。我这个命令行是复制粘贴的,所以应该不存在编程错误。但是接上线后就变成按钮起不到任何作用,而是从重置开始就灯自己在慢慢变亮。无论左右按键均无法控制。附上我的图。如能得到指点,万分感激~!
回复 支持 反对

使用道具 举报

发表于 2013-4-1 18:11:21 | 显示全部楼层
if (up==HIGH)                    //判断4号口目前是否是高电平22.  {23.    analogWrite(6,n);               //使用PWM控制6号口输出,变量n的取值范围是0-255  24.   n=n+5;                         //每次累加值为525.    if (n>=255) {26.      n=255;27.    }            //限定最大值为255   28.    delay (300);29.  }

我想请问下这个语句是怎么实现灯的亮度增加的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-2 09:18:05 | 显示全部楼层
213菜鸟 发表于 2013-4-1 18:11
if (up==HIGH)                    //判断4号口目前是否是高电平22.  {23.    analogWrite(6,n);           ...

pwm 调整led的开关频率来控制亮度
回复 支持 反对

使用道具 举报

发表于 2013-4-9 14:21:05 | 显示全部楼层
强哥,我看完你的代码觉得实际效果应该是假设你按下了up 没有按下 down 这个时候会300毫秒增加一次亮度直到255,如果你按下了down而没有按下up应该会每300毫秒减少一个亮度直到0,如果同时都按下了,应该是会有5个级别的轻微的频率为600毫秒的亮度闪烁,而不是你视频的按一下量一下按一下量一下啊啊啊?难道我对loop的原理理解有误??谢谢强哥。
回复 支持 反对

使用道具 举报

发表于 2013-4-9 20:53:28 | 显示全部楼层
迷你强 发表于 2013-4-2 09:18
pwm 调整led的开关频率来控制亮度

谢谢你~~~学习了~~~
回复 支持 反对

使用道具 举报

发表于 2013-4-16 23:42:57 | 显示全部楼层
强哥。我想问下arduino有没有类似于子程序的东西?我想把这个程序变成按一下是第一种亮灯模式(子程序一)按两下是子程序二这样的,以此类推~然后另外一边是反过来的~
拜托强哥了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-21 21:32:46 | 显示全部楼层
213菜鸟 发表于 2013-4-16 23:42
强哥。我想问下arduino有没有类似于子程序的东西?我想把这个程序变成按一下是第一种亮灯模式(子程序一)按 ...

有的。。。
回复 支持 反对

使用道具 举报

发表于 2013-4-23 14:53:21 | 显示全部楼层
为什么感觉有点不对啊,我按一下UP按钮,必须得按三下DOWN才能把灯关掉,看程序N增减的幅度是一样的啊,十分不解,而且感觉按DOWN时,等实际是变亮了一级然后才逐渐熄灭的,求解答???????????
回复 支持 反对

使用道具 举报

发表于 2013-4-23 15:27:39 | 显示全部楼层
接上问:我将UP设为n=n+5,DOWN设为n=n-10,按一下UP按钮,必须得按两下DOWN才能把灯关掉。按理说N初始值为0 ,增减的幅度应相同啊,不知为何出现这种情况。
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 13:06 , Processed in 0.046065 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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