(2)小彩灯接收数据解析

const size_t t_bright=1,t_color=2,t_frequency=3,t_switch=4;
int red = 0,green = 0,blue = 0;
int type = 2;//当前模式 1亮度 2颜色 3呼吸 4开关

/**
     * @Desc 解析json
     * 有三种
     * 1.亮度控制页面(0 暗 1正常 2亮)
     * {
     *     "t": 1,
     *     "bb": 2
     * }
     * 2.颜色控制页面
     * {
     *     "t": 2,
     *     "cr": 154,
     *     "cg": 147,
     *     "cb": 255
     * }
     * 3.呼吸灯控制页面(0 慢呼吸 1正常 2快)
     * {
     *    "t": 3,
     *    "gf": 1
     * }
     * 4.开关控制(0关闭 1开启)
     * {
     *    "t": 4,
     *    "ss": 1
     * }
     **/
bool parseData(char* content) {

 
   String str(content); 
    
  type = JsontoString(str,"ledmode");//分割调用
  switch(type){ 
    case t_color:
         red = JsontoString(str,"cr");//分割调用
         green = JsontoString(str,"cg");//分割调用
         blue =  JsontoString(str,"cb");//分割调用
         colorRGB(red,green,blue);
         break;
   
  }
  return true;
}

/**
* 控制RGB颜色
*/
void colorRGB(int red, int green, int blue){

     analogWrite(PIN_RED,constrain(red,0,255));
//Serial.println(constrain(red,0,255));
      analogWrite(PIN_GREEN,constrain(green,0,255));
   //Serial.println(constrain(green,0,255));
    analogWrite(PIN_BLUE,constrain(blue,0,255));
//Serial.println(constrain(blue,0,255));
 
 
}

/*数说明: 从Json格式的String中,截取对应键值
输入:  String 数据帧 String 键名
输出:  int 类型的 键值
示例;
  String m=  "{\"ledmode\":2,\"cr\":ff,\"cg\":a,\"cb\":1}";
  int a=JsontoString(m,"ledmode");//分割调用
结果: a=2;
*/
int  JsontoString(String zifuchuan,String fengefu)
  {
  fengefu="\""+fengefu+"\"";
  int weizhi_KEY; //找查的位置
  int weizhi_DH;
  String temps;//临时字符串
 weizhi_KEY = zifuchuan.indexOf(fengefu);//找到位置
 temps=zifuchuan.substring( weizhi_KEY+fengefu.length(), zifuchuan.length());//打印取第一个字符
 weizhi_DH = weizhi_KEY+fengefu.length()+ temps.indexOf(‘,‘);//找到位置
 if( temps.indexOf(‘,‘)==-1){
  // weizhi_DH = weizhi_KEY+fengefu.length()+ temps.indexOf(‘}‘);//找到位置
 weizhi_DH = zifuchuan.length()-1;
  }
 temps="";
  temps=zifuchuan.substring( weizhi_KEY+fengefu.length()+1,  weizhi_DH);//打印取第一个字符
//  Serial.print(temps);
//  Serial.print("---");

 return StringtoHex(temps);
  }

/*说明 String 转 16进制对应的10进制数
输入:  String
输出:  int
示例:
FF   255
ff   255
1    1
*/
int StringtoHex(String temps)
  {
  int l=0;
  int p=1;
  for (int i = temps.length()-1; i >=0; i--) {
   if(temps[i]==‘a‘||temps[i]==‘b‘||temps[i]==‘c‘||temps[i]==‘d‘||temps[i]==‘e‘||temps[i]==‘f‘){
     l+=((int)(temps[i]-‘a‘)+10)*p;
    p*=16;
   }
   else if(temps[i]==‘A‘||temps[i]==‘B‘||temps[i]==‘C‘||temps[i]==‘D‘||temps[i]==‘E‘||temps[i]==‘F‘){
     l+=((int)(temps[i]-‘A‘)+10)*p;
    p*=16;
   }
   else if(temps[i]==‘0‘||temps[i]==‘1‘||temps[i]==‘2‘||temps[i]==‘3‘||temps[i]==‘4‘||temps[i]==‘5‘||temps[i]==‘6‘||temps[i]==‘7‘||temps[i]==‘8‘||temps[i]==‘9‘)
   {
      l+=(int)(temps[i]-‘0‘)*p;
    p*=16;

    }

 }
 // Serial.println(l);
  return  l;

    }

    /*
说明 String 转 10进制对应的10进制数
输入:  String
输出:  int
示例:
1023  1023
1    1
*/
int StringtoInt(String temps)
  {

  

原文地址:https://www.cnblogs.com/kekeoutlook/p/9122893.html

时间: 2024-11-09 03:48:26

(2)小彩灯接收数据解析的相关文章

LR socket接收数据 标准函数,结构体解析

//接收 DWORD RecvBuf(char* cRecvBuf,char* cSocketName,char* cBufName){    int ret=0;    char * cRecvdata=0;    int iRecvdatalen=0;    DWORD begin=0,cur=0;    begin=clock();    while(1)    {        ret=lrs_receive(cSocketName,cBufName,LrsLastArg);      

Android中XML数据解析

转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38296207 XML初步 今天我们来学习另一种非常重要的数据交换格式-XML.XML(Extensible Markup Language的缩写,意为可扩展的标记语言),它是一种元标记语言,即定义了用于定义其他特定领域有关语义的.结构化的标记语言,这些标记语言将文档分成许多部件并对这些部件加以标识.XML 文档定义方式有:文档类型定义(DTD)和XML Schema.DTD定义了文

数据解析详解

1.什么是JSON数据. { 1.JSON:是一种轻量级的传输数据格式,用于数据交互. JSON是javascript语言的一个子集.javascript是个脚本语言(不需要编译),用来给HTML增加动态功能. javascript和java没有半毛钱的关系! 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外). 语法规则: <1> 数据以键值的方式保存; 键(key)必须用双引号("key"),与键值之间以':'分隔; {"name&q

【iOS】Plist-XML-JSON数据解析

网络上传输数据通用的有XML,JSON等,iOS中也可以用Plist. 要进行数据传输,就要首先进行序列化: 1.序列化. 对象转换成二进制流.(这个一句话就行) 2.反序列化. 二进制流转换为对象等. (关键要弄清楚这个) JSON:(和XML一样都是用来传数据的) 轻量级的数据交换格式,正在逐步取代XML. XML: 结构性的标记语言,易读.但数据量大. Plist偶尔用着玩玩: Mac.iOS中用的多一种格式. 一.应用场景 1.XML的应用场景: XMPP--即时通讯,KissXML R

C# 串口操作系列(3) -- 协议篇,二进制协议数据解析

C# 串口操作系列(3) -- 协议篇,二进制协议数据解析 标签: c#bufferobject通讯byte硬件驱动 2010-05-27 09:54 51565人阅读 评论(215) 收藏 举报  分类: 通讯类库设计(4)  版权声明:本文为博主原创文章,未经博主允许不得转载. 我们的串口程序,除了通用的,进行串口监听收发的简单工具,大多都和下位机有关,这就需要关心我们的通讯协议如何缓存,分析,以及通知界面. 我们先说一下通讯协议.通讯协议就是通讯双方共同遵循的一套规则,定义协议的原则是尽可

接收数据:自适应缓冲区和连接读是为了解决什么问题

接收数据:自适应缓冲区和连接读是为了解决什么问题 目录 接收数据:自适应缓冲区和连接读是为了解决什么问题 1. 主线分析 1.1 读数据技巧 1.2 主线 1.2 知识点 2. 源码分析 2.1 接收数据 2.2 AdaptiveRecvByteBufAllocator Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 到目前为止,我们已经启动服务,并接收了客户端连接,双方已经可以正式通信.下面就要处理请求:接收数据.业务

iOS网络数据解析

iOS开发过程中,网络数据的传输过程一般是:客户端发送请求给服务器,服务器接收到客户端发送的网络请求后返回相应的数据.此时客户端需要把服务器返回的数据转化为前段和移动端开发中使用的数据格式(如OC/java).后台服务器一般使用php.java..net进行开发,而前段和移动端使用的一般是OC/JAVA/HTML/CSS/JS,做好前后端的数据交互极为重要,如今数据交互常用的就是JSON和XML.下面就iOS开发过程中的JSON解析和XML解析进行简单的说明. 一.JSON解析 JSON是一种轻

GPS(NMEA)数据解析

一.GPS定位信息 设置好gps模式,启动gps,正常的话在gps通路有NMEA数据上报,如下: $GPGSV,3,1,11,01,62,130,42,07,61,201,43,11,72,075,28,17,20,251,38*7A $GPGSV,3,2,11,30,63,272,44,03,00,149,,08,34,046,,13,05,309,*76 $GPGSV,3,3,11,22,08,127,,27,03,057,,28,34,312,*4C $GPGGA,042523.0,341

GPS数据解析

1.摘要 GPS模块使用串口通信,那么它的的数据处理本质上还是串口通信处理,只是GPS模块的输出的有其特定的格式,需要字符串处理逻辑来解析其含义.如何高效的处理从GPS模块接收到的数据帧,是GPS驱动设计的重点,本文使用状态机的思想来处理GPS输出的串口数据流,相对于定时从串口环形bufer取数据包然后依次解析有更高的实时性并且单片机负荷更低. 2. GPS数据协议简介 常用的GPS模块大多采用NMEA-0183 协议,目前业已成了GPS导航设备统一的RTCM(Radio Technical C