Oh!Coder

Coding Life

好玩的Arduino-抛弃外部电阻!

| Comments

Hi,大家好!前两次呢,我们一起学习了按键开关的基本使用。在每一次的电路连接过程中,我们每次都需要额外连接一个10k欧姆大小的电阻。话说如果只是想学习一下按键开关,就不得不需要额外再连接一个电阻,总觉得有点繁琐,能不能去掉这个电阻呢?可喜可贺!答案是肯定的!

好!废话不多啰嗦!让我们直奔主题,看看是如何去掉那个电阻的!

首先,还是要我们做准备一下。

硬件方面

arduino-no-resistor-parts

图片来源:Arduino电路配件

具体包括如下:

  • Arduino UNO电路板(1块)
  • 面包板(1块)
  • 按键开关(1个)
  • 面包线(2根)

看!这次果然抛弃了电阻,还省了一根儿面包线,只用了两根。测试用的LED神灯,还是用Arduino UNO电路板自带的那盏。关于Arduino UNO电路板自带的这盏LED神灯,这里就不再次赘述了。印象模糊的同学,可以翻看前两次的实验记录。

软件方面

Arduino官方提供的IDE。

连接电路

arduino-no-resistor

图片来源:Arduino连接开关按键电路示意图

对于类似电路的连接,都是轻车熟路了吧?!这次更是简单,只剩下了一个开关按键,真的是连电阻都没有啦!下面进行最后一步!

添加几行代码

首先还是让我们新建一个项目窗口。

arduino-ide-new

图片来源:Arduino官方IDE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 对Arduino电路板或相关状态进行初始化方法
void setup() {
  // 开启串行通信,并设置其频率为9600。
  // 如果没有特别要求,此数值一般都为9600。
  Serial.begin(9600);
  // 配置2号针脚为输入状态,
  // 并设置使用内部上拉电阻。
  pinMode(2, INPUT_PULLUP);
  // 定义LED输入针脚号为13号针脚。
  // 注:此处我们使用的LED神灯是Arduino UNO电路板自带,
  // 此神灯对应的针脚号默认为13,此数值不得随意更改,
  // 所以这里定义的数值13是为了和默认值相对应。
  pinMode(13, OUTPUT);
}
// 系统调用,无限循环方法
void loop() {
  // 读取2号针脚上的输入信号的数值
  int sensorVal = digitalRead(2);
  // 为了更直观的看到2号针脚输入的信号值,
  // 将获取到的数值打印到串行调试窗口,方便调试。
  Serial.println(sensorVal);
  // 如果获取到的数值为HIGH(数值大小等于1),
  // 则向13号针脚发送LOW信号(数值大小等于0),熄灭LED神灯,
  // 反之则发送HIGH信号(数值大小等于1),点亮LED神灯。
  if (sensorVal == HIGH) {
    digitalWrite(13, LOW);
  } else {
    digitalWrite(13, HIGH);
  }
}

好!一共只有十几行代码,就这些!这里面只出现了一个新面孔,那就是INPUT_PULLUP。在之前的学习中,我们一直使用的是PULLUP,还有印象吗?这里我们换成了INPUT_PULLUP,然后我们就可以少用一个外部电阻!这是为什么呢?原因是因为当我们将其设置成INPUT_PULLUP,此时我们就启用了Arduino UNO电路板上处理器本身自带的上拉电阻(英文名为:Pull-up resistors)。此处的上拉电阻可以简单理解为,在2号针脚和电源之间插入了一个固定数值大小的电阻,这个固定数值大小的电阻是由Arduino UNO电路板提供的,其实现的功能和连接一个外部电阻是一样一样的。

使用这个内部电阻还有一点需要注意,那就是它会将按键的输入状态取反。也就是说,当按键断开的时候,输入为HIGH,也就是数值为1,按键按下的时候,输入为LOW,也就是数值为0。这也是为什么我们会在代码的第70行进行一次if判断,并将输入状态重新调整过来的原因。

arduino-menu

图片来源:Arduino官方IDE的文件编辑菜单选项

OK!点击一下上图中标有向右指向的箭头图标,将编写好的代码烧入Arduino UNO电路板。如果一切顺利,此时就可以通过按下按键,让LED神灯点亮,松开按键,LED神灯熄灭。同时,你还可以点击上图中最右边的放大镜图标,打开串口调试窗口,查看实时的按键输出状态。

arduino-serial

图片来源:Arduino串口调试窗口

每次按下按键或松开按键,都可以从串口调试窗口中实时看到按键的输入数值。

总结

通过这次学习,我们知道了如何调用Arduino UNO自带的内部上拉电阻,还了解到此上拉电阻会按键开关的输入状态进行取反。通过使用内部的上拉电阻,我们在使用开关按键的时候可以少连接一个外部电阻,将电路的连接变的更简单。但相应的代价是,要将获取到的数值进行取反。

下期预告

经过这几次对按键开关的学习,我们对按键开关的使用已经有了初步的掌握。下一次,我们将过去几次的学习融合到一起,做一个小实验,在用按键开关控制LED神灯的同时,我们将试着记录按键开关的总按下次数!

Comments