极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18880|回复: 8

OCROBOT入门教程009--按键控制多LED

[复制链接]
发表于 2014-4-24 19:36:45 | 显示全部楼层 |阅读模式
本帖最后由 董董soul 于 2016-10-27 10:53 编辑

上节课我们学习了怎样获取数字信号输入,在日常使用中我们会大量使用到微动开关,判断一个开关是否是按住通常都是获取其输入的数字信号。

这节课我们学习一下微动开关的使用,使用微动开关来控制多个LED。

下图这种就是一个微动开关,AB两侧默认是断开的,当你按下去后,断开的引脚会接通,按下去不需要很大的力气,行程也很短。

A侧与B侧各有两个引脚,这两个引脚不论什么时候都是连通的。

我们按照多LED闪烁课程的接法,在D2-D7接6颗LED,然后在D10接口连接微动开关。


大家有没有发现,微动开关连接D10引脚的那一侧,我们同时也接了一个电阻连接到了5V。为什么要这样子接呢?
这样子接的主要作用是在微动开关没有按下的时候,判断微动开关是否按下的D10端口一直保持一个高电平状态,这样子就不会由于空气中电磁波干扰而产生误触发,这种接法也叫做上拉。




  1. #define button_pin 10
  2. int num=1;
  3. void setup() {
  4.   for(int i=2;i<8;i++) //初始化D2-D7为输出状态
  5.   {
  6.     pinMode(i,OUTPUT);
  7.     digitalWrite(i,HIGH);
  8.   }
  9.   pinMode(button_pin,INPUT);
  10. }

  11. void loop() {
  12.   if(digitalRead(button_pin)==LOW)
  13.   {
  14.     delay(5);
  15.     if(digitalRead(button_pin)==LOW)
  16.     {
  17.       num+=1;
  18.       if(num>2)
  19.       {
  20.         digitalWrite(num-1,HIGH);
  21.       }
  22.       if(num>7)
  23.       {
  24.         num=2;
  25.       }
  26.       digitalWrite(num,LOW);
  27.     }
  28.   }
  29.   delay(100);
  30. }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-10-10 17:51:19 | 显示全部楼层
强哥 什么是上拉? 不好理解
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-11 21:02:35 | 显示全部楼层
dtiger2014 发表于 2014-10-10 17:51
强哥 什么是上拉? 不好理解

上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。
回复 支持 反对

使用道具 举报

发表于 2015-2-5 13:28:45 | 显示全部楼层
请问LED一脚接在5V上,不接GRD,这样做的好处是什么?
回复 支持 反对

使用道具 举报

发表于 2015-2-5 21:05:32 | 显示全部楼层
若IO口输出高电平点亮LED,则多个LED同时亮时会超出Atmega328P的最大输出电流,印象中是40mA 吧。
回复 支持 反对

使用道具 举报

发表于 2016-4-11 02:55:45 | 显示全部楼层
本帖最后由 lglfa 于 2016-4-11 02:56 编辑

我只连了一个LED,其余的接法都是一样的,想让它按一下亮起来,再按一下灭掉。但是老是不稳定,有时候得按好几下才可以,然后程序如下:楼主帮看看程序有错么,多谢了
  1. #define button_pin 10
  2. int num=1;
  3. void setup() {
  4.       pinMode(2,OUTPUT);
  5.     digitalWrite(2,HIGH);
  6.   pinMode(button_pin,INPUT);
  7. }

  8. void loop() {
  9.   if(digitalRead(button_pin)==LOW)
  10.   {
  11.     delay(5);
  12.     if(digitalRead(button_pin)==LOW)
  13.     {
  14.       num+=1;
  15.       if(num>2)
  16.       {
  17.         digitalWrite(num-1,HIGH);
  18.       }
  19.       if(num>3)
  20.       {
  21.         num=2;
  22.       }
  23.       digitalWrite(num,LOW);
  24.     }
  25.   }
  26.   delay(50);
  27. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-11 10:46:48 | 显示全部楼层
lglfa 发表于 2016-4-11 02:55
我只连了一个LED,其余的接法都是一样的,想让它按一下亮起来,再按一下灭掉。但是老是不稳定,有时候得按好 ...

需要做消抖
回复 支持 反对

使用道具 举报

发表于 2017-2-16 19:45:25 | 显示全部楼层
为什么按键按下去之后,四个都连通了之后,它会是LOW而不是HIGH。按键下去并没有改变它原来的电路,只是又多了一条接地的线路吧。为什么他就变了呢?
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-21 00:23 , Processed in 0.052573 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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