风筝
发表于: 2016-6-13 09:59:06 | 显示全部楼层

读取数字信号(Digital Read Serial)

本示例展示了如何通过在Arduino或Genuino与计算机之间建立基于USB的串行通信来监测开关的状态。


所需硬件

-    Arduino或者Genuino开发板

-    一个瞬时开关、按键或拨动开关

-    10k欧电阻

-    导线

-    实验电路板


电路连接方式

button.png

将三根导线连接到开发板。前两根线(红色和黑色)连接到实验电路板侧面的两个竖长的行排列,以接入5V电源和地。第三根导线从数字引脚2连接到按键的一个引脚。该按钮的同一个引脚通过下拉电阻(这里使用的是10k欧)连接到地。按键的另一个引脚连接到5V电源。


按键或开关在按下时连接电路中的两个点。当按钮处于开路状态(未按下)时,按键的两个引脚之间没有连接,所以该引脚连接到地(通过下拉电阻),并且读取时为低电平,或者0。当按键关闭(按下)时,两个引脚短接,使得该引脚连接到5V,因此读取时为高电平,或者1。


如果您断开数字I/O引脚的所有连接时,LED会无规律的闪烁。这是因为输入引脚处于悬浮状态,也就是说该引脚与电源或地之间没有固定的连接,并且会随机返回高电平或低电平。这就是为什么在电路中需要下拉电阻。


原理图

button_sch.png


代码

在下面的示例程序中,你需要在Setup()函数中做的第一件事是在开发板和计算机之间建立串行通信,波特率为9600,使用以下代码:

  1. Serial.begin(9600);
复制代码


接下来,初始化数字引脚2,该引脚将会读取按键的输出状态,作为输入信号。

  1. pinMode(2,INPUT);
复制代码


现在,已经完成设置,转到代码的主循环。当按键按下时,5V将会顺利的流过电路;当按键未按下时,输入引脚通过10k电阻连接到地。该引脚是数字输入信号,也就是说按键只能处于关闭状态(在Arduino可以看做是1,或高电平)或者是开路状态(在Arduino可以看做是0,或低电平),并且没有任何中间状态。


在程序的主循环中要做的首件事是创建一个变量,来保存从按键读取的状态。由于按键读取的信号只能是1或是0,可以定义一个int数据类型。将该变量称为sensorValue,并将其设置成等于从数字引脚2读取的值。可以使用以下代码实现这些:

  1. int sensorValue = digitalRead(2);
复制代码


当开发板读取输入信号完成后,将该信号以十进制的格式输出到计算机。可以使用代码中的最后一行Serial.println()函数来实现。

  1. Serial.println(sensorValue);
复制代码


现在,当打开Arduino IDE上的串口监视器时,如果开关处于开路,你就会看到一串的0;如果开关处于闭合时,你就会看到一串的1。

  1. /*
  2.   DigitalReadSerial
  3. Reads a digital input on pin 2, prints the result to the serial monitor

  4. This example code is in the public domain.
  5. */

  6. // digital pin 2 has a pushbutton attached to it. Give it a name:
  7. int pushButton = 2;

  8. // the setup routine runs once when you press reset:
  9. void setup() {
  10.   // initialize serial communication at 9600 bits per second:
  11.   Serial.begin(9600);
  12.   // make the pushbutton's pin an input:
  13.   pinMode(pushButton, INPUT);
  14. }

  15. // the loop routine runs over and over again forever:
  16. void loop() {
  17.   // read the input pin:
  18.   int buttonState = digitalRead(pushButton);
  19.   // print out the state of the button:
  20.   Serial.println(buttonState);
  21.   delay(1);        // delay in between reads for stability
  22. }
复制代码




跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1482



手机版|

GMT+8, 2024-4-30 17:12 , Processed in 0.072643 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

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