极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20206|回复: 13

如何用循环记录按下按钮的次数?

[复制链接]
发表于 2014-3-12 18:25:55 | 显示全部楼层 |阅读模式
我想达到的目的是;
按一次开关按钮,灯亮
再按一次开关按钮,灯灭
如此重复

用for循环如何实现?
digitalRead只能有HIGH 或者LOW
怎么用数字来表示?利用循环加一。。。
新手迷茫中
回复

使用道具 举报

发表于 2014-3-12 19:42:06 | 显示全部楼层
引入一个变量    存储digitalRead的状态   用if判断这个变量的状态
回复 支持 反对

使用道具 举报

发表于 2014-3-12 21:20:11 | 显示全部楼层
int 循环=1;
while (循环 == 1) //无条件循环
{
//读按键
if (按键==按下)
{
  灯 = 翻转( 灯 )//
}
if (需要不循环了) {循环=0} //下次while 就不执行了
} // while 会一直循环
回复 支持 反对

使用道具 举报

发表于 2014-3-12 21:34:22 | 显示全部楼层
shihaipeng04 发表于 2014-3-12 21:20
int 循环=1;
while (循环 == 1) //无条件循环
{

soga  其实我想说  网站教程里面有
http://www.geek-workshop.com/thread-1048-1-1.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-13 00:28:36 | 显示全部楼层
____消失灬 发表于 2014-3-12 21:34
soga  其实我想说  网站教程里面有
http://www.geek-workshop.com/thread-1048-1-1.html

哥们。。。我知道这个。。。但与我想达到的明显不同。。。
回复 支持 反对

使用道具 举报

发表于 2014-3-13 01:46:46 | 显示全部楼层
____消失灬 发表于 2014-3-12 21:34
soga  其实我想说  网站教程里面有
http://www.geek-workshop.com/thread-1048-1-1.html

我觉得楼主完全忽视了我的回复。看来和他沟通比较困难了。

哦我忘了在 灯翻转后面加一句,计数器+0.5了
回复 支持 反对

使用道具 举报

发表于 2014-3-13 08:29:26 | 显示全部楼层
哦  那个发错  应该发这个的    那个得稍微改一下
http://www.geek-workshop.com/thread-1983-1-1.html  
回复 支持 反对

使用道具 举报

发表于 2014-3-13 08:38:18 | 显示全部楼层
你试试这个代码吧
int pbIn = 2;          // 定义输入信号引脚
int ledOut = A0;        // 定义输出指示灯引脚
int state = LOW;       // 定义默认输入状态
 
void setup()
{                
  // 设置输入信号引脚为输入状态、输出引脚为输出状态
  pinMode(pbIn, INPUT);
  pinMode(ledOut, OUTPUT);
}
 
void loop()                     
{
  state = digitalRead(pbIn);      //读取微动开关状态
 
  digitalWrite(ledOut, state);    //把读取的状态赋予LED指示灯
}
回复 支持 反对

使用道具 举报

发表于 2014-3-13 08:38:48 | 显示全部楼层
shihaipeng04 发表于 2014-3-13 01:46
我觉得楼主完全忽视了我的回复。看来和他沟通比较困难了。

哦我忘了在 灯翻转后面加一句,计数器+0.5了 ...

嘿嘿   还是给他写出来吧
回复 支持 反对

使用道具 举报

发表于 2014-3-13 11:15:17 | 显示全部楼层
int pbIn = 2;          // 定义输入信号引脚
int ledOut = A0;        // 定义输出指示灯引脚
int state = LOW;       // 定义默认输入状态

void setup()
{               
  // 设置输入信号引脚为输入状态、输出引脚为输出状态
  pinMode(pbIn, INPUT);
  pinMode(ledOut, OUTPUT);
}

int counter=0;//记录次数
byte m=0;//暂存状态

void loop()                     
{
  state = digitalRead(pbIn);      //读取微动开关状态

  if(state==1){//按下按钮
  if(m==0){
digitalWrite(ledOut, HIGH);    //点亮
m=1;
}else{
digitalWrite(ledOut, LOW);    //灭
m=0;
}

counter++;//记录按钮次数

delay(500);

}



}
回复 支持 反对

使用道具 举报

发表于 2014-3-13 14:46:48 | 显示全部楼层
  1. int count = 0;
  2. void setup ()
  3. {
  4.   pinMode(4,INPUT);                 
  5.   pinMode(13,OUTPUT);
  6. }
  7. void loop()
  8. {
  9.   int n =digitalRead(4);                  
  10.   if (n==HIGH)                           
  11.   {
  12.     delay(1000);
  13.     digitalWrite(13,HIGH);
  14.     delay(5000);
  15.     digitalWrite(13,LOW);
  16.     count++;
  17. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-13 23:56:32 | 显示全部楼层
shihaipeng04 发表于 2014-3-13 01:46
我觉得楼主完全忽视了我的回复。看来和他沟通比较困难了。

哦我忘了在 灯翻转后面加一句,计数器+0.5了 ...

不是...只不过似乎用循环很麻烦。。。
回复 支持 反对

使用道具 举报

发表于 2014-3-14 10:44:28 | 显示全部楼层
enzotim 发表于 2014-3-13 23:56
不是...只不过似乎用循环很麻烦。。。

这也不应该用循环啊,循环的过程里不知道人什么时候会按下按钮,也许1秒,也许1年,程序怎么循环呢?这应该是事件驱动。面向对象都喊了10几年了,这才刚把goto给消灭掉。任重道远啊。
回复 支持 反对

使用道具 举报

发表于 2014-3-14 10:57:18 | 显示全部楼层
shihaipeng04 发表于 2014-3-14 10:44
这也不应该用循环啊,循环的过程里不知道人什么时候会按下按钮,也许1秒,也许1年,程序怎么循环呢?这应 ...

只是太业余了,总有新手的
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-13 22:30 , Processed in 0.044176 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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