arduino程序-逻辑控制(基础知识)
- 1-15 逻辑控制1-按键开关控制LED
- 效果演示
- 输入上拉模式电路
- 示例程序
- 1-16 逻辑控制2-布尔变量
- 逻辑表达式
- 改写程序(使用布尔运算)
- 程序上传及效果演示
- 回顾知识
- 1-17 逻辑控制3-布尔运算
- 效果演示
- 布尔运算符
- 逻辑与&&
- 逻辑与的电路
- 程序如下:
- 演示效果
- 逻辑或
- 逻辑非
1-15 逻辑控制1-按键开关控制LED
PinMode()将引脚设置为输入输出模式,还有上拉输入模式
示例:02digital,digitalInputPullup
效果演示
通过按键开关,控制arduino开发板引脚13的led灯显示,使用上拉输入模式(内置上拉电阻,与第1-10、11相同,防止导线直连)
当按下开关时,led点亮,抬起熄灭
之前的示例是外接上拉电阻(input模式),此处使用输入上拉模式(input-pullup)无外接上拉电阻
若其他的开发板无上拉电阻模式,需要自己搭建一个上拉电阻,否则会烧坏
输入上拉模式电路
一端连接2号引脚,一端连接开发板接地引脚
在没有按下按键时,引脚2通过内置的上拉电阻连接到高电平上
按下按键时,两端导通,引脚2连通导线接地GND,读取到低电平
示例程序
/*
Input Pull-up Serial
This example demonstrates the use of pinMode(INPUT_PULLUP). It reads a digital
input on pin 2 and prints the results to the Serial Monitor.
The circuit:
- momentary switch attached from pin 2 to ground
- built-in LED on pin 13
Unlike pinMode(INPUT), there is no pull-down resistor necessary. An internal
20K-ohm resistor is pulled to 5V. This configuration causes the input to read
HIGH when the switch is open, and LOW when it is closed.
created 14 Mar 2012
by Scott Fitzgerald
This example code is in the public domain.
输入上拉串行
此示例演示了pinMode(INPUT_PULLUP)的使用。它读数字
输入引脚2并将结果打印到串行监视器。
电路:
-瞬时开关从针脚2连接到接地点
-引脚13上的内置LED
与pinMode(输入)不同,不需要下拉电阻器。内部
20K欧姆电阻器被拉至5V。此配置导致输入读取
开关打开时为高,开关闭合时为低。
创建于2012年3月14日
斯科特·菲茨杰拉德
此示例代码位于公共域中。
http://www.arduino.cc/en/Tutorial/InputPullupSerial
*/
void setup() {
//start serial connection
//开始串口通讯
Serial.begin(9600);
//configure pin 2 as an input and enable the internal pull-up resistor
//将引脚2设置为输入上拉模式
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
}
void loop() {
//read the pushbutton value into a variable
//将开关状态数值(传感器数值类似开关的)读取到变量中
int sensorVal = digitalRead(2);
//print out the value of the pushbutton
//输出开关状态数值
Serial.println(sensorVal);
// Keep in mind the pull-up means the pushbutton's logic is inverted. It goes
// HIGH when it's open, and LOW when it's pressed. Turn on pin 13 when the
// button's pressed, and off when it's not:
//请留意在上拉模式下,按钮的逻辑状态是反的
//即:开关端口时引脚读取到高电平。开关被按下后引脚读取到低电平
//按钮被按下后,引脚13连接的LED将被点亮。按钮没有按下时LED熄灭
if (sensorVal == HIGH) { //按钮没有按下,读取的是高电平
digitalWrite(13, LOW); //13引脚,输出低电平,熄灭
} else { //按钮按下
digitalWrite(13, HIGH); //13引脚,输出高电平,点亮
}
}
双等号关系运算符,单等号赋值运算符
http://www.taichi-maker.com/homepage/reference-index/arduino-code-reference/if-else/
1-16 逻辑控制2-布尔变量
打开示例程序,数字上拉输入的案例
配置引脚
变量读取引脚状态
引脚状态逻辑分析(程序流程控制作用,核心)
逻辑表达式
关系运算符左右两侧运算得到真假
Arduino将真用数字1表示,假用数字0表示
布尔只能存储0、1,给布尔3数值会自动存为1
改写程序(使用布尔运算)
按键开关控制led灯的程序重新改写一下看看
新建程序pushbutton_led
boolean pushButton; //定义布尔类型变量(两种写法boolean、bool都可以)
void setup() {
// put your setup code here, to run once:
pinMode(2,INPUT_PULLUP); //将引脚2设置为上拉输入模式
pinMode(13,OUTPUT); //将引脚13设置为输出模式
}
//输入上拉模式;
//按下按键,引脚2低电平,不按按键,引脚2高电平
//按下按键,pushButton等于0.不按按键,pushButton等于1.
void loop() {
// put your main code here, to run repeatedly:
pushButton = digitalRead(2); //读取数字引脚2的状态值(只有0或者1),并赋值给布尔变量pushButton
//判断pushButton数值,执行语句
if(pushButton){ //如果为真,即返回1,即按键未按下
digitalWrite(13,HIGH); //给13引脚输入高电平,点亮led灯
}else{
digitalWrite(13,LOW); //给13引脚输入低电平,熄灭led灯
}
}
之前的程序使用引脚状态与HIGH逻辑运算的结果进行判断,而现在直接使用读取到的引脚状态作为结果运算,两种方式都可以
程序上传及效果演示
程序已经上传,效果演示如下
按键开关同侧的引脚,一端连接2号引脚,一端接地,电路与上节课一样
Led灯,在电路连接上就亮,按下按键如下等就熄灭了
现在的工作状态与上节课相反的,原因在逻辑判断语句if中
输入上拉模式,不按按键引脚2是高电平,不按按键是低电平
回顾知识
1-17 逻辑控制3-布尔运算
上节课代码如下,可通过太极创客官网获取
自然状态点亮led,按下是熄灭led的
如何修改为按下led亮,加入布尔运算符!逻辑非
此时按下按键led灯就亮了
效果演示
未按下,led熄灭状态
按下按键开关点亮
布尔运算符
逻辑与&&
逻辑与的电路
有两个按键
绿色导线,一端2号引脚,另一端按键引脚
黄色导线,一端8号引脚,另一端按键引脚
两个黑色导线,一端GND接地,另一端分别按键引脚
程序如下:
boolean pushButton1; //定义布尔类型变量(两种写法boolean、bool都可以)
boolean pushButton2; //定义布尔类型变量,用于接收二号按键状态
void setup() {
// put your setup code here, to run once:
pinMode(2,INPUT_PULLUP); //将引脚2设置为上拉输入模式,与按键1连接
pinMode(8,INPUT_PULLUP); //将引脚8设置为上拉输入模式,与按键2连接
pinMode(13,OUTPUT); //将引脚13设置为输出模式
}
//输入上拉模式;
//按下按键,引脚2低电平,不按按键,引脚2高电平
//按下按键,pushButton等于0.不按按键,pushButton等于1.
void loop() {
// put your main code here, to run repeatedly:
pushButton1 = digitalRead(2); //读取数字引脚2的状态值(只有0或者1),并赋值给布尔变量pushButton
pushButton2 = digitalRead(8); //读取数字引脚8的状态值,即第2个按键状态
//判断一号按键与二号按键的状态,若同时按下,进行亮灯
if(!pushButton1 && !pushButton2){ //根据布尔两个变量数值点亮或者熄灭LED
digitalWrite(13,HIGH); //两个布尔变量数值为假(false)时点亮LED
}else{
digitalWrite(13,LOW); //两个布尔变量数值为真(true)时熄灭LED
}
}
/*
!pushButton1=1,!pushButton2=1 ---> !pushButton1 && !pushButton2 = 1
!pushButton1=0,!pushButton2=1 ---> !pushButton1 && !pushButton2 = 0
!pushButton1=1,!pushButton2=0 ---> !pushButton1 && !pushButton2 = 0
!pushButton1=0,!pushButton2=0 ---> !pushButton1 && !pushButton2 = 0
*/
逻辑与运算结果如以下4种
演示效果
两者未按下
两者同时按下:
按下一侧:
逻辑或
未按下按键,不亮
按下任何一个按键亮
同时按下亮