Arduino拥有非常丰富的外接传感器。这一章节,我们将介绍感知型传感器。感知型传感器很多,按钮、温湿度监测、霍尔传感器等等都属于这一类。本文选择按钮开关来进行说明,希望大家学习之后,能够举一反三,掌握好其他本类型传感器的使用方法。
我们常用开关
来控制Arduino开发板上其他外接硬件的通断。比如,一盏LED灯,硬件上最好有个开关,按一下开关,就让LED灯亮,再按一下开关,就让LED灯关闭。
按钮开关只有开
和关
两种状态,因此,我们通过Arduino获取到的是典型的数字信号。
开关的外形有多种式样,但原理都是相同的。对于按钮开关的具体设计,需要使用到《电子技术基础》这门课的内容。我们可以使用Arduino配套的面包板、连线、电阻等元器件自己搭建。如果你对上述知识缺乏储备,或者觉得麻烦,那么就可以选用现成的,已经封装好的元器件。它简化了外围电路的设计,很适合对硬件缺乏深入认识的软件开发者。
这里我们选用使用最方便的三引脚按钮开关。
由此也可以发现,使用Arduino对我们掌握跨课程的知识也是非常有帮助的,你可以借由此道,开始深入研究电路的搭建,并且有非常完善的验证环境。这部分向硬件电路深入的内容,我们会在以后的章节展开介绍。
4.1 硬件连接
三引脚按钮开关的引脚对应如下,
含义 | 引脚位置 | 连接 | 开发板引脚 |
---|---|---|---|
控制 | S | <—> | D10 |
VCC | 电源 | <—> | 5V |
接地 | GND | <—> | GND |
在实际的使用当中,按钮开关也可能连接到扩展板上。例如这里将按钮开关连接到10组扩展口上,
含义 | 引脚位置 | 连接 | 扩展板引脚 |
---|---|---|---|
控制 | S | <—> | 10组S |
VCC | 电源 | <—> | 10组V |
接地 | GND | <—> | 10组G |
4.2 控制代码
首先我们初始化引脚。这个引脚是用来读取连接其上的数据的,所以对开发板来讲它是个输入引脚-INPUT
;按钮使用的是D10,所以就要初始化D10为输入引脚,
int BUTTON_PIN = 10;
void setup() {
//D10是作为输入使用的引脚
pinMode(BUTTON_PIN, INPUT);
Serial.begin(9600);
}
这里在初始化按钮引脚的同时,我们也设置好了的串口波特率,用来进行调试。
每按一次按钮,都会触发按下
和松开
两个响应,也就是说,按钮按下后会自动弹起,不会保持被按下的状态。通过查阅按钮器件的说明文档,我们发现:
- 当按下开关按钮的时候,
S引脚
会变成LOW
电平; - 当松开开关按钮的时候,
S引脚
会变成HIGH
电平;
所以当出现了这两个变化的时候,才能判断按钮被按下并抬起了一次。
采用digitalRead()
读取按钮对应引脚的电平,判断它当前是否被按下,
//初始情况下,按钮是没有按下的,所以是HIGH电平
int oldButtonState = HIGH;
void loop() {
//读取开关引脚的电平,判断当前是否被按下
int buttonState = digitalRead(BUTTON_PIN);
//当前被按下(LOW),之前没有被按下(HIGH),
//说明使用者按下了按钮
if(buttonState == LOW && oldButtonState == HIGH)
{
Serial.println("button press down");
oldButtonState = buttonState;
}
//当前没有被按下(HIGH),之前被按下(LOW),
//说明使用者松开了按钮
if(buttonState == HIGH && oldButtonState == LOW)
{
Serial.println("button press up");
oldButtonState = buttonState;
}
}
4.3 查看结果
把以上代码部署到设备上,打开串口调试窗口,按下并松开开关,可以看到类似如下输出信息,
4.4 其他传感器数字信号的读取
按钮的数字信号获取就是这样简单,很多传感器也是使用的类似的方法进行数据的读取,比如水银开关、霍尔传感器等等。
在Arduino众多的感知型传感器中,如果是这种共性很大的传感器,我们一般就不再一一详细的介绍了。对于一些用法特殊的传感器才会专门开启章节详细介绍。
接下来,请按照本文的案例,模仿连线,获取到这些传感器的数据吧。