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

news2025/1/16 7:44:45

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

演示效果

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

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

按下一侧:

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

在这里插入图片描述

逻辑或

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

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

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

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

逻辑非

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1968115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot使用Disruptor做内部高性能消息队列

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 背景 在现代应用开发中,特别是在构建高并发、低延迟的系统时,内部高性能消息队列的作用变得尤为重要。内部高性能消息队列,如Disruptor,为应用提供了一种高效、…

springboot使用jdk生成自签名证书

1.背景 许多生产中服务端应用系统需要ssl认证,走https访问,以满足等保要求。 有些前后端一体的项目工程,完全可以用jdk生成证书(本章节介绍此); 若是前后端分离,使用nginx代理部署的&#xf…

Selenium怎么进行自动化测试?8年老鸟的我是这样做的...

自动化测试是软件测试过程中的重要一环,它可以帮助我们提高测试效率、减少重复工作,同时还可以提升测试的准确性。Selenium是一个广泛使用的自动化测试工具,它可以模拟用户在网页上的操作,比如点击、输入、检查元素等。 本文将从…

tomcat配置(java环境配置)

继昨天上线商城系统 [rootstaticserver eleme_web]# cd /usr/local/nginx/conf [rootstaticserver conf]# ls fastcgi.conf koi-utf nginx.conf scgi_params.default fastcgi.conf.default koi-win nginx.conf.bak uwsgi…

5G CPE SC100:5G时代的旗舰级无线路由器

作为星创易联CPE无线路由器SC100的产品经理,我很高兴能够与大家分享这款产品的特点和使用体验。经过我们团队的不懈努力,SC100终于面世,它集多项领先技术于一身,定位高端市场,希望能给用户带来极致的上网体验。下面就让我从硬件规格、无线性能、接口丰富程度、指示灯设计、便携…

简单洗牌算法

🎉欢迎大家收看,请多多支持🌹 🥰关注小哇,和我一起成长🚀个人主页🚀 ⭐目前主更 专栏Java ⭐数据结构 ⭐已更专栏有C语言、计算机网络⭐ 在学习了ArrayList之后,我们可以通过写一个洗…

老百姓:药房“难自医”

股价连创历史新低,董事长又被留置,药房“难自医”。今天我们聊聊正处在风口浪尖的——老百姓。 昨晚,老百姓大药房公告称, 收到公司实际控制人、董事长谢子龙于7月28日被湖南省监委留置、立案调查的通知。随后还是经典环节&#…

pytorch与cuda与TensorRT的版本选择

VScode版本 linux最新版本的vscode,可能无法进行python的调试 选择下载1.85 https://code.visualstudio.com/updates/v1_85 CUDA版本 https://developer.nvidia.com/Cuda-Toolkit-archive 由于受限于TRT的8.6(下面会说明),所以…

求值(河南萌新2024)

我真的服了,注意数据范围!!!!!!!!!!!!!!!!!!&#…

秋招突击——7/29——复习{有塔游戏——关联传递性}——新作{随机链表的复制、合并K个升序链表,二叉树——二叉树的中序遍历、二叉树的最大深度、反转二叉树}

文章目录 引言复习有塔游戏——关联传递性实现复习实现参考实现 新作随机链表的复制个人实现参考实现 排序链表个人实现参考实现 二叉树章节二叉树的中序遍历个人实现 二叉树的最大深度个人实现参考实现 反转二叉树个人实现参考实现 总结 引言 旅游完回来了,今天继…

SSM流浪狗信息管理系统-计算机毕业设计源码07154

目录 1 绪论 1.1 研究背景和意义 1.2国内外研究现状 1.3论文结构与章节安排 2 系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2经济可行性分析 2.1.3操作可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4 系统流程分析…

vmware上,虚机经常丢失网卡。导致无法上网。

1、winR 输入 services.msc 2、重启这两个服务。 VMware NAT service和VMware DHCP service

【Rust日报】query.rs - 搜索Rust的一切

rucola - 在终端中管理你的markdown文档 很酷的一个终端软件。 query.rs - 搜索Rust的一切 https://query.rs/ 文档,crate,错误代码等等。 就是Rust生态的google. 使用Rust 10年后,我想吐槽几句 这篇文章分享了作者在使用Rust编程语言中的经验…

“postman请求JSON格式,Body内数据无法被idea后端接收,值为null“问题的解决方式

问题描述: 传递数据一切正常,但是: 原因剖析: 这是因为我们实体类里面属性的命名格式不符合驼峰命名,比如我这种“大写字母开头如CAD”/“一个小写字母一个大写字母如aDddddd”都不行。 解决方法: 方法1&#xff1a…

LangChain大模型应用开发指南-大模型Memory不止于对话

上节课,我我为您介绍了LangChain中最基本的链式结构,以及基于这个链式结构演化出来的ReAct对话链模型。 今天我将由简入繁,为大家拆解LangChain内置的多种记忆机制。本教程将详细介绍这些记忆组件的工作原理、特性以及使用方法。 【一一AGI大…

二叉搜索树的第 k 大的节点

题目描述 给定一棵二叉搜索树,请找出其中第 k 大的节点。 解题基本知识 二叉搜索树(Binary Search Tree)又名二叉查找树、二叉排序树。它是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子…

C语言第九天笔记

数组的概念 什 么是数组 数组是 相同类型, 有序数据的集合。 数 组的特征 数组中的数据被称为数组的 元素,是同构的 数组中的元素存放在内存空间里 (char player_name[6]:申请在内存中开辟6块连续的基于char类 型的变量空间) 衍生概念&…

数据安全、信息安全、网络安全区别与联系

关键字: 信息安全 数据安全 网络安全 [导读] 让人更好理解 “数据安全”、“信息安全”、“网络安全” 三者间的区别与联系了,我们汇总了官方机构给这三者的定义,并且网友也给出了自己的看法,一起来看看。 在 “互联网 ” 被广…

tomcat10环境的搭建及发布一个动态服务

Day 15 # 构建项目 [rootstatic-server eleme_web]# npm run build # 将静态的项目移动到nginx [rootstatic-server eleme_web]# ls [rootstatic-server eleme_web]# ls dist/ css favicon.ico index.html js [rootstatic-server eleme_web]# vim dist/index.html [r…