小白求助 两个程序放一起就不能用呢
今天在研究一个按键开关 两个按键调亮度 但是怎么都不行改了无数次献丑求解
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 亮度减小 大概第一段没有解决开关的问题,程序中只有开,没有关的程序,可以初始化一个标志为,在第一段判断下,原来标志清零了有按键就按开处理,同时标志位置1,有按键如果标志位为1,那就清n同时清标志位. 林定祥 发表于 2015-7-21 14:43 static/image/common/back.gif
大概第一段没有解决开关的问题,程序中只有开,没有关的程序,可以初始化一个标志为,在第一段判断下,原来标志清 ...
不是很理解 标识 但是我第一段就是按下了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 14:43 static/image/common/back.gif
大概第一段没有解决开关的问题,程序中只有开,没有关的程序,可以初始化一个标志为,在第一段判断下,原来标志清 ...
不是很理解 标识 但是我第一段就是按下了ON变量N=20 下面的一段是 当N>0时才可以工作 通过UP 和DOWN 来控制N的变化 ,但是怎样才能在N>0的情况下再次按下ON让N=0呢?
因为开始N=0 按下ON后 N>0了 这个时候和最后的ON操作就冲突了 然后输出就一直闪烁 然后N就=0了然后UP和DOWN就没办法工作了 删掉最后一段 可以工作 但是不能关 feixiang04 发表于 2015-7-21 20:14 static/image/common/back.gif
不是很理解 标识 但是我第一段就是按下了ON变量N=20 下面的一段是 当N>0时才可以工作 通过UP 和DOWN 来 ...
因此,你将两件事搅在一块了,有一个ON键,他负责ON或OFF,另外两个是UP,DOWN,这两个件只有在ON状态发生作用,否则无效,ON/OFF键不管UP,Down在什么状态可以强制开关。这个是否你要的逻辑?可以将思路捋一下,否则程序会乱的。 林定祥 发表于 2015-7-22 15:57 static/image/common/back.gif
因此,你将两件事搅在一块了,有一个ON键,他负责ON或OFF,另外两个是UP,DOWN,这两个件只有在ON状态发生 ...
是的 就是这个逻辑 拿去,不用谢
#defineONoff 4
#defineUP 5
#defineDOWN 6
#defineDimmer 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
}
}
页:
[1]