极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13260|回复: 6

小白求助 两个程序放一起就不能用呢

[复制链接]
发表于 2015-7-20 21:46:20 | 显示全部楼层 |阅读模式
今天在研究一个按键开关 两个按键调亮度 但是怎么都不行改了无数次
献丑求解
int n=0;
void setup ()
{
  pinMode(4,INPUT_PULLUP);
   pinMode(5,INPUT_PULLUP);
   pinMode(6,INPUT_PULLUP);
  pinMode(13,OUTPUT);      
  
}

void loop()
{
   int up =digitalRead(4);   
   int on =digitalRead(5);  
   int down = digitalRead(6);      

if (on==LOW) { n=20;
                  analogWrite(13,n);
                  delay (300);
    }






if (n>0){
             if (up==LOW)                  
                  {
                      n=n+5 ;                       
                       if (n>=255) {
                          n=255;
                  }            
                             analogWrite(13,n);              
                             delay (300);
                  }
  
               if (down==LOW)                  
                          {
                             n=n-25;
                                        if (n<=0) {
                                                    n=5;
                                                   }
                                      analogWrite(13,n);
                                         delay (300);}
}
}
               
    下面这个放什么位置呢
if(n>0)   {if (on==LOW) {
                                         analogWrite(13,0);
                                         delay (300); }
                                }




主要是想实现
    按下ON       灯开  
    然后再按下   灯关
    灯开时候 按下UP 亮度增加
                   按下down 亮度减小
回复

使用道具 举报

发表于 2015-7-21 14:43:54 | 显示全部楼层
大概第一段没有解决开关的问题,程序中只有开,没有关的程序,可以初始化一个标志为,在第一段判断下,原来标志清零了有按键就按开处理,同时标志位置1,有按键如果标志位为1,那就清n同时清标志位.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-21 20:14:41 | 显示全部楼层
林定祥 发表于 2015-7-21 14:43
大概第一段没有解决开关的问题,程序中只有开,没有关的程序,可以初始化一个标志为,在第一段判断下,原来标志清 ...

不是很理解 标识 但是我第一段就是按下了ON  变量N=20 下面的一段是 当N>0时才可以工作 通过UP 和DOWN 来控制N的变化 ,但是怎样才能在N>0的情况下再次按下ON  让N=0呢?
  因为开始N=0 按下ON后 N>0了 这个时候和最后的ON操作就冲突了 然后输出就一直闪烁 然后N就=0了然后UP和DOWN就没办法工作了 删掉最后一段 可以工作 但是不能关
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-21 20:15:17 | 显示全部楼层
林定祥 发表于 2015-7-21 14:43
大概第一段没有解决开关的问题,程序中只有开,没有关的程序,可以初始化一个标志为,在第一段判断下,原来标志清 ...

不是很理解 标识 但是我第一段就是按下了ON  变量N=20 下面的一段是 当N>0时才可以工作 通过UP 和DOWN 来控制N的变化 ,但是怎样才能在N>0的情况下再次按下ON  让N=0呢?
  因为开始N=0 按下ON后 N>0了 这个时候和最后的ON操作就冲突了 然后输出就一直闪烁 然后N就=0了然后UP和DOWN就没办法工作了 删掉最后一段 可以工作 但是不能关
回复 支持 反对

使用道具 举报

发表于 2015-7-22 15:57:43 | 显示全部楼层
feixiang04 发表于 2015-7-21 20:14
不是很理解 标识 但是我第一段就是按下了ON  变量N=20 下面的一段是 当N>0时才可以工作 通过UP 和DOWN 来 ...

因此,你将两件事搅在一块了,有一个ON键,他负责ON或OFF,另外两个是UP,DOWN,这两个件只有在ON状态发生作用,否则无效,ON/OFF键不管UP,Down在什么状态可以强制开关。这个是否你要的逻辑?可以将思路捋一下,否则程序会乱的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-22 19:36:49 | 显示全部楼层
林定祥 发表于 2015-7-22 15:57
因此,你将两件事搅在一块了,有一个ON键,他负责ON或OFF,另外两个是UP,DOWN,这两个件只有在ON状态发生 ...

是的 就是这个逻辑
回复 支持 反对

使用道具 举报

发表于 2015-7-23 09:59:03 | 显示全部楼层
拿去,不用谢

#define  ONoff        4
#define  UP        5
#define  DOWN        6
#define  Dimmer       13
byte b,b1, b2,b3;
bool flag=0;
int brightness =0;
void setup()
{
pinMode(ONoff , INPUT);
pinMode(UP , INPUT);
pinMode(DOWN , INPUT);
pinMode(Dimmer , OUTPUT);

          b1 = digitalRead(ONoff );
        b2 = digitalRead(UP);
        b3 = digitalRead(DOWN);
}

void loop()
{
  //key ONoff
b = digitalRead(ONoff);
if (b != b1) {
flag=!flag;
while(!digitalRead(ONoff));
}
//lamp is on
if(flag==1)
{
//key UP
  b = digitalRead(UP);
if (b != b2) {
brightness ++;
  while(!digitalRead(UP));
}
//key DOWN
  b = digitalRead(DOWN);
if (b != b3) {
brightness --;
  while(!digitalRead(DOWN));
}
//set brightness 0-255
if(brightness>255)
{
brightness=255;
}
if(brightness<0)
{
brightness=0;
}
analogWrite(Dimmer, brightness);
}
if(flag==0)
{
digitalWrite(Dimmer,LOW);//lamp off
}
}
  
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 19:57 , Processed in 0.036112 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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