arduino程序-逻辑控制(基础知识)

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种
在这里插入图片描述

演示效果

两者未按下
在这里插入图片描述

两者同时按下:
在这里插入图片描述

按下一侧:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

逻辑或

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

未按下按键,不亮
在这里插入图片描述

按下任何一个按键亮
在这里插入图片描述
在这里插入图片描述

同时按下亮
在这里插入图片描述

逻辑非

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾名招财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值