arduino底板开发,数据点定义问题
请教下各位关于arduino底板数据点定义,,我定义了三个数据点:LED_r,LED_g,LED_b,布尔值,三个按钮。以下是代码定义:
以下是调试输出数据:每个按钮操作两次,开、关。
可以看第一个按钮值正常,LED_r,灯正常运行,,第二个,第三个就不正常了。。这是怎么回事呢?数据点没定义好么。
贴上份代码:
没人懂??:L 楼主你数据点没有理解对,云端定的bool型数据点,代码里按数值型数据点解析了,请结合对应的通信协议文档进行修改,也可参考官网示例工程中的bool型数据点的用法。 true 发表于 2016-10-13 11:58
楼主你数据点没有理解对,云端定的bool型数据点,代码里按数值型数据点解析了,请结合对应的通信协议文档进 ...
你好,哥们 对的,一直对这里不理解,不怎么这么设置,你帮忙看看这里。
本帖最后由 晕船海盗 于 2016-10-14 06:21 编辑
伯乐 发表于 2016-10-13 23:30
你好,哥们 对的,一直对这里不理解,不怎么这么设置,你帮忙看看这里。
arduino程序 结构体中对数据定义错误
typedef struct
{
uint8_tAttr_Flags;
uint8_tLED; #此处定义的LED是一个byte前三位 为 LED_rLED_gLED_b
}
后面的程序 对LED变量进行移位判断
你这个程序最直接改法就是 后面的 LED_g,LED_b也改成 LED_r
“字节序(及byte序)”表示按字节为单位从高往低依次排列
“bit序(及位序)”表示按位从低往高位依次排列
这部分可以看论坛中的教学资料,要结合串口输出的协议内容来理解。
结构体的定义楼上说的对,但建议改成如下:
typedef struct
{
uint8_tLED_R; #此处定 bool型R灯的有效位判断
uint8_tLED_G;#此处定 bool型G灯的有效位判断
uint8_tLED_B;#此处定 bool型B灯的有效位判断
}ReadTypeDef_t;
typedef struct
{
uint8_tAttr_Flags;
uint8_tLED; #此处定义的LED是一个byte前三位 为 LED_rLED_gLED_b
}WirteTypeDef_t;
晕船海盗 发表于 2016-10-14 06:18
arduino程序 结构体中对数据定义错误
typedef struct
{
谢谢,哥们解答,现在判断哪里又有点小问题。。 本帖最后由 伯乐 于 2016-10-18 23:26 编辑
true 发表于 2016-10-17 11:01
“字节序(及byte序)”表示按字节为单位从高往低依次排列
“bit序(及位序)”表示按位从低往高位依次排列 ...
你好,谢谢解答。按你的写法呢,下面的判断如何写啊,我写的你看看,还是不行。。。标志位 数据点 结构体,一直没理清思路。麻烦帮忙看看,以后好整理点教程出来。谢谢!
/******************
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_r;
uint8_t LED_g;
uint8_t LED_b;
} ReadTypeDef_t;
typedef struct
{
uint8_t Attr_Flags;
uint8_t LED;
} WirteTypeDef_t;
WirteTypeDef_tWirteTypeDef;
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 == LED_OnOn)
{
ReadTypeDef.LED_r = LED_r;
LED_RGB_Control(254, 0, 0);
Serial.print(WirteTypeDef.LED);
Serial.println("LED");
}else{
ReadTypeDef.LED_r = false;
LED_RGB_Control(0, 0, 0);
}
}
if ( (WirteTypeDef.Attr_Flags & (1 << 1)) == (1 << 1))
{
if (WirteTypeDef.LED == LED_OnOn)
{
ReadTypeDef.LED_g = LED_g;
LED_RGB_Control(0, 254, 0);
Serial.print(WirteTypeDef.LED);
Serial.println("LED");
}else{
ReadTypeDef.LED_g = false;
LED_RGB_Control(0, 0, 0);
}
}
if ( (WirteTypeDef.Attr_Flags & (1 << 2)) == (1 << 2))
{
if (WirteTypeDef.LED == 0x01)
{
ReadTypeDef.LED_b = LED_b;
LED_RGB_Control(0, 0, 254);
}else{
ReadTypeDef.LED_b = false;
LED_RGB_Control(0, 0, 0);
}
}
}
本帖最后由 晕船海盗 于 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_tWirteTypeDef;
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-13 23:30
你好,哥们 对的,一直对这里不理解,不怎么这么设置,你帮忙看看这里。
这个地方你直接把LED_r ,LED_g, LED_b定义成 bool格式,下面就无法对LED调亮度了,只能控制亮和灭。 晕船海盗 发表于 2016-10-19 05:57
/********
typedef enum
{
上板测试了下,不行呢,还是只能控制红灯开关。绿灯、蓝灯不行。现在在研究数据点问题,搞不懂在arduino IDE 怎么回事。。
页:
[1]