极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 弘毅

arduino学习笔记6 - 按键实验

  [复制链接]
发表于 2011-10-27 21:59:54 | 显示全部楼层
模拟引脚 跟 数字引脚 做开关引脚 哪种方案更好呀。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-10-28 14:19:53 | 显示全部楼层
hunduncn 发表于 2011-10-27 21:59
模拟引脚 跟 数字引脚 做开关引脚 哪种方案更好呀。

如果只是开,关,不需要对电压进行判断,那数字引脚做开关好
回复 支持 反对

使用道具 举报

发表于 2011-11-2 16:55:31 | 显示全部楼层
弘毅 发表于 2011-7-10 13:12
这个现象很有可能是和arduino控制板中使用的电容有关,如果有电容,电容充满电以后,就算电源消失,电量 ...

嗯  是的  我做的是 用数字引脚  
也发现这样的问题    当用数字引脚出来的线  点一下5V的输出电压处  马上移开 LED可以亮更长时间
回复 支持 反对

使用道具 举报

发表于 2011-11-2 16:58:01 | 显示全部楼层
偶是谁 发表于 2011-7-10 17:52
补上:好像数字IO口开关应用不存在这种问题

有的 同样存在
回复 支持 反对

使用道具 举报

发表于 2011-11-4 19:25:42 | 显示全部楼层
按键实验  对空气湿度好像也有要求
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-11-4 20:29:27 | 显示全部楼层
wen 发表于 2011-11-4 19:25
按键实验  对空气湿度好像也有要求

我对帖子进行了补充,下拉电阻后,干扰问题就没有了。
回复 支持 反对

使用道具 举报

发表于 2011-11-5 00:47:08 | 显示全部楼层
弘毅 发表于 2011-11-4 20:29
我对帖子进行了补充,下拉电阻后,干扰问题就没有了。

补充很给力 学到很多  {:3_59:}
回复 支持 反对

使用道具 举报

发表于 2011-12-2 21:53:17 | 显示全部楼层
  飘啊飘啊飘···
回复 支持 反对

使用道具 举报

发表于 2011-12-14 20:42:57 | 显示全部楼层
"analogRead()作用是读取模拟口的数值。"它读取的电压值是开关两端的电压吗?
为什么按下开关电压值会大于4.88V,而断开开关读取电压小于4.88V?
我对板上构件不是很了解。
回复 支持 反对

使用道具 举报

发表于 2011-12-14 21:26:09 | 显示全部楼层
analogRead读取的值是不是该pin端口与GND之间的电压值
回复 支持 反对

使用道具 举报

发表于 2012-2-8 20:42:17 | 显示全部楼层
如果我想加多一個BUTTON和一個OUTPUT的話
應該怎寫?
int Button=3;
int Button2=2;
int OUT=11;
int OUT2=12;
boolean onoff=LOW;
boolean onoff2=LOW;
void setup()
{
  pinMode(Button2,INPUT); //按钮端子作为输入
  pinMode(Button,INPUT);
  pinMode(OUT,OUTPUT);
  pinMode(OUT2,OUTPUT);
}
void loop()
{

  if(digitalRead(Button2)==LOW)  //由于本例检测上升沿触发,所以先检测输入是否低电平,
  {
    delay(10); //然后延时一段时间,
    if(digitalRead(Button2)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
    {
      digitalWrite(OUT2,onoff2);  //写入当前LED状态onoff,
      onoff2=(!onoff2); //然后LED状态反转,以便下一次使用。
      delay(10);  //延时一段时间,防止按钮突然断开再按下。
      while(digitalRead(Button2)==HIGH) //判断按钮状态,如果仍然按下的话,等待松开。防止一直按住导致LED输出端连续反转
      {
        delay(1);
      }
    }
  }
  if(digitalRead(Button)==LOW)  //由于本例检测上升沿触发,所以先检测输入是否低电平,
  {
    delay(10); //然后延时一段时间,
    if(digitalRead(Button)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
    {
      digitalWrite(OUT,onoff);  //写入当前LED状态onoff,
      onoff=(!onoff); //然后LED状态反转,以便下一次使用。
      delay(10);  //延时一段时间,防止按钮突然断开再按下。
      while(digitalRead(Button)==HIGH) //判断按钮状态,如果仍然按下的话,等待松开。防止一直按住导致LED输出端连续反转
      {
        delay(1);
      }
    }
  }
}
我這樣寫發現有DELAY
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-8 21:54:48 | 显示全部楼层
iamted 发表于 2012-2-8 20:42
如果我想加多一個BUTTON和一個OUTPUT的話
應該怎寫?
int Button=3;

用delayMicroseconds()替代delay()试试
回复 支持 反对

使用道具 举报

发表于 2012-3-13 22:10:23 | 显示全部楼层
为什么我按照上面的步骤弄了以后LED灯一直亮?
回复 支持 反对

使用道具 举报

发表于 2012-4-7 17:03:26 | 显示全部楼层
本帖最后由 Jahg 于 2012-4-7 17:04 编辑
iamted 发表于 2012-2-8 20:42
如果我想加多一個BUTTON和一個OUTPUT的話
應該怎寫?
int Button=3;


int kaiguan=12;//连接开关到IO12
int LED=3;//连接LED到3
int onoff=0;//设定一个变量用于记录开关被按下了偶数还是奇数次,按一次,为奇数次,=1;两下就是偶数次,=0
void setup(){
  pinMode(kaiguan,INPUT);
  pinMode(LED,OUTPUT);
}
void loop(){
    if(digitalRead(kaiguan)==LOW){
      delay(10);
      if(digitalRead(kaiguan)==HIGH){
       if (onoff==0)
       onoff=1;
       else onoff=0;//记录开关被按下的次数部分
      }
    }  
if(onoff==0)
digitalWrite(LED,HIGH);
else digitalWrite(LED,LOW);//根据到底按了多少下确定到底是点亮LED还是熄灭
}


代码我修改了一下,测试发现很稳定。(注意io口有改过)
回复 支持 反对

使用道具 举报

发表于 2012-4-13 15:58:05 | 显示全部楼层
还好 点亮了
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 15:11 , Processed in 0.044245 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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