请教个问题:为什么不能控制灯的开灭呢?-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9532|回复: 10

[已解决] 请教个问题:为什么不能控制灯的开灭呢?

[复制链接]
发表于 2013-2-22 13:14 | 显示全部楼层 |阅读模式
我想用点触开关控制pwm灯的 开始与暂停
就是不行也?

用的uno r3

代码如下:

#define a 9
#define b 2
int i = 0;
int val = 0;
int oval = 0;
int d = 0;
void setup()
{
  pinMode(a,OUTPUT);
  pinMode(b,INPUT);
  Serial.begin(9600);
}
void loop()
{
  val=digitalRead(b);
  if ((val==HIGH)&&(oval==LOW))
  {
    d = 1 - d;
    delay(10);
  }
  oval = val;
  Serial.println(d);
  if (d==0)
  {
   for(i=0;i<=255;i++)
  {
   analogWrite(a,i);
  delay(3);
  }
for(i=255;i>=0;i--)
  {
    analogWrite(a,i);
   delay(3);
  }
  }
  else
{
  analogWrite(a,0);
  }
}
发表于 2013-2-22 19:30 | 显示全部楼层
电路怎么接的?
 楼主| 发表于 2013-2-22 21:04 | 显示全部楼层
奈何col 发表于 2013-2-22 19:30
电路怎么接的?

灯接d9和gnd(其中串联个电阻)  按键接d2和gnd  就只有这两个元件
发表于 2013-2-22 22:31 | 显示全部楼层
pinMode(b,INPUT);改成 pinMode(b,INPUT_PULLUP);
 楼主| 发表于 2013-2-22 23:17 | 显示全部楼层
本帖最后由 asdf3fdsa 于 2013-2-22 23:18 编辑
奈何col 发表于 2013-2-22 22:31
pinMode(b,INPUT);改成 pinMode(b,INPUT_PULLUP);


还是不行,灯直接pwm 按键不管用啊



#define a 9
#define b 2
int i = 0;
int val = 0 ;
int oval = 0;
int d = 0;
void setup()
{
  pinMode(a,OUTPUT);
  pinMode(b,INPUT_PULUP);
  Serial.begin(9600);
}
void loop()
{
  val=digitalRead(b);
  if ((val==HIGH)&&(oval==LOW))
  {
    d = 1 - d;
    delay(10);
  }
  oval = val;
  Serial.println(d);
  if (d==1)
  {
   for(i=0;i<=255;i++)
  {
   analogWrite(a,i);
  delay(3);
  }
for(i=255;i>=0;i--)
  {
    analogWrite(a,i);
   delay(3);
  }
  }
  else
{
  analogWrite(a,0);
  }
}
发表于 2013-2-22 23:43 | 显示全部楼层
digitalRead只是一瞬间的事,其他语句运行的时候,是没法检测的,懂否?
除非你长按按键,保证digitalRead时,能读到你的按键值;要么以别的方式来实现。具体怎么写,自己思考了。
发表于 2013-2-23 09:05 | 显示全部楼层
asdf3fdsa 发表于 2013-2-22 23:17
还是不行,灯直接pwm 按键不管用啊

我记得PULLUP之后数据是反向的,就是按下去是0,没按是1

点评

是的~  详情 回复 发表于 2013-2-23 09:53
发表于 2013-2-23 09:53 | 显示全部楼层
PPeach 发表于 2013-2-23 09:05
我记得PULLUP之后数据是反向的,就是按下去是0,没按是1

是的~
发表于 2013-2-23 14:21 | 显示全部楼层
提供一个类似例程,供楼主研究
[mw_shl_code=cpp,true]/*
OpenJumper Button Module
www.openjumper.com
*/

int pushButton = 2;
int led = 13;
boolean LedState=false;
boolean ButtonState=true;
void setup()
{
//初始化IO口
pinMode(pushButton, INPUT_PULLUP);
pinMode(led,OUTPUT);
}

void loop()
{
while(digitalRead(pushButton)==HIGH){}
//当按键按下时,点亮或熄灭LED
if(LedState==true)
{
digitalWrite(led,LOW);
LedState=!LedState;
}
else
{
digitalWrite(led,HIGH);
LedState=!LedState;
}
delay(500);
}
[/mw_shl_code]
发表于 2013-2-24 20:36 | 显示全部楼层
上面的按键程序的确是个不错的例子
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-3 03:10 , Processed in 0.116321 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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