数字读取串口
这个例子展示怎样通过创建开发板和电脑的串口通讯监视开关状态
硬件要求
- Arduino UNO
- 瞬时开关, 按钮, 或者切换开关
- 10k ohm 电阻
- 连接线
- 面包板
电路
- 连接3根线到开发板。最开始两根,红和黑,连接到面包板上的两个长垂直行来提供5V电源电压和地。第三根线从数字引脚pin2连接到按钮的一个引脚。按钮的同一个引脚连接下拉电阻(10k ohm)到地。按钮的另一个引脚连接到5V电源。
- 按钮或者开关连接电路的两点。按钮是断开的(未按),按钮两个引脚是没有接通的,所以这个引脚连接到地(通过一个下拉电阻),读取为低电平或者0。当如果按钮是闭合的(未按),按钮两个引脚是接通的,所以这个引脚连接到5V,读取为高电平,或者1。
- 如果你没有连接到数字I/O口到任何地方,LED灯可能会不规则闪烁。这是因为输入引脚处于悬浮状态——它没有固定连接到电源或者地,并且它会随机在高电平和低电平之间切换。这是你需要下拉电阻的原因。
原理图
样例代码
在下面程序里,最先做的事是在你的开发板和电脑之间建立串口通讯,波特率为9600 bits:
Serial.begin(9600);
然后,初始化数字引脚pin2,因为你要读取按钮的输出,所以这个作为输入引脚:
pinMode(2,INPUT);
现在初始化完成了,移入你代码的主循环里。当按钮被按下,5V电压会流过你的电路,而当它没有被按下,这个输入引脚就会链接到通过10k ohm电阻连接到地。这是数字输入,意味着开关只有开(1,或者高电平)和关(0,或者低电平)的状态,中间什么都没有。
在主循环里最先做的事创建一个变量来保存来自开关的信息。因为这部分的信息是“1”或者“0”,所以你可以用int数据类型。调用变量的感应值,然后使它赋值给数字引脚pin2。你可以用下面一句代码来完成上面步骤:
int sensorValue = digitalRead(2);
一旦开发板读取输入引脚,把其信息作为一个值打印到电脑。你可以用Serial.println()来完成这个步骤:
Serial.println(sensorValue);
现在,当你打开Arduino IDE的串口监视器,你会看见“0”的数据流(如果开关打开)或者“1”的数据流(如果开关闭合) ```c / 数字读取练习-1 JLHS-Arduino与智能设计选修课 示例程序 2021.3.16 / int Button = 2;//定义一个全局变量Button,赋值为2脚
void setup() { Serial.begin(9600);//初始化串口 pinMode(Button,INPUT);//将按键配置为输入模式 }
void loop() { int buttonState = digitalRead(Button);//定义一个局部变量buttonSate,用于记录按键状态,将数字读取的值赋给该变量 Serial.println(buttonState);//通过串口打印按键状态 delay(10);//每个10毫秒运行一次 }
- 现在,让我们用按键的状态来控制LED灯的亮灭。
```c
/*
数字读取练习-2(控制板载LED灯的亮灭)
JLHS-Arduino与智能设计选修课
示例程序
2021.3.16
*/
int Button = 2;//定义一个全局变量Button,赋值为2脚
int ledPin = 13;//定义一个全局变量ledPin,赋值为13脚
void setup() {
Serial.begin(9600);//初始化串口
pinMode(Button,INPUT);//将按键配置为输入模式
pinMode(ledPin,OUTPUT);//将LED配置为输出模式
}
void loop() {
int buttonState = digitalRead(Button);//定义一个局部变量buttonSate,用于记录按键状态,将数字读取的值赋给该变量
Serial.println(buttonState);//通过串口打印按键状态
delay(10);//每个10毫秒运行一次
if(buttonState == HIGH){
digitalWrite(ledPin,HIGH);
}
else{
digitalWrite(ledPin,LOW);
}
}