版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2相关知识34任务小结与练习1任务实施任务引入与目标ESP32的Serial2操作一、任务引入与目标任务目标任务7实现串口设备A的按键按下后,通过Serial2发送控制命令给串口设备B。其中,A设备以JSON格式发送字符串,B设备接收解析后控制LED亮灭。任务引入前面几个任务都是针对Serial操作的,Serial比较适合用于程序打印调试信息。如果要进行与其他串口设备的串口通信,则使用Serial2串口是比较方便的。二、相关知识Arduino中的宏定义在Arduino中,宏定义是一种预处理指令,可以用来创建常量或简化代码。通过宏定义,程序员可以在程序中使用自定义的符号来代替常量或表达式。例如:#defineLED_PIN13该宏定义13为LED_PIN,这样我们就可以在程序中使用LED_PIN来代替数字13。如果我们要改变使用的引脚,则只需要修改这个宏定义,而不需要修改整个程序。强制类型转换在Arduino中,强制类型转换是将一种数据类型的值转换为另一种数据类型的值的过程。强制类型转换可以帮助我们在不同数据类型之间进行转换,并允许我们使用不同的算术和逻辑操作。比较常见的是C语言风格的强制类型转换,这种转换使用括号将要转换的值包围起来,并指定要转换的目标类型。例如:intx=10;floaty=(float)x;在这个例子中,我们将整数变量x强制转换为浮点数,并将结果存储在浮点型变量y中。三、任务实施实施设备部署了Arduino开发环境的计算机。实施过程1.硬件连接串口的引脚可以查看表1-2。引脚连接如下:Button_out———ESP32A_IO26
Button_GND———ESP32A_GNDButton_VCC———ESP32A_VCC
ESP32A_IO17———ESP32B_IO16ESP32A_IO16———ESP32B_IO17
ESP32A_GND———ESP32B_GNDLED_R———ESP32B_IO25
LED_GND———ESP32B_GND串口名Arduino名TXRXUART0Serialpin1(TXD0)pin3(RXD0)UART1Serial1pin10pin9UART2Serial2pin17pin16表1-2ESP32的串口引脚三、任务实施连接示意如图1-19所示。实物连接如图1-20所示。图1-19任务7硬件连接示意图图1-20任务7硬件连接实物图三、任务实施constintbuttonPin=26;//thenumberofthepushbuttonpinintbuttonState=0;//variableforreadingthepushbuttonstatusuint16_tLightStatus=0;voidsetup(){Serial.begin(9600);Serial2.begin(9600);pinMode(buttonPin,INPUT);}voidloop(){buttonState=digitalRead(buttonPin);}2.设备A程序(1)按键检测。在02-Button的示例程序基础上修改,代码如下:if(buttonState==HIGH){if(LightStatus==0){Serial2.print("{\"LightStatus\":0}\n");Serial.print("{\"LightStatus\":0}\n");LightStatus=1;}else{Serial2.print("{\"LightStatus\":1}\n");Serial.print("{\"LightStatus\":1}\n");LightStatus=0;}}三、任务实施下载运行,发现每按下一次,设备A的Serial会打印很多条内容,说明按下一次会检测到多次,如图1-21所示。这是什么原因呢?需要了解一下按键的知识,如图1-22所示。从按键按下之后输出电平的变化可知:对按键的检测,需要考虑干扰情况(需要延时再检测),再考虑按键长按的情况(需要等待释放)。图1-21打印按键检测结果图1-22按键电路输出电平变化情况三、任务实施constintbuttonPin=26;//thenumberofthepushbuttonpinintbuttonState=0;//variableforreadingthepushbuttonstatusuint16_tLightStatus=0;voidsetup(){Serial.begin(9600);Serial2.begin(9600);pinMode(buttonPin,INPUT);}(2)增加消抖和等待释放处理的按键检测。在上面分析的基础上,修改代码如下:voidloop(){//buttonState=digitalRead(buttonPin);if(digitalRead(buttonPin)==HIGH){delay(10);//延时消抖if(digitalRead(buttonPin)==HIGH){while(digitalRead(buttonPin));//等待释放//Serial2发送给设备B,并从Serial打印if(LightStatus==0){Serial2.print("{\"LightStatus\":0}\n");Serial.print("{\"LightStatus\":0}\n");LightStatus=1;}else{Serial2.print("{\"LightStatus\":1}\n");Serial.print("{\"LightStatus\":1}\n");LightStatus=0;}}}三、任务实施延时的时间为10ms,运行发现工作正常了,每按下一次按键,只会打印一次,如图1-23所示。当按键按下后,除了从Serial打印{"LightStatus":1}(已经看到的效果),也从Serial2输出同样的字符串,这个字符串是满足JSON对象格式的,供Serial所连接的设备B解析处理。图1-23考虑消抖和等待释放后的按键检测结果3.设备B程序使用之前的OneKeyValue程序。将Serial接收改为Serial2接收,Serial2也需要初始化,解析过程不变。代码如下:#include<ArduinoJson.h>StringinputString="";//aStringtoholdincomingdataboolstringComplete=false;//whetherthestringiscomplete//引脚定义#defineLIGHT25//产品标识符StringIdentifier="LightStatus";三、任务实施voidsetup(){//initializeserial:Serial.begin(9600);Serial2.begin(9600);//reserve200bytesfortheinputString:inputString.reserve(200);pinMode(LIGHT,OUTPUT);}voidloop(){//printthestringwhenanewlinearrives:if(stringComplete){Serial.println(inputString);//解析,控制,约定Json格式:{"LightStatus":1},{"LightStatus":0}StaticJsonBuffer<200>jsonBuffer;JsonObject&root=jsonBuffer.parseObject(inputString);if(!root.success()){Serial.println("parseObject()failed");inputString="";stringComplete=false;return;}constchar*val=root[Identifier];if(val!=NULL){constuint16_tLightStatus=root[Identifier];if(LightStatus==1){digitalWrite(LIGHT,HIGH);}else{digitalWrite(LIGHT,LOW);}Serial.print("LightStatus:");Serial.println(LightStatus);}//clearthestring:inputString="";stringComplete=false;}serial2Event();}三、任务实施图1-25开灯效果4.结果展示设备A每按下一次按键,会发送一个命令给设备B,比如某一次按下后控制LED熄灭,如图124所示;下一次按下后,就可以控制LED点亮,如图1-25所示。通过设备A的按键,控制设备B的LED灯,工作正常。voidserial2Event(){while(Serial2.available()){//getthenewbyte:charinChar=(char)Serial2.read();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大学暑假实习报告范文集合四篇
- 春季开学典礼校长演讲稿集合5篇
- 大学毕业生自我鉴定(8篇)
- 幼儿教师辞职申请书集锦9篇
- 地理教师教学工作计划范文
- 顺驰太阳城二期可行性研究报告
- 休闲食品的品牌战略比较
- 七年级语文下册教学工作总结
- 借款约束协议书(2篇)
- 2025年果蔬自动清选、分级设备合作协议书
- 法治副校长进校园教育
- 北京市石景山区2023-2024学年七年级上学期期末考试数学试卷(含答案)
- 2025版寒假特色作业
- 江西省吉安市2023-2024学年高一上学期1月期末考试政治试题(解析版)
- 国内外航空安全形势
- 零售业发展现状与面临的挑战
- 2024年版汽车4S店商用物业租赁协议版B版
- 《微观经济学》习题(含选择题)
- 微信小程序云开发(赤峰应用技术职业学院)知到智慧树答案
- 2024-2025学年上学期福建高二物理期末卷2
- 2024-2025年第一学期小学德育工作总结:点亮德育灯塔引领小学生全面成长的逐梦之旅
评论
0/150
提交评论