项目1任务6-多成员 JSON对象的 JSON解析_第1页
项目1任务6-多成员 JSON对象的 JSON解析_第2页
项目1任务6-多成员 JSON对象的 JSON解析_第3页
项目1任务6-多成员 JSON对象的 JSON解析_第4页
项目1任务6-多成员 JSON对象的 JSON解析_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

2相关知识34任务小结与练习1任务实施任务引入与目标多成员JSON对象的JSON解析一、任务引入与目标任务目标任务6对串口接收的JSON对象格式数据进行解析,串口收到的字符串可能是:针对1个灯的:{"RedStatus":1}或{"RedStatus":0},{"BlueStatus":1}或{"BlueStatus":0}。针对2个灯的:{"RedStatus":1,"BlueStatus":0}或{"RedStatus":1,"BlueStatus":1},{"RedStatus":0,"BlueStatus":0}或{"RedStatus":0,"BlueStatus":1}。我们只有通过合理的设计,才能避免类似这个错误:发送控制红灯命令时,蓝灯却熄灭了。任务引入任务5通过对由一个成员组成的JSON对象数据的解析,实现了对LED的控制。如果希望控制多个灯、多个设备,那就需要由多个成员组成的JSON对象数据。二、相关知识字符串对象使用字符串对象的好处是可以方便地进行字符串的拼接和处理。例如,要定义一个字符串对象并将其初始化为“HelloWorld!”,可以使用以下代码:StringmyString="HelloWorld!";注意,在使用字符串对象时需要注意内存的分配,因为字符串对象会动态分配内存。如果不小心使用了太多的字符串对象,则可能会导致内存耗尽而程序崩溃。字符数组使用字符数组定义字符串可以避免上述问题,但与字符串对象相比,它更难以操作和处理。例如,要定义一个字符数组并将其初始化为“HelloWorld!”,可以使用以下代码:charmyString[]="HelloWorld!";需要注意的是,字符数组的长度需要足够容纳所存储的字符串,而且在定义后无法动态调整大小。在Arduino中,可以使用字符串对象、字符数组或字符串指针来定义字符串。二、相关知识字符串指针在Arduino中,我们可以通过指针来定义字符串。这种方法与字符数组的方式类似,但使用指针可以更好地控制和操作内存。例如,要定义一个指向字符串常量“Hello

World!”的指针,可以使用以下代码:constchar*myString="HelloWorld!";在这个例子中,我们使用了const关键字来指定myString指针所指向的字符串是一个常量,并且不允许修改。需要注意的是,当使用指针定义字符串时,必须确保所指向的内存不会被意外修改,否则可能会导致程序出现未知错误。因此,在使用指针定义字符串时,我们应该尽可能避免对它们进行写入操作。三、任务实施实施设备部署了Arduino开发环境的计算机。实施过程1.程序设计代码如下:#include<ArduinoJson.h>StringinputString="";//aStringtoholdincomingdataboolstringComplete=false;//whetherthestringiscomplete//引脚定义#defineLIGHT_RED25#defineLIGHT_BLUE26//产品标识符StringIdentifier1="RedStatus";StringIdentifier2="BlueStatus";voidsetup(){//initializeserial:Serial.begin(9600);//reserve200bytesfortheinputString:inputString.reserve(200);pinMode(LIGHT_RED,OUTPUT);pinMode(LIGHT_BLUE,OUTPUT);}三、任务实施voidloop(){//printthestringwhenanewlinearrives:if(stringComplete){Serial.println(inputString);//解析,控制,约定JSON格式//红灯:{"RedStatus":1},{"RedStatus":0}//蓝灯:{"BlueStatus":1},{"BlueStatus":0}//针对2个灯:{"RedStatus":1,"BlueStatus":1},{"RedStatus":0,"BlueStatus":0}StaticJsonBuffer<200>jsonBuffer;JsonObject&root=jsonBuffer.parseObject(inputString);2.程序设计if(!root.success()){Serial.println("parseObject()failed");inputString="";stringComplete=false;return;}constchar*val1=root[Identifier1];constchar*val2=root[Identifier2];if(val1!=NULL){constuint16_tRedStatus=root[Identifier1];if(RedStatus==1){digitalWrite(LIGHT_RED,HIGH);}else{digitalWrite(LIGHT_RED,LOW);}Serial.print("RedStatus:");Serial.println(RedStatus);}三、任务实施if(val2!=NULL){constuint16_tBlueStatus=root[Identifier2];if(BlueStatus==1){digitalWrite(LIGHT_BLUE,HIGH);}else{digitalWrite(LIGHT_BLUE,LOW);}Serial.print("BlueStatus:");Serial.println(BlueStatus);}//clearthestring:inputString="";stringComplete=false;}serialEvent();}voidserialEvent(){while(Serial.available()){//getthenewbyte:charinChar=(char)Serial.read();//addittotheinputString:inputString+=inChar;//iftheincomingcharacterisanewline,setaflagsothemainloopcan//dosomethingaboutitif(inChar==\'n'){stringComplete=true;}}}三、任务实施和任务5中的代码相比,本任务初始化、解析都是针对多个灯,但基本的逻辑是一样的。简要介绍一下:一是先转换再解析,转换过程可能不成功,程序中通过success方法判断root对象是否是JSON对象;二是解析两次,避免收到控制红灯命令时关闭蓝灯的误操作,也避免了收到控制蓝灯命令时关闭红灯的误操作。3.运行效果硬件方面,ESP32接三色灯的2个数据引脚即可,其中IO25接R引脚,IO26接B引脚。下载程序后,打开串

温馨提示

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

评论

0/150

提交评论