Arduino从零开始(1)——按钮控制LED

news2025/7/19 19:11:50

0.前言 

本文主要介绍Arduino对于开关和条件判断函数的使用。

目录

0.前言

1.介绍

2.按钮控制LED

2.1下拉模式:

2.2上拉模式

3.扩展实验:


1.介绍

前篇介绍了点亮LED,这次案例我们尝试通过一个简单的传感器——按钮,来实现对LED控制。将控制按钮分解的话,能看到一个十分简单的构造。

                                             

(注意按钮方向)

如上图所示,这个按钮有四个引脚,分别1-2导通,3-4导通,中间一个开关连接。这里或许朋友们会有疑问了,对于一个常开开关而言,这里为什么会有四个引脚,只需要两个引脚不就可以了吗?比如工业上常用的欧姆龙行程开关,如下图:

 常开端一对引脚,常闭端一对引脚,触碰按钮后,原本的常开和常闭端相互切换状态。而对于实验用的这个四脚小开关,这里的四个引脚的其中一个是为了给下拉电阻做引脚而准备的,常规的欧姆龙开关一般是和工业控制器如PLC等搭配使用。而对于PLC而言,首先是电源,一般PLC电源采用DC24V,而Arduino一般是DC5V,就电源上自然Arduino就不如PLC抗干扰能力强,再一个PLC电源线以及接线一般是采用具有一定抗干扰能力的双绞线,而我们对Arduino实验时一般是采用面包线,两者抗干扰能力也不在一个级别上,所以如果Arduino在读取开关信号时不接上拉或下拉电阻,那么其误动作的概率就很大。Arduino本身有自带上拉电阻,所以实际使用过程中更推荐使用上拉模式来读取开关信号。(这里虽然说Arduino相比较PLC而言抗干扰能力上不如PLC,但并不是说Arduino就不能用于工控了。做好屏蔽,外部的抗干扰等,依旧可以实现工控,毕竟一块Arduino的价格是一个PLC的几分之一。自己做的一条自动化生产线也是采用Arduino来设计的,虽然其中有坑,但都还是解决掉了。)

电路中上下拉电阻的作用:

  • 上拉电阻——是将不确定信号通过一个电阻钳位在高电平,电阻同时限流作用
  • 下来电阻——是将不确定信号通过一个电阻钳位在低电平

两者最终的目的都是提高电路稳定性,避免误动作。

2.按钮控制LED

分别介绍两种模式下拉与上拉。

2.1下拉模式:

接线图如下:

 代码如下:

void setup()
{
  pinMode(13,OUTPUT);
  pinMode(2,INPUT);
  digitalWrite(13, LOW);
}

void loop()
{
  if(digitalRead(2)==HIGH){//读取2号引脚状态,并做判断
  	digitalWrite(13, HIGH);
  }
}

说明:

1.下拉模式即——pinMode(2,INPUT);。通常状态下2号引脚为低,触发高电平时有效,即将2与5V接通。

2.

if语句常用判定式:<<===>=>!=

布尔运算式:

符号逻辑
if(digitalRead(2)==HIGH && digitalRead(2)==HIGH){//.... }&&
if(digitalRead(2)==HIGH || digitalRead(2)==HIGH){//.... }||

3.对于“==”判断,要小心使用成了单个等号如if(x=10)。这里单个等号是赋值运算,将恒为真。

2.2上拉模式

相比较下拉模式的接线图,上拉模式下就简单许多了。接线图如下:

代码如下:

void setup()
{
  pinMode(13,OUTPUT);
  pinMode(2,INPUT_PULLUP);
  digitalWrite(13, LOW);
}

void loop()
{
  if(digitalRead(2)==LOW){
  	digitalWrite(13, HIGH);
  }
}

说明:

1.可以看到对于Arduino而言,因其自身已经配有上拉电阻,所以实际使用中更推荐采用上拉模式,以节省外接电子元器件,减少干扰,提高系统的稳定性。

2.在上拉模式即—— pinMode(2,INPUT_PULLUP);。通常状态下2号引脚拉高,触发低电平时有效,即将2与地接通。

3.扩展实验:

按钮按下后开始计时,并同时点亮LED,10秒途中再次按下按钮,熄灭LED,并打印时间,10秒后若无任何操作,自动熄灭LED,并打印时间。扩展实验中有循环while的使用,会在下一章节具体说明。

接线图如下:

代码如下:

void setup()
{
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  pinMode(2, INPUT_PULLUP);
  digitalWrite(13, LOW);
}

void loop()
{
  int i=10;
  if (digitalRead(2)==LOW) {
    while (digitalRead(2)==LOW) {
      if(digitalRead(2)==HIGH){
        digitalWrite(13, HIGH);
      	while (i<=10000){
          delay(10);
          i=i+10;
          if (digitalRead(2)==LOW) {
            while (digitalRead(2)==LOW){
              if(digitalRead(2)==HIGH) {
                Serial.println(float(i)/1000);
                break;
              }
            }
            break;
          }
          Serial.println(float(i)/1000); 	
        }
        digitalWrite(13, LOW);
        break;
      }
    }
  }
}

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

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

相关文章

Ubuntu20.04离线安装Vmware tools

参考连接&#xff1a;在 Linux 虚拟机中手动安装 VMware Tools 从 Workstation Pro 菜单栏中选择虚拟机 > 安装 VMware Tools。 如果安装了早期版本的Vmware tools&#xff0c;则菜单项是更新Vmware tools如果这个安装Vmware tools 是灰色的&#xff0c;进行如下的处理方式…

HTML基本骨架与编辑器选择

HTML基本骨架与编辑器选择 文章目录HTML基本骨架与编辑器选择1.HTML基本了解1.1 什么是HTML1.2 HTML标签1.3 HTML元素1.4 Web浏览器1.5 HTML网页结构1.6 HTML版本了解2.HTML基本骨架介绍3.HTML编辑器的下载与使用1.HTML基本了解 1.1 什么是HTML HTML 是用来描述网页的一种语言…

双链表的基本操作

目录 一、双链表的设计 二、双链表的实现和基本操作 1.实现双链表节点以及设置first、last指针 2.获取当前链表中元素的数量 3.获取指定位置的节点 4.在尾部添加结点元素 5.在指定位置添加元素 6.删除指定位置的结点 一、双链表的设计 针对于查询操作&#xff0c;我们可…

计算机操作系统:实验3 【虚拟存储器管理】

计算机操作系统&#xff1a;实验3 【虚拟存储器管理】 文章目录计算机操作系统&#xff1a;实验3 【虚拟存储器管理】一、前言二、实验目的三、实验环境四、实验内容五、实验说明1、设计中虚页和实页的表示2、关于缺页次数的统计3、LRU算法中“最近最久未用”页面的确定4、算法…

删除类及其对象的属性:delattr()函数

【小白从小学Python、C、Java】 【Python-计算机等级考试二级】 【Python-数据分析】 删除类及其对象的属性 delattr()函数 [太阳]选择题 请问对以下Python代码说法错误的是&#xff1f; class MyClass1: x 1 y 2 myObject1 MyClass1() print(【访问】myObject1的属…

Revit中“结构框架显示与剪切“的应用和一键剪切功能

一、Revit关于"结构框架显示与剪切"的应用 结构框架&#xff1a;顾名思义其实它表示的就是结构梁而已&#xff0c;但是我们画图的时候往往会显示"实线"和"虚线"&#xff0c;以至于在出结构图纸的时候&#xff0c;达不到出图要求 NO.2、应用 Part…

ISCTF

upload upload,一道phar文件上传题目 <?php class upload{public $filename;public $ext;public $size;public $Valid_ext;public function __construct(){$this->filename $_FILES["file"]["name"];$this->ext end(explode(".", …

[山东科技大学OJ]1490 Problem F: 该按哪些键

Time Limit: 1 Sec Memory Limit: 128 MB Submit: 1693 Solved: 433 [Submit][Status] Description Peter在手机上打字时一直用全键键盘来输入&#xff0c;但最近不知道怎么搞的&#xff0c;把全键键盘弄丢了&#xff0c;只剩下了9键键盘。一项喜欢高科技的Peter却不会用9键…

彻底搞懂nodejs事件循环

nodejs是单线程执行的&#xff0c;同时它又是基于事件驱动的非阻塞IO编程模型。这就使得我们不用等待异步操作结果返回&#xff0c;就可以继续往下执行代码。当异步事件触发之后&#xff0c;就会通知主线程&#xff0c;主线程执行相应事件的回调。 以上是众所周知的内容。今天…

ASEMI整流桥D3KB100参数,D3KB100规格,D3KB100封装

编辑-Z ASEMI整流桥D3KB100参数&#xff1a; 型号&#xff1a;D3KB100 最大重复峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;1000V RMS反向电压VR(RMS)&#xff1a;700 平均整流输出电流&#xff08;IO&#xff09;&#xff1a;3A 峰值正向浪涌电流&#xff08…

【论文阅读】时序动作检测系列论文精读(2019年)

文章目录1. BMN: Boundary-Matching Network for Temporal Action Proposal Generation论文目的——拟解决问题贡献——创新实现流程详细方法2. MGG: Multi-granularity Generator for Temporal Action Proposal论文目的——拟解决问题贡献——创新实现流程详细方法3. P-GCN: G…

稳压二极管的应用及注意事项

文章目录稳压二极管也被称为齐纳二极管 齐纳二极管和普通二极管的伏安特性曲线 齐纳二极管的工作原理 稳压二极管的伏安特性曲线的正向特性和普通二极管差不多&#xff0c;反向特性是在反向电压低于反向击穿电压时&#xff0c;反向申阳很大&#xff0c;反向漏电流极小。但是…

【学习笔记】AGC028/AGC007

AGC028 Removing Blocks High Elements 好仙啊。 我会转化&#xff01;&#xff01;问题转化为在原序列剩下的数中取ISISIS序列aaa,bbb&#xff0c;满足cx∣a∣cy∣b∣cx|a|cy|b|cx∣a∣cy∣b∣ 。对于没在a,ba,ba,b序列中的数&#xff0c;可以通过恰当放置使其不对前缀最大…

并发编程- synchronized,Lock及volatile的使用

文章目录并发编程的可见性问题解决方法synchronizedLockvolatile并发编程的可见性问题 多线程访问共享变量&#xff0c;造成线程不安全&#xff0c;最后的数值不对 public class VDemo {private static int num 0;public static void add() {num;}public static void main(St…

红队内网渗透神器--CobaltStrike安装教程

CobaltStrike介绍&#xff1a; CobaltStrike是一款渗透测试神器&#xff0c;被业界人称为CS神器。CobaltStrike分为客户端与服务端&#xff0c;服务端是一个&#xff0c;客户端可以有多个&#xff0c;可被团队进行分布式协团操作。 CobaltStrike集成了端口转发、服务扫描&…

Ubuntu 手动配置DNS

使用ping命令测试百度域名时发现&#xff0c;无法解析这个域名&#xff0c;说明当前系统上没有配置DNS服务器。配置DNS服务器的方式主要有以下两种&#xff1a; 目录 1、修改DNS配置文件 /etc/resolv.conf 2、修改网卡配置文件 /etc/network/interfaces 1、修改DNS配置文件 /e…

【附源码】计算机毕业设计JAVA宠物云寄养系统

【附源码】计算机毕业设计JAVA宠物云寄养系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA myba…

Vue3 - toRef() 使用教程

介绍 它可用于为响应式对象上的 property 创建 ref&#xff0c;这样创建的 ref 与其源 property 保持同步&#xff0c;当改变源 property 时&#xff0c;将更新 ref &#xff0c;反之亦然。 这段话有些晦涩难懂&#xff0c;其实用大白话说&#xff0c;就是当你使用 reactive 创…

如何拆分PDF成单页?这三个方法分享给你

很多朋友在平时的工作中&#xff0c;经常需要处理一些PDF格式的文件&#xff0c;但是如果PDF文件的占用空间太大&#xff0c;难以进行操作处理&#xff0c;这时我们就需要先将其拆分成多个小文件&#xff0c;那你们知道要怎么把PDF拆分成多个文件吗&#xff1f;今天我就来给大家…

RK3568平台开发系列讲解(LCD篇)DRM 显示框架

🚀返回专栏总目录 文章目录 一、DRM 显示框架二、DRM 驱动和 libdrm 交互过程2.1、GEM:2.2、KMS:三、DRM 驱动路径3.1、Uboot驱动路径3.2、内核驱动路径沉淀、分享、成长,让自己和他人都能有所收获!😄 📢DRM 英文名叫 Direct Rendering Manager,用来管理显示输出,图…