机器人技术等级考试五级教学课件完整版_第1页
机器人技术等级考试五级教学课件完整版_第2页
机器人技术等级考试五级教学课件完整版_第3页
机器人技术等级考试五级教学课件完整版_第4页
机器人技术等级考试五级教学课件完整版_第5页
已阅读5页,还剩187页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

--五级教学

智能硬件创新课程ESP32

第一章初识ESP32第二章

数码管第三章

点阵动画第四章

串行通信--UARTESP32智能硬件创新课程|总目录ESP32智能硬件创新课程|初识ESP32第一章初识ESP32ESP32智能硬件创新课程|初识ESP32目录

ESP32简介驱动及软件安装学习平台搭设

Hello

World!ESP32数字信号读写操作ESP32模拟信号读写操作ESP32电容触摸传感器ESP32霍尔传感器ESP32外部中断Serial.printf()函数本章小结ESP32智能硬件--初始ESP32|ESP32简介

ESP32简介ESP32智能硬件--初识ESP32|ESP32简介时代背景

与科技同步

云/物/移/大/智与3/4级知识体系兼容 ArduinoC

开源 Arduino/ESP32/树莓派ESP32智能硬件--初识ESP32|ESP32简介为什么选择ESP32ESP32智能硬件--初识ESP32|ESP32简介ESP32简介ESP32是Espressif乐鑫信息科技推出的一款集成度极高的WiFi+蓝牙双模物联网芯片。拥有双核32位MCU(微控制单元),主频高达240MHz。ESP32专为移动设备、可穿戴电子产品和IoT应用设计,广泛应用于平板电脑、无线音箱、摄像头和物联网设备等领域。ESP32芯片具有如下特点:性能稳定。工作温度范围-40℃到+125℃,具有动态电压调整功能。高度集成。集成天线开关、功率放大器、接收低噪声放大器、滤波器、电源管理模块等功能于一体。超低功耗。省电模式和动态电压调整等WiFi&蓝牙解决方案。提供WiFi和双模蓝牙功能。ESP32简介我们日常使用的开发板一般采用的是ESP32WROOM芯片模组。模组集成了ESP32芯片,Flash闪存(非易失性内存),天线和其他精密元件。ESP32WROOM模组正表面是一个方形的保护罩,保护罩内部是ESP32芯片、Flash闪存及其它相关电路。模组内Flash闪存的容量一般为4MB。ESP32智能硬件--初识ESP32|ESP32简介ESP32-WROOM-32芯片模组正面及背面视图ESP32智能硬件--初始ESP32|ESP32简介ESP32智能硬件--初始ESP32|ESP32简介ESP32芯片种类(了解即可)-ESP32-D0WDQ6D=双核S=单核0/2=嵌入式Flash:0=无2=16Mbit-ESP32-D0WDWD=通信模式Q6=封装QFN6*6没有代表QFN5\*5-ESP32-D2WD-ESP32-S0WD

参考:ESP32系列芯片技术规格书esp32_datasheet_cn.pdfESP32智能硬件--初识ESP32|ESP32简介ESP32芯片基本性能及外设32-bit双核处理器,主频高达240Mhz,运算能力高达600MIPS(MillionInstructionsPerSecond)

448KBROM,用于程序启动和内核功能调用电机PWM,LEDPWM(多达16个通道)520KBSRAM、RTC中16KBSRAMWiFi+蓝牙+低功耗蓝牙(BLE)4个SPI、2个I2C、2个I2S(对应音频串口),3个UART等接口工作电压:3.3V(范围:2.7V~3.6V)QSPI最多可连接4个Flash/SRAM,每个Flash最大为16MB模组引脚输出总电流:1100mA12-bitSARADC(逐次逼近式模拟数字转换器),多达18个通道单个引脚最大输出电流:40mA2个8-bitD/A(DAC)转换器IR(TX/RX)10个触摸传感器霍尔传感器34个GPIO接口(输入输出)0~19,21~23,25~27,32~39,由于开发板的封装等原因,以下编号的引脚在ESP32的开发板中通常未被引出:GPIO20、GPIO24、GPIO28、GPIO29、GPIO30、GPIO31、GPIO37、GPIO38。ESP32智能硬件--初识ESP32|ESP32简介基于ESP32WROOM模组的开发板

基于ESP32强大的性能和开源开放的特点,国内涌现出众多的开发板和集成开发板。ESP32智能硬件--初识ESP32|ESP32简介该模块共有38个引脚,其中有34个输入输出接口。可用引脚23个,排除6个Flash读写引脚(*)、EN和BOOT按键引脚(GPIO0)、2个电源引脚、3个接地引脚、以及UART0引脚(GPIO1、GPIO3)。EN按键:使能端,可触发复位操作,重启模组。Boot+EN:重启并进入编程模式。GPIO6~GPIO11用于读写闪存Flash时使用。16个ADC引脚ESP32模块上有10个引脚对电容变化很敏感。可以将这些引脚连接到某些焊盘(PCB上的焊盘),并将它们用作触摸开关。I2C:SDA和SCL引脚用于I2C通信。SPI:4个SPI接口(SPI0、SPI1、VSPI和HSPI),可用于连接显示屏、SD/microSD存储卡模块、外部闪存等。串行通信(UART):该模块上有2个UART串行接口。使用这些引脚,您可以在两个设备之间传输高达5Mbps的信息。UART0还具有CTS和RTS控制。ESP32引脚示意图ESP32-DevKitC-V2(r1.0)引脚功能映射示意图ESP32智能硬件--初识ESP32|ESP32简介ESP32-KPCB专用开发板为了更加方便学习及电路搭设,本课程开发了专用的学习板。该学习板将ESP32所有可用的引脚引出来,同时给每个引脚配备了电源,将本书要学习的I2C和SPI引脚单独引出。为了学习方便,单独配备了I2C接口的可插拔OLED显示屏,以及两路马达驱动接口,开发板指示灯连接到D12引脚。该主板在硬件上做了特殊的ArduinoIDE兼容,不用手动切换boot模式,实现一键下载。ESP32智能硬件--初识ESP32|ESP32简介ESP32WROOM模组3个SPI接口3个I2C接口6个GPIO接口0.96英寸OLED显示屏

(I2C接口)13个GPIO接口5V电源5V外部电源板载指示灯(D12)USB端口Reset按键Boot按键马达拨码开关马达接口电源指示灯Tx/Rx指示灯ESP32–KPCB专用开发板ESP32智能硬件--初识ESP32|ESP32简介ESP32普通开发板当使用其他类型的开发板进行学习时,一般需要和面包板配合使用,由于一般开发板使用的是ESP32模组,导致开发板引脚的间距稍大,普通的单块面包板不能满足要求,此时需要两块面包板配合使用,将其中一块面包板的边缘电源部分去除后和另外一块面包板连接。ESP32标准开发使用示意图ESP32智能硬件--初识ESP32|驱动及软件安装

驱动及软件安装ESP32智能硬件--初识ESP32|驱动及软件安装驱动安装(CP210X)全国青少年机器人技术等级考试官方网站下载,下载链接为:/h-nd-288.html。选择相应的

Windows系统版本,根据Windows系统32位/64位选择相应文件双击执行,即可完成合适版本的驱动安装。ESP32智能硬件--初识ESP32|驱动及软件安装ESP32forArduino软件开发环境(Windows)安装ESP32forArduino软件开发环境基于ArduinoIDE,适配的Arduino版本是1.8或更高。ArduinoIDE软件可从官网下载,链接为:http://www.arduino.cc/en/Main/Software。ArduinoIDE安装完毕,可以采取如下三种方式进行ESP32forArduino开发环境的安装。ESP32智能硬件--初识ESP32|驱动及软件安装ESP32forArduino三种安装方式使用ArduioIDE的开发板管理器来安装使用git工具安装离线安装方式一和方式二由ESP32官方提供,为在线安装,需要联网,如果网络不好,可能不能正常进行,方式三是离线安装,相对便捷。三种安装方式所安装的软件文件夹不完全一致,安装时选择其中一种进行安装,以免冲突。ESP32智能硬件--初识ESP32|驱动及软件安装ESP32forArduino三种安装方式使用ArduioIDE的开发板管理器来安装使用git工具安装离线安装步骤一:下载离线版本espressif.zip。下载链接:/h-nd-288.html。步骤三:将espressif.zip文件拷贝到Arduino文件夹\hardware文件夹下;点击鼠标右键,选择解压到espressif\

步骤三:打开Arduino软件,点击【工具】-【开发板】,选择【ESP32DevModule】即可。ESP32智能硬件--初识ESP32|学习平台搭设

学习平台搭设ESP32智能硬件--初识ESP32|学习平台搭设ESP32智能硬件--初识ESP32|HelloWorld!HelloWorld!ESP32智能硬件--初识ESP32|HelloWorld!HelloWorld!ESP32除了具备Arduino的全部功能外,还集成了WiFi和蓝牙功能。下面的“HelloWorld!”项目就简单运行ESP32所对应的例程,该例程显示周边可用的网络连接。步骤一:将ESP32开发板通过USB数据线和计算机连接。步骤二:选择主板类型和对应的端口号。步骤三:打开【文件】-【示例】-【WiFi】-【WiFiScan】。步骤四:点击上传,提示栏显示上传成功。打开串口监视器,设置波特率为115200。串口监视器窗口提示搜索到的可用连接,并根据信号强度显示每个连接的SSID名称(由路由器发送的无线网名称)。ESP32智能硬件--初识ESP32|HelloWorld!ESP32智能硬件--初识ESP32|HelloWorld!HelloWorld!ESP32forArduino基本延续了三四级所学习的基本的Arduino基本操作函数和基本概念,也有一些细微的差别,后续将给大家讲述ESP32的基本功能特性。注意:在程序上传时,系统会使用D2引脚,如果此时D2引脚连接按键开关模块,上拉或下拉到高电平或低电平,此程序不能正常上传。可先移开按键模块,待程序上传成功后再连接。ESP32智能硬件--初识ESP32|ESP32数字信号读写操作

ESP32数字信号读写操作ESP32智能硬件--初识ESP32|ESP32数字信号读写操作ESP32数字信号读写操作pinMode()digitalRead()digitalWrite()ESP32智能硬件--初识ESP32|ESP32数字信号读写操作pinMode(pin,mode);功能:设置引脚工作模式,无返回值,默认情况下引脚模式为INPUT输入模式。pin:开发板23个引脚均可以作为数字输入引脚使用,除34/35/36/39外均可以作为数字输出引脚使用。引脚34/35/36/39作为数字输入引脚时,不能设置为上拉和下拉模式。mode:INPUT/OUTPUT/INPUT_PULLUP/INPUT_DOWN。

a.INPUT:输入模式

b.OUTPUT:输出模式

c.INPUT_PULLUP:内部上拉模式

d.INPUT_PULLDOWN:内部下拉模式ESP32智能硬件--初识ESP32|ESP32数字信号读写操作digitalRead(pin);功能:从指定引脚读取外部输入的数字信号。返回值:当外部输入高电平时,返回值为1;当外部输入低电平时,返回值为0。pin:开发板23个引脚均可以作为数字输入引脚使用。当引脚34/35/36/39作为数字输入引脚时,如果模式设置为上拉和下拉模式,则没有返回值。ESP32智能硬件--初识ESP32|ESP32数字信号读写操作digitalWrite(pin,value);功能:从指定引脚输出高低电平数字信号。返回值:无。pin:开发板23个引脚中,除34/35/36/39四个引脚以外的其他引脚。value:HIGH或者LOW。HIGH值为1,代表高电平;LOW值为0,代表低电平。ESP32智能硬件--初识ESP32|ESP32数字信号读写操作按键开关 1个LED灯 1个100欧姆电阻1个杜邦线 若干示例任务:一个基本的按键开关控制LED灯的小项目。通过设置内部下拉的方式来获取按键值。数字信号读写示例ESP32智能硬件--初识ESP32|ESP32数字信号读写操作程序运行:程序中,设置按键开关连接引脚D4为内部下拉输入模式程序。上传成功后,按下按键,打开串口监视器,当按键断开时,显示值为0,当按键闭合时,显示值为1。可写为constintswitchPin=4ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作

ESP32模拟信号读写操作ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作ESP32的模拟信号读取函数和Arduino一样为analogRead()函数,默认的返回值为0~4095。ArduinoUNO模拟输出通过PWM实现,对应的函数是analogWrite(),该函数在当前版本没有提供。ESP32芯片提供了3种模拟输出方式,不同方式对应不同的输出函数,这三类模拟输出方式分别为:LEDC:基于PWM调制的16通道

模拟输出SigmaDelta

:基于SigmaDelta

调制的8通道模拟输出DAC

:硬件(DAC)实现的2个通道的模拟输出ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作模拟信号输入函数ESP32的ADC模块的分辨率为12位,所以模拟输入函数的返回值在0~4095之间,由于ESP32的工作电压是3.3V,当模拟输入函数的返回值为4095时,对应的工作电压是3.3V,返回值为0时,对应的工作电压是0V。ESP32的ADC模块返回值的线性度不是很好,此外当电压小于0.1V时,返回值均为0,电压大于3.2V时,返回值均为4095。ADC值的线性度曲线ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作模拟信号输入函数关于模拟信号输入,ESP32提供了如下两个函数。analogRead()analogSetWidth()ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作analogRead(pin)功能:从指定引脚读取模拟信号,获取返回值。返回值:ADC的精度是12bit,默认范围0~4095之间,对应电压0~3.3V。pin:共15个模拟输入引脚:A0/A3/A4/A5/A6/A7/A10/A12~A19,分别对应引脚为:36/39/32/33/34/35/4/2/15/13/12/14/27/25/26。当打开WiFI功能时,建议仅使用A0/A3/A4/A5/A6/A76个引脚作为模拟输入使用。analogSetWidth(bits);功能:设置analogRead()函数的取样分辨率。bits:取值范围9~12。当设为9时,analogRead()函数的返回值范围0~511之间。ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作电位器模块 1个3P数据线 1根示例任务:读取电位器返回值。通过设置不同的取样分辨率,返回值的范围不同。模拟信号输入示例ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作程序运行:上传程序,打开串口监视器,旋转电位器,观察值的变化。修改函数analogSetWidth()分辨率的值,查看返回值结果。如果没有此条语句,默认为12位分辨率,即0~4095ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作模拟信号输出函数--基于LEDCLEDC(LEDControl)是基于PWM调制实现模拟输出。与ArduinoUNO主控板PWM直接从引脚输出不同。ESP32实现PWM模拟输出的载体是“通道Channel”,一共有16个通道,编号0~15。实现PWM输出,先设置指定通道PWM参数:频率、分辨率、占空比,然后将该通道映射到指定引脚,该引脚输出对应通道的PWM信号。LEDCPWM输出示意图引脚不直接产生PWM信号,通过通道产生。ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作模拟信号输出函数--基于LEDCLEDC实现模拟信号输出,ESP32提供了如下六个函数。ledcSetup()和ledcAttachPin()是初始化设置函数。ledcWrite()是PWM输出函数,功能类似analogWrite()函数,调用该函数前必须先进行初始化参数设置。ledcDetachPin()是关闭引脚的PWM输出。ledcWriteTone()和ledcWriteNote()是PWM音频输出,类似tone()函数。ledcSetup()

ledcAttachPin()ledcWrite()ledcDetachPin()ledcWriteTone()ledcWriteNote()ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作ledcSetup(channel,freq,bit_num);功能:设定指定LEDC通道参数设置。返回值:无channel:PWM通道,一共有0~15共16个通道。freq:设置PWM的频率。bit_num:占空比的分辨率。范围1-16。如设置为8位的分辨率,控制LED的亮度从0~255变化。说明:PWM频率的最大值和分辨率的设置值相关联。当频率为5000Hz时,对应的最大占空比的分辨率为13。当占空比的分辨率为1时,频率的最大取值到40MHz。当占空比的分辨率为16时,频率的最大取值到1200Hz。ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作ledcAttachPin(pin,channel);功能:将指定通道channel上产生的PWM信号输出到GPIO引脚。返回值:无pin:开发板23个引脚中,除34/35/36/39四个引脚以外的其他19个引脚。channel:PWM通道,一共有0~15共16个通道。ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作ledcWrite(channel,duty);功能:向指定通道(channel)输出指定占空比(duty)的PWM信号。返回值:无channel:PWM通道,一共有0~15共16个通道。duty:指定占空比数值。ledcDetachPin(pin);功能:取消指定引脚pin的PWM信号输出。返回值:无ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作ledcWriteTone(channel,freq)功能:向指定通道(channel)输出指定频率(freq)的音符信号。类似我们以前学习的tone()函数。channel:PWM通道,一共有0~15共16个通道。freq:指定频率。ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作ledcWriteNote(channel,note,octava)功能:向指定通道(channel)输出指定音符和音阶的声音。是对ledcWriteTone()函数的进一步封装。channel:PWM通道,一共有0~15共16个通道。note:音符。相当于do、re、mi...,系统预定义的音符有:NOTE_C,NOTE_Cs,NOTE_D,NOTE_Eb,NOTE_E,NOTE_F,NOTE_Fs,NOTE_G,NOTE_Gs,NOTE_A,NOTE_Bb,NOTE_B,NOTE_MAX。octava:音阶。octava取值范围0~7。ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作LED灯模块 1个3P数据线 1根示例任务:完成一个呼吸灯的示例程序,通过一个通道(channel)控制一个LED灯变化。模拟信号输出函数示--基于LEDCESP32智能硬件--初识ESP32|ESP32模拟信号读写操作程序运行:上传程序,观察LED的显示效果。修改程序5行中的分辨率为其他数值,上传程序,查看LED的显示效果。ESP32智能硬件--初识ESP32|ESP32模拟信号读写操作模拟信号输出函数--基于DAC与模拟输入ADC器件对应,ESP32集成了DAC模块,提供了2通道的硬件模拟输出功能。对应引脚为25和26。ESP32提供的操控函数为dacWrite()。dacWrite(pin,value);功能:通过硬件DAC模块实现模拟输出。返回值:无pin:DAC输出引脚,仅25和26。使用该函数时,不需要pinMode进行引脚模式设置。value:模拟输出值,0~255。ESP32智能硬件--初识ESP32|ESP32电容触摸传感器

ESP32电容触摸传感器ESP32智能硬件--初识ESP32|ESP32电容触摸传感器电容触摸传感器ESP32提供了电容触摸传感器(TouchSensor)功能,当人体和ESP引脚触碰时,会引起电容值的变化,ESP32返回当前引脚的电容值。ESP32还提供了相应的中断调用函数,当按键值小于设定的阈值时,执行相应的中断回调函数。关于电容触摸传感器,ESP32提供了如下两个函数。touchRead()touchAttachInterrupt()ESP32智能硬件--初识ESP32|ESP32电容触摸传感器touchRead(pin);功能:返回指定引脚的电容传感器的值。当该引脚发生触碰时,返回值变小。常用该函数获取阈值threshold。pin:电容触摸引脚。ESP32模组有T0、T2~T9共9个Touch引脚可供使用,分别对应4/2/15/13/12/14/27/33/32引脚。使用该函数时,不需要pinMode进行引脚模式设置。返回值:返回值0~255之间。ESP32智能硬件--初识ESP32|ESP32电容触摸传感器touchAttachInterrupt(pin,TSR,threshold)功能:设置触摸中断回调函数。当指定引脚的返回值低于threshold时,调用中断函数TSR。pin:电容触摸引脚。ESP32模组有T0、T2~T9共9个Touch引脚可供使用,分别对应4/2/15/13/12/14/27/33/32引脚。TSR:中断回调函数。中断回调函数TSR不携带参数,不能有返回值。threshold:触摸中断响应阈值。当引脚的返回值低于threshold时,调用中断函数TSR。ESP32智能硬件--初识ESP32|ESP32电容触摸传感器杜邦线 1根铝片(可选)

1块示例任务:采用杜邦线和T4引脚相连接,引出的一段为公头,如有铝片,将铝片包裹杜邦公头,以增加接触面。通常程序获取当前触碰传感器的值,并设定触碰中断,当传感器的返回值低于40时,触发中断函数,显示触发信息。电容触摸传感器示例ESP32智能硬件--初识ESP32|ESP32电容触摸传感器程序运行:上传程序,打开串口监视器,手接触杜邦线的公头,串口监视器显示如下图所示。ESP32智能硬件--初识ESP32|ESP32霍尔传感器

ESP32霍尔传感器ESP32智能硬件--初识ESP32|ESP32霍尔传感器ESP32集成了霍尔传感器,霍尔传感器的工作原理是霍尔效应。利用霍尔效应能检测周边磁场的强度变化,周边的磁场越强,输出的值越大。霍尔传感器位于ESP32模组的中间位置,利用霍尔传感器磁感应特性,可以用于计数、接近检测、位置控制等方面。霍尔传感器位置ESP32智能硬件--初识ESP32|ESP32霍尔传感器霍尔效应当电流垂直于外磁场通过半导体时,载流子在洛伦兹力(左手定则)的作用下发生偏转,垂直于电流和磁场的方向会产生一附加电场,从而在半导体的两端产生电势差,这一现象就是霍尔效应,这个电势差也被称为霍尔电势差。ESP32智能硬件--初识ESP32|ESP32霍尔传感器霍尔传感器的应用位移测量两块永久磁铁同极性相对放置,将线性型霍尔传感器置于中间,其磁感应强度为零,这个点可作为位移的零点,当霍尔传感器在Z轴上作△Z位移时,传感器有一个电压输出,电压大小与位移大小成正比。力测量如果把拉力、压力等参数变成位移,便可测出拉力及压力的大小,按这一原理可制成的力传感器。ESP32智能硬件--初识ESP32|ESP32霍尔传感器霍尔传感器的应用角速度测量在非磁性材料的圆盘边上粘一块磁钢,霍尔传感器放在靠近圆盘边缘处,圆盘旋转一周,霍尔传感器就输出一个脉冲,从而可测出转数(计数器),若接入频率计,便可测出转速。线速度测量如果把开关型霍尔传感器按预定位置有规律地布置在轨道上,当装在运动车辆上的永磁体经过它时,可以从测量电路上测得脉冲信号。根据脉冲信号的分布可以测出车辆的运动速度。ESP32智能硬件--初识ESP32|ESP32霍尔传感器关于霍尔传感器,ESP32提供的函数为hallRead()hallRead()功能:检测当前的磁场强度。该函数没有参数,霍尔传感器调用引脚36和39,当使用霍尔传感器的功能时,这两个引脚不要另作他用。返回值:当传感器和磁场正极接近时,返回值为正数,当和磁场负极接近时,返回值为负数。ESP32智能硬件--初识ESP32|ESP32霍尔传感器示例任务:拿一块磁铁靠近ESP32模块的霍尔传感器,分别检测磁铁正负极靠近时,霍尔传感器的返回值。小磁铁1块当N极靠近时当S极靠近时霍尔传感器示例ESP32智能硬件--初识ESP32|ESP32外部中断

ESP32外部中断ESP32智能硬件--初识ESP32|ESP32外部中断轮询在三、四级教材课本中,我们讲述控制系统的工作流程为:感受变化、分析判断、做出反应。感受变化就是读取一个或多个传感器的值,分析判断是根据读取的传感器的值及预先设定的程序进行数据处理,做出反应及时将程序运算的结果反馈给执行器执行。为了随时根据传感器的变化而做出反应,程序需要不断重复这个过程,这种处理的方式称为轮询。

但轮询有时不能很好的完成上述过程,例如按钮输入,当按钮被按下的瞬间,如果主应用程序正在做某些事情,就有可能没有检测到按钮的按下动作,此时系统就又成了无法正常响应的系统了。我们可以通过给按键适配外部中断,就可以很好的避免上述问题的发生。ESP32智能硬件--初识ESP32|ESP32外部中断中断程序外部中断是由外部设备发起请求的中断。每个中断对应一个中断程序,中断程序可以看作是一段独立于主程序之外的程序,也称作中断回调函数。当中段被触发时,控制器会暂停当前正在运行的主程序,而跳转去运行中断程序。当中断程序运行完毕,会会到先前主程序暂停的位置,继续运行主程序。如此便可收到实时响应处理事件的效果。ESP32智能硬件--初识ESP32|ESP32外部中断序号中断触发模式说明1RISING上升沿触发,即由低电平变高电平时触发

2FALLING下降沿触发,即由高电平变低电平时触发

3CHANGE电平变化触发,即高电平变低电平或低电平变高电平时触发

4ONLOW低电平触发,即当前为低电平时触发

5ONHIGH高电平触发,即当前为高电平时触发ESP32中断触发模式ESP32智能硬件--初识ESP32|ESP32外部中断中断触发函数ESP32forArduino提供了两个中断函数。用于对中断引脚进行初始化设置和关闭外部中断。attachInterrupt()detachInterrupt()ESP32智能硬件--初识ESP32|ESP32外部中断attachInterrupt(pin,function,mode);功能:指定中断引脚,并对中断引脚进行初始化设置。返回值:无返回值。

pin:欲设置中断触发输入的引脚。所有23个引脚均可以作为中断引脚使用。function:中断回调函数。当引脚中断触发时,会终止当前运行的程序,执行该函数。注意,中断回调函数不能有参数,且没有返回值。mode:5种中断触发模式detachInterrupt(pin);

功能:关闭指定引脚的中断功能。返回值:无返回值ESP32智能硬件--初识ESP32|ESP32外部中断按键模块 1个3P数据线 1根示例任务1:通过点击按键模块,切换高低电平作为外部中断触发中断程序,在程序中设置不同的中断触发模式,观看程序中全局变量计数器数值的变化。外部中断示例(一)--按键计数显示ESP32智能硬件--初识ESP32|ESP32外部中断程序运行:上传程序,打开串口监视器窗口。点击按键,查看串口监视器中显示数的大小和次数。将程序行8中的中断触发模式分别修改为:RISING、FALLING、ONHIGH、ONLOW,重新上传程序,查看并思考串口监视器数的变化。本课程使用的按键模块当按键按下时返回低电平,按键抬起时返回高电平。ESP32智能硬件--初识ESP32|ESP32外部中断按键抖动当中断触发模式为CHANGE、RISING、FALLING时,串口监视器显示的是变化的值,为什么会出现这种情况呢?这是因为按键在按下和释放的瞬间,按键内金属簧片接触是一个连续通断的过程,一般称之为抖动。抖动分为前沿抖动和后沿抖动。为了确保主控板对一次按键的操作仅做一次处理,必须要进行消抖处理。按键消抖将在第二章讲解。ESP32智能硬件--初识ESP32|ESP32外部中断热释电模块 1个3P数据线 1根示例任务2:通过热释电模块,检测是否有人进入,如有人进入,板载LED灯闪烁。外部中断示例(二)--入侵检测仪ESP32智能硬件--初识ESP32|ESP32外部中断热释电模块简介热释电模块是一种能检测人或动物发射的红外线而输出电信号的传感器。由白色的菲尼尔透镜和透镜内部的红外感应模块组成。不同模块的工作方式不太一样,图示的热释电模块检测运动的红外线发射体,扫描频率2秒钟一次。红外线是一种我们肉眼看不见的光,红外线最显著的特性是它具有热效应,也就是说所有高于绝对零度的物质都可以产生红外线。热释电模块利用菲尼尔透镜将人体发出的红外线聚焦到红外感应模块,经过比较放大电路处理后,最终输出高低电平信号。图示热释电模块当检测到运动的红外线发射体时返回高电平,否则返回低电平。ESP32智能硬件--初识ESP32|ESP32外部中断程序运行:上传程序,在热释电模块前移动身体,ESP32扩展板板载LED(D12)点亮。当身体静止时,板载LED灯熄灭。ESP32智能硬件--初识ESP32|Serial.printf()函数

Serial.printf()函数ESP32智能硬件--初识ESP32|Serial.printf()函数ArduinoC是C/C++语言的混合。在ESP32forArduino中,开放了C语言中常用的printf()函数。可以使用printf()函数方便的进行数据输出。Serial.printf(char*format,...);

功能:输出一个字符串,或者按指定格式和数据类型输出若干变量的值。

返回值:输出字符的个数。ESP32智能硬件--初识ESP32|Serial.printf()函数程序中printf()函数中%d、%c、%f为格式字符,\n为转义字符。Printf()函数示例输出小数位为3位的浮点数打开串口,Serial==1ESP32智能硬件--初识ESP32|Serial.printf()函数常用的格式字符和转义字符格式字符说明%o八进制整数输出%d十进制整数输出%x十六进制整数输出%f浮点输出,默认小数点6位%c单个字符输出%S字符串输出%u无符号十进制整数输出转义字符说明\n换行,将当前位置移到下一行开头\r回车,将当前位置移到本行开头\t水平制表,Tab符,跳到下一个Tab位置\b退格,将当前位置移到前一列ESP32智能硬件--初识ESP32|本章小结本章小结ESP32智能硬件--初识ESP32|本章小节小结本章讲述ESP32forArduino的基本I/O功能函数,和Arduino

for

AVR相比,功能更加丰富,有了本章的基础,大家会体验ESP32更加丰富精彩的性能。注意:由于部分器件在使用过程中需要调用系统的始终等其它外设,这导致原来在ArduinoAVR平台下可以使用的库在ESP32平台下不再可以使用,例如舵机Servo库。相关的库请到全国青少年机器人等级考试官方网站下载链接下载,下载链接为:/h-nd-288.html。ESP32智能硬件创新课程|数码管第二章数码管ESP32智能硬件创新课程|数码管目录一位数码管原理及数字显示

一位数码管数字显示--数组74HC595移位寄存器芯--按键驱动一位数码管数字显示--74HC595移位寄存器芯片

数码管计时器ESP32智能硬件--数码管|一位数码管原理及数字显示一位数码管原理及数字显示现在很多家电设备,例如热水器、电饭锅都有数码功能显示,显示的基本元器件就是数码管,本章我们学习如何使用数码管制作一个数码管计时器。通过学习使用,掌握数组的基本知识,74HC595移位寄存器芯片的使用、位操作函数。ESP32智能硬件--数码管|一位数码管原理及数字显示一位数码管工作原理数码管可以简单的理解为多个LED的集成,通常是用7个LED条排列成一个8字,再外加一个LED作为小数点,使用时控制某些LED点亮,某些LED熄灭组成0到9的数字显示。基本的数码管只能显示一个数字,称之为一位数码管,如下图所示,一位数码管为静态显示。ESP32智能硬件--数码管|一位数码管原理及数字显示ESP32智能硬件--数码管|一位数码管原理及数字显示一位数码管工作原理一位数码管模块上有10个引脚,上下各5个。其中有a~h共8个引脚分别对应数字的一个笔画。此外数码管内部是把这8个LED的阳极或阴极一端连接起来形成公共引脚,公共引脚分别位于数码管上下两侧的中央,作为公用引脚连接到8个LED的公共端。根据公共引脚的阴极或阳极的不同,数码管分为共阳极数码管和共阴极数码管,在数码管侧边会有文字标识,最后两个字母AS代表共阴极(公共端接地),BS代表共阳极(公共端接正极)。ESP32智能硬件--数码管|一位数码管原理及数字显示一位共阳极数码管1个100欧姆电阻

8个杜邦线

若干示例任务:通过编程实现数码管的数字显示。一位数码管数字显示示例ESP32智能硬件--数码管|一位数码管原理及数字显示由数码管原理可知,对于共阳极数码管,要显示数字“0”,将笔画g和h所对应的二极管引脚17和12输出高电平,其它引脚输出低电平,即可显示数字“0”。程序运行:在上述程序的基础上,编写程序显示剩下的其它数字。在编写过程中,体验有何不便,并想出相应的解决办法。ESP32智能硬件--数码管|一位数码管原理及数字显示--数组一位数码管原理及数字显示--数组ESP32智能硬件--数码管|一位数码管原理及数字显示--数组在之前的项目编写和运行过程中,我们发现显示不同数字的代码重复且基本雷同。在以前的学习中,我们可以通过循环结构和变量来执行重复的工作,在一位数码管显示项目中,数字各笔画对应的引脚和值没有规律,如何解决数据没有规律但动作又重复的任务呢?本项目我们学习编程中数据处理的利--数组。通过数组将无序的数据有序化从而实现自动化ESP32智能硬件--数码管|一位数码管原理及数字显示--数组一维数组的定义和初始化与我们学习的变量类似,数组是一组具有相同类型的变量的集合。在编程中碰到多个同一类型的数据时,除了给每个数据定义一个变量名外,我们还可以使用一个统一的名字来标识这组相同类型的数据,这个名字称为数组名。构成数组的每个数据称为数组元素。C语言通过数组的下标实现对数组元素的访问。数组定义格式如下:类型

数组名[元素个数];

例如:intpinArray[8]={17,25,26,14,13,16,15,27};或intpinArray[]={17,25,26,14,13,16,15,27};注意:定义数组时,不能使用变量定义数组的元素个数,数组元素的个数有时可以省略。C语言中数组的下标都是从0开始的。上述pinArray数组的元素从pinArray[0]~pinArray[7]。ESP32智能硬件--数码管|一位数码管原理及数字显示--数组一维数组的定义和初始化在引用数组元素时,一定注意数组的下标不要越界。否则会引起不可预知的后果。定义但未进行初始化的数组元素的值是随机数。定义数组时也可以给数组元素赋初值。方式有以下两种:intpinArray[8]={17,25,26,14,13,16,15,27};intpinArray[]={17,25,26,14,13,16,15,27};注意:初始化列表中提供的初值个数不能多于数组元素的个数,各元素间通过逗号隔开。若省略长度声明,那么系统会自动按照初始化列表中提供的初值个数对数组进行初始化,并确定数组的大小。所以只给部分数组元素赋初值时,对数组的长度声明不能省略。ESP32智能硬件--数码管|一位数码管原理及数字显示--数组二维数组的定义和初始化在定义一个二维数组,只要增加一维下标即可,二维数组的一般定义格式为:类型

数组名[第一维长度][第二维长度];二维数组,用两个下标确定各元素在数组中的顺序。可用排列成i行j列的元素表示。第一维的长度代表数组每一列的元素个数,第二维的长度代表数组中每一行的元素个数。例如:bytedigits[2][4];声明是一个具有2行4列共8个byte类型元素的二维数组。数组第一个元素的下标为digits[0][0],最后一个元素的下标为digits[1][3]。—第0列第1列第2列第3列第0行digits[0][0]digits[0][1]digits[0][2]digits[0][3]第1行digits[1][0]digits[1][1]digits[1][2]digits[1][3]ESP32智能硬件--数码管|一位数码管原理及数字显示--数组二维数组的定义和初始化二维数组初始化,既可以按元素初始化,也可以按行初始化。如下两行语句是等价的:bytedigits[2][4]={1,2,3,4,5,6,7,8};//按元素初始化bytedigits[2][4]={{1,2,3,4},{5,6,7,8},};//按行初始化当初始化列表给出数组全部元素的初值时,第一维的长度声明可以省略,此时系统将按初始化列表中提供的初值各组来定义数组的大小。例如以下两行语句的初始化结果与上两行是一样的:bytedigits[][4]={1,2,3,4,5,6,7,8};//按元素初始化bytedigits[][4]={{1,2,3,4},{5,6,7,8},};//按行初始化注意:数组第二维的长度声明永远都不能省略。ESP32智能硬件--数码管|一位数码管原理及数字显示--数组示例任务:通过数组编程实现数码管的数字显示当要显示某一数字时,直接将该数字作为数组digits第一维的值即可。sizeof()运算符用来获得数组中元素的长度,作用是返回一个对象或类型所占的内存字节数,sizeof(pinArray)返回值为8,sizeof(pinArray[0])返回值为1。元素digits[num][i]中,num对应要显示的数字,循环变量i对应数字各笔画LED灯的状态。因本项目为共阳极数码管,所以要对digits[num][i]的值使用“!”进行取反。程序运行:上传程序,数码管按照0~9和点的顺序依次显示。通过数组实现一位数码管显示示例如果我们不知道数组中元素的个数,这种方式可以帮助我们计算出元素个数动态显示ESP32智能硬件--数码管|74HC595移位寄存器芯片--按键驱动74HC595移位寄存器芯片--按键驱动ESP32智能硬件--数码管|74HC595移位寄存器芯片--按键驱动74HC595移位寄存器芯片简介项目二我们采用数组编程实现一位数码管显示,和项目一相比,程序的灵活性大大增强。不过,上面的项目中我们是直接使用开发板的IO口来控制数码管的,这种方式的优点就是理解起来比较直观,而缺点就是会占用过多的IO口,在控制板IO资源比较紧张的情况下,这种方式就不太适用了,这时通常需要一些额外的器件来帮助我们节省对IO口的使用,本项目我们就使用集成电路74HC595移位寄存器芯片来达到这个目的。ESP32智能硬件--数码管|74HC595移位寄存器芯片--按键驱动74HC595移位寄存器芯片简介74HC595是一个具有锁存功能的8位移位寄存器,能够支持3.3V逻辑电压。74HC595能够在20MHz或更高的频率下工作。74HC595移位寄存器是指集成电路的输入是串行一位一位的先后输入,而输出是并行同时输出的,每当有一个新的串行数据输入到集成电路中时,整个的并行输出数据就会整体往前移动一位。74HC595的封装形式有贴片和直插,为了方便与面包板配合使用,可以选用直插封装的集成电路。引脚标识说明1~7Q1~Q7并行数据输出管脚8GND电源地9Q7’串行数据输出,级联时接到下一个595的DS端10MR复位,低电平复位11SH_CP数据输入时钟线12ST_CP输出锁存时钟线13OE输出使能,通常置为低,即始终输出14DS串行数据输入15Q0并行数据输出管脚16VCC电源ESP32智能硬件--数码管|74HC595移位寄存器芯片--按键驱动74HC595移位寄存器芯片引脚功能表ESP32智能硬件--数码管|74HC595移位寄存器芯片--按键驱动74HC595移位寄存器芯片简介由移位寄存器和数据寄存器组成Ds引脚:输入数据SH_CP引脚:上升沿数据移位ST_CP引脚:上升沿更新数据1010010110100101串入并出74HC595--一位数码管模块本课程套件配备了74HC595直插芯片,为了减少学习过程中的线路搭接,同时配备了74HC595串入并出数码管模块。该模块已经集成了相应的限流电阻,极大方便了使用。ESP32智能硬件--数码管|74HC595移位寄存器芯片--按键驱动74HC595--一位数码管模块模块一共有5个引脚分别为G、V、D、C、L,其中:D(Date)和74595芯片的Ds数据引脚相连。C(Clock)和74595芯片SH_CP时钟引脚相连。L(Latch)和74595芯片的ST_CP锁存引脚相连接。ESP32智能硬件--数码管|74HC595移位寄存器芯片--按键驱动74HC595--一位数码管模块

1个一位共阳极数码管1个按键开关

2个10K电阻

2个杜邦线

若干ESP32智能硬件--数码管|74HC595移位寄存器芯片--按键驱动项目任务:通过按键控制74HC595移位寄存器芯片,在数码管输出数字0。按键控制74HC595--一位数码管模块示例准备:黄色数据线接VCC,连续按按键B8次,然后按按键A,此时一位数码管熄灭。操作一:黄色数据线接地,连续按按键B3次,然后按按键A,观看数码管的显示结果。ESP32智能硬件--数码管|74HC595移位寄存器芯片--按键驱动按键A和B都是下拉接法,当按键A和B按下时,都会输出高电平,产生一个上升沿脉冲。数据线接GND,表示74HC595芯片Ds数据引脚输入的数字为0,第一次按下B,会把数值0发送到芯片的Q0寄存器中。再次按下B,芯片会将Q0中的值移位到Q1,同时从Ds引脚输入数字0保存到Q0中。第三次按下B,芯片会将Q1、Q0中的值移位到Q2和Q1,同时从Ds引脚输入数字0保存到Q0中。此时按下A,产生一个上升沿的脉冲,芯片将移位寄存器中的数据转入存储寄存器,输出低电平,由于采用的共阳极数码管,所以笔画a/b/c点亮。电路操作ESP32智能硬件--数码管|74HC595移位寄存器芯片--按键驱动操作二:将黄色数据线连接到VCC,首先按一下按键B,然后按一下按键A,重复循环2次,观看数码管的显示结果。在操作一的基础上,分析操作二,分别按下两次按键A后的数码管会先后显示两个状态,如图所示。电路操作ESP32智能硬件--数码管|74HC595移位寄存器芯--按键驱动74HC595移位寄存器芯片工作原理74HC595芯片的Ds引脚是数据输入引脚;SH_CP引脚上升沿时移位寄存器中的数据依次移动一位,即Q0中的数据移到Q1中,Q1中的数据移到Q2中,以此类推;下降沿时移位寄存器中的数据保持不变;ST_CP引脚上升沿时移位寄存器中的数据进入存储寄存器,下降沿时存储寄存器中的数据保持不变。应用时通常ST_CP置为低电平,移位结束后再在ST_CP端产生一个正脉冲更新显示数据。注意:在实际操作过程中,有时会发生按键按下一次,数码管显示移动多位的情形。其原因还是因为按键按下和释放抖动造成的。ESP32智能硬件--数码管|一位数码管数字显示—74HC595移位寄存器芯片一位数码管数字显示--74HC595移位寄存器芯片ESP32智能硬件--数码管|一位数码管数字显示—74HC595移位寄存器芯片项目任务:本项目在之前的基础上,通过数组编程和74HC595移位寄存器芯片控制一位数码管输出指定的数字。74HC595--一位数码管模块

1个一位共阳极数码管1个杜邦线

若干74HC595实现一位数码管数字显示示例ESP32智能硬件--数码管|一位数码管数字显示—74HC595移位寄存器芯片为了便于大家理解,下面通过图示的方式,描述如何通过移位寄存器控制共阳极数码管显示数字“0”,整个过程分为步骤1~步骤3三个步骤。num[0]=~0xFC00000011110000001100000011000000ESP32智能硬件--数码管|一位数码管数字显示—74HC595移位寄存器芯片程序中采用一维数组,数组中每个元素采用十六进制(0x)表示,和之前项目不同,本程序利用一个字节有8位,将每个数字8个笔画的值保存到数据位(bit)中,这样大大节省程序内存消耗,数据占用内存仅为之前的八分之一。bitRead()函数是Arduino的内建函数,该函数的功能就是读取指定数据的指定位。由于采用的共阳极数码管,所以需要对bitRead(num[j],i)的值使用!进行取反。bitRead(val,n)返回值:被读取数指定位的值(1或者0)。val:要被读取的数。n:被读取的为。从0开始,0表示最右端的位。例:bitRead(0b11011010,2)的返回值为0。程序运行:上传本程序,数码管按照0~9、点的顺序依次显示。ESP32智能硬件--数码管|数码管计时器数码管计时器ESP32智能硬件--数码管|数码管计时器本项目,我们实现一个数码管计时器。通过按键启动计时,将时间以秒的形式显示在四位数码管上,再次按下按键,停止计时。和一位数码管不同,四位数码管我们采用由两块级联的74HC595移位寄存器芯片来控制显示。为了避免由于按键抖动造成操作异常,读取按键值要进行软件消抖处理。ESP32智能硬件--数码管|数码管计时器四位数码管工作原理本项目四位数码管由四个一位数码管组成。一共有12个引脚,其中4个为公共端com1~4,对应的引脚编号为12/9/8/6,另外8个引脚和一位数码管一样分别对应数字的各个笔画段。ESP32智能硬件--数码管|数码管计时器四位数码管工作原理四位共阳极数码管电路原理图如右图所示,所有4个数码管的8个显示笔划“a~h”的同名端连在一起。当单片机输出数字时,所有数码管都接收到相同的显示信息,但究竟是哪个数码管会显示数字,取决于对4个公共端com1~4的控制,因此公共端也称为选通端。只要将需要显示的数码管的选通端控制打开,该位就显示数字,没有选通的数码管就不会显示。与一位数码管静态显示方式不同,四位数码管的显示方式为动态显示,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象以及发光二极管的余晖效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,就不会有闪烁感,动态显示的效果和静态显示是一样的,能节省大量的I/O端口,而且功耗更低。ESP32智能硬件--数码管|数码管计时器双74HC595移位寄存器芯片级联模块工作原理知道四位数码管工作原理,如果采用1块74HC595芯片驱动,另外还需要4个引脚才能驱动,为了节省引脚资源,我们采用两块595芯片级联,这样只需要3个引脚就可以实现四位数码管显示驱动。本项目采用的模块由2片74HC595移位寄存器芯片级联。该模块可以同时驱动四位数码管和8x8LED点阵屏。ESP32智能硬件--数码管|数码管计时器双74HC595移位寄存器芯片级联模块工作原理模块中两块74HC595的ST_CP引脚相互连接在一起,SH_CP引脚相互连接在一起,第二块芯片的Ds引脚连接第一块芯片的Q7’。这样当从74HC595-1的Ds引脚串行输入数据,当数据输入的位数超过8位,会自动写入74HC595-2的Q0,依此类推。两块74HC595芯片实际上最多可控制8位数码管显示,本项目只使用了第2块芯片的Q0~Q3号引脚。ESP32智能硬件--数码管|数码管计时器双74HC595移位寄存器芯片级联模块工作原理右图显示了四位数码管各引脚和双595级联模块引脚对应关系图。要实现数码管显示指定数字,首先,打开该数字对应的选通端,然后根据显示的数字控制a~h引脚的高低电平即可实现数字显示。对于四位共阳极数码管,要在第2位显示数字“2”,74HC595移位寄存器芯片Q0~Q7引脚对应的值如图所示。000110100100000110100100ESP32智能硬件--数码管|数码管计时器示例任务:使用双74HC595模块在四位数码管指定位,显示指定的数字。在四位数码管第二位显示数字‘2’。四位共阳极数码管1个双74HC595移位寄存器级联模块1块杜邦线

若干电路搭设:使用杜邦线将74HC595模块连接到开发板,模块连接如右图所示。四位数码--单数显示示例ESP32智能硬件--数码管|数码管计时器bitSet()函数是Arduino的内建函数,该函数的功能是对数据的指定位进行置位操作,即将指定位设为1。bitSet()函数的调用格式为:bitSet(val,n);返回值:置位后的val。val:想要被置位的数。n:被置位的数,从0开始,0表示最右端的位。程序中bitSet(val,digit-1)的返回值为2,如下图所示:置位前val:置位后val:000000000000001076543210ESP32智能硬件--数码管|数码管计时器shiftOut()是系统提供的移位输出函数。该函数的功能是将一个字节的数据位一位一位移出,从最高(最左边)或最低(最右边)有效位开始,依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。该函数功能和右图功能一致。shiftOut(dataPin,clockPin,bitOrder,value);dataPin:数据输出引脚,对应74HC595的Ds引脚;clockPin:时钟引脚,对应74HC595的SH_CP引脚;bitOrder:输出位的顺序,最高位(MSBFIRST)优先或最低位(LSBFIRST)优先。Value:要移位输出的byte类型的数据。30~31行shiftOut()函数运行完毕,74HC595移位寄存器中的数据如下图所示001010100100Q7Q6Q5Q4Q3Q2Q1Q0Q7Q6Q5Q4Q3Q2Q1Q074HC595-274HC595-1Q7`ESP32智能硬件--数码管|数码管计时器程序中的~为按位取反操作符。NUM[2]按位取反运行如下图所示NUM[2]:~NUM[2]:在程序编写过程中,我们经常需要对位进行操作(对二进制数进行操作),ArduinoC语言提供的位操作符及说明如下表所示:1101101000100101位运算符含义说明示例位运算符含义说明示例&按位与

0011&0101---------------值0001~按位非~0101---------------值1010|按位或0011|

0101---------------值0111<<左移1<<0值11<<1值21<<8值256^按位异或0011^

0101---------------值0110>>右移2>>1值11024>>2值256ESP32智能硬件--数码管|数码管计时器在本项目和前一个项目中,我们学习到位读取函数bitRead()和置位函数bitSet()。Arduino还提供了如下常用的位操作函数:bitClear(val,n);功能:复位操作函数,将整数val指定位设置为0。返回值:复位操作后的val。val:要执行复位操作的数。n:要执行复位操作的位。从0开始,0表示最右端的位。bitWrite(val,n,b);功能:向整数指定位写入0或者1。返回值:执行写入操作后的val。val:要执行写入操作的数。n:要执行写入操作的位。从0开始,0表示最右端的位。b:要写入的值(1或者0)。ESP32智能硬件--数码管|数码管计时器按键消抖以前学习的按键控制LED灯,需要一直按着按键模块,本项目要通过按键开关控制LED灯,与我们日常生活中的房间灯的开关一样。要达到这种效果,一般是通过对比当前和先前两次按键值的变化,来判断按键是否按下或释放。此外一次按键动作在按下和释放的过程中,对上位按键模块来说,按键返回值经历了由1-0和由0-1两次变化,本项目中将按键做开关来使用,所以仅需取其中的一次状态变化作为输入,常用的获取按键释放时的状态,即值由0-1时的状态变化作为输入。按下释放HIGH(1)LOW(0)ESP32智能硬件--数码管|数码管计时器按键消抖按键在按下和释放的瞬间,按键内金属簧片接触是一个连续通断的过程,一般称之为抖动,分为前沿抖动和后沿抖动。为了确保主控板对一次按键的操作仅做一次处理,必须进行按键消抖。按键消抖分为软件消抖和硬件消抖。硬件消抖是通过硬件电路来实现,成本稍高。软件消抖是通过程序逻辑设计的方式进行消抖。常用的软件消抖是通过延时delay()函数来实现。按键抖动时长一般为2~10ms,常用做法是在检测到按键状态变化后,延时10~20ms,跳过抖动区,再进行按键状态检测。本项目采用系统提供的millis()函数来实现消抖,避免因为执行delay()而导致程序效率的下降。ESP32智能硬件--数码管|数码管计时器示例任务:按下并释放按键模块,板载LED灯(GPIO12)点亮,再次按下并释放按键模块,LED灯熄灭,依此延续。按键模块(上拉)1个39数据线1根电路搭设:使用3P数据线将按键模块连接到开发板GPIO26引脚按键--开关控制LED灯(按键消抖)示例ESP32智能硬件--数码管|数码管计时器millis()函数是Arduino的内建函数,该函数的功能就是返回开发板运行当前程序开始的毫秒数。millis()函数的调用格式为:millis();返回值:返回当前程序自开始运行至当前的时间,单位毫秒。程序行31首先判断当前按键值和先前的按键状态是否相等,如不等,则表明按键状态发生了变化。程序行33将按键释放时(后沿)作为输入,来切换keyFlag状态变量值的变化。程序运行中,首次按键按下并释放,LED灯点亮,再次按下并释放按键,LED灯熄灭,依次延续。ESP32智能硬件--数码管|数码管计时器示例任务:按键按下,启动计时,再次按下按键,计时停止。在四位数码管上显示两次按键的时间间隔,单位毫秒。双74HC595移位寄存器级联模块1块4位共阳极数码管1根按键模块1个3P数据线1根杜邦线若干电路搭设:将4位数码管插接到双595输出模块,注意四位数码管的有字边和模块上的标识一致。按键计时器示例ESP32智能硬件--数码管|数码管计时器程序行29~38用于执行,当状态变量keyFlag为true时,记录当前时间到变量currentTime,开始计

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论