晕船海盗 发表于 2016-10-19 05:57 上板测试了下,不行呢,还是只能控制红灯开关。绿灯、蓝灯不行。现在在研究数据点问题,搞不懂在arduino IDE 怎么回事。。 |
伯乐 发表于 2016-10-13 23:30 这个地方你直接把LED_r ,LED_g, LED_b 定义成 bool格式,下面就无法对LED调亮度了,只能控制亮和灭。 |
本帖最后由 晕船海盗 于 2016-10-19 05:58 编辑 伯乐 发表于 2016-10-18 23:24 /******** typedef enum { SetLED_OnOff = 0x01, SetLED_Color = 0x02, SetLED_R = 0x04, SetLED_G = 0x08, SetLED_B = 0x10, SetMotor = 0x20, } Attr_FlagsTypeDef; ********/ typedef enum { LED_OnOff = 0x00, LED_OnOn = 0x01, } LED_TypeDef; typedef struct { uint8_t LED; } ReadTypeDef_t; typedef struct { uint8_t Attr_Flags; uint8_t LED; } WirteTypeDef_t; WirteTypeDef_t WirteTypeDef; ReadTypeDef_t ReadTypeDef; void GizWits_GatherSensorData(void); void GizWits_ControlDeviceHandle(void); void GizWits_ControlDeviceHandle(void) { if ( (WirteTypeDef.Attr_Flags & (1 << 0)) == (1 << 0)) { if (WirteTypeDef.LED & (1 << 0) == (1 << 0)) { ReadTypeDef.LED |= (1 << 0); LED_RGB_Control(254, 0, 0); Serial.print(WirteTypeDef.LED); Serial.println("LED"); } else { ReadTypeDef.LED &= ~(1 << 0); LED_RGB_Control(0, 0, 0); } } if ( (WirteTypeDef.Attr_Flags & (1 << 1)) == (1 << 1)) { if (WirteTypeDef.LED & (1 << 1) == (1 << 1)) { ReadTypeDef.LED |= (1 << 1); LED_RGB_Control(0, 254, 0); Serial.print(WirteTypeDef.LED); Serial.println("LED"); } else { ReadTypeDef.LED &= ~(1 << 1); LED_RGB_Control(0, 0, 0); } } if ( (WirteTypeDef.Attr_Flags & (1 << 2)) == (1 << 2)) { if (WirteTypeDef.LED & (1 << 2) == (1 << 2)) { ReadTypeDef.LED |= (1 << 2); LED_RGB_Control(0, 0, 254); } else { ReadTypeDef.LED &= ~(1 << 2); LED_RGB_Control(0, 0, 0); } } } |
本帖最后由 伯乐 于 2016-10-18 23:26 编辑 true 发表于 2016-10-17 11:01 你好,谢谢解答。按你的写法呢,下面的判断如何写啊,我写的你看看,还是不行。。。标志位 数据点 结构体,一直没理清思路。麻烦帮忙看看,以后好整理点教程出来。谢谢!
|
晕船海盗 发表于 2016-10-14 06:18 谢谢,哥们解答,现在判断哪里又有点小问题。。 |
“字节序(及byte序)”表示按字节为单位从高往低依次排列 “bit序(及位序)”表示按位从低往高位依次排列 这部分可以看论坛中的教学资料,要结合串口输出的协议内容来理解。 结构体的定义楼上说的对,但建议改成如下: typedef struct { uint8_t LED_R; #此处定 bool型R灯的有效位判断 uint8_t LED_G;#此处定 bool型G灯的有效位判断 uint8_t LED_B;#此处定 bool型B灯的有效位判断 }ReadTypeDef_t; typedef struct { uint8_t Attr_Flags; uint8_t LED; #此处定义的LED是一个byte 前三位 为 LED_r LED_g LED_b }WirteTypeDef_t; |
本帖最后由 晕船海盗 于 2016-10-14 06:21 编辑 伯乐 发表于 2016-10-13 23:30 arduino程序 结构体中对数据定义错误 typedef struct { uint8_t Attr_Flags; uint8_t LED; #此处定义的LED是一个byte 前三位 为 LED_r LED_g LED_b } 后面的程序 对 LED变量进行移位判断 你这个程序最直接改法 就是 后面的 LED_g,LED_b 也改成 LED_r |
楼主你数据点没有理解对,云端定的bool型数据点,代码里按数值型数据点解析了,请结合对应的通信协议文档进行修改,也可参考官网示例工程中的bool型数据点的用法。 |
没人懂?? |
版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )