收藏官网首页

arduino底板开发,数据点定义问题

查看数: 21364 | 评论数: 10 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-10-11 11:42

正文摘要:

请教下各位关于arduino底板数据点定义,,我定义了三个数据点:LED_r,LED_g,LED_b,布尔值,三个按钮。

回复

伯乐 发表于 2016-10-19 21:18:22
晕船海盗 发表于 2016-10-19 05:57
/********
  typedef enum
  {

上板测试了下,不行呢,还是只能控制红灯开关。绿灯、蓝灯不行。现在在研究数据点问题,搞不懂在arduino IDE 怎么回事。。
晕船海盗 发表于 2016-10-19 06:02:43
伯乐 发表于 2016-10-13 23:30
你好,哥们 对的,一直对这里不理解,不怎么这么设置,你帮忙看看这里。

这个地方你直接把LED_r ,LED_g, LED_b  定义成 bool格式,下面就无法对LED调亮度了,只能控制亮和灭。
晕船海盗 发表于 2016-10-19 05:57:23
本帖最后由 晕船海盗 于 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:24:33
本帖最后由 伯乐 于 2016-10-18 23:26 编辑
true 发表于 2016-10-17 11:01
“字节序(及byte序)”表示按字节为单位从高往低依次排列
“bit序(及位序)”表示按位从低往高位依次排列 ...

你好,谢谢解答。按你的写法呢,下面的判断如何写啊,我写的你看看,还是不行。。。标志位 数据点 结构体,一直没理清思路。麻烦帮忙看看,以后好整理点教程出来。谢谢!
  1. /******************
  2. typedef enum
  3. {
  4.   SetLED_OnOff    = 0x01,
  5.   SetLED_Color    = 0x02,
  6.   SetLED_R        = 0x04,
  7.   SetLED_G        = 0x08,
  8.   SetLED_B        = 0x10,
  9.   SetMotor        = 0x20,

  10. } Attr_FlagsTypeDef;
  11. ******************/
  12. typedef enum
  13. {
  14.   LED_OnOff       = 0x00,
  15.   LED_OnOn        = 0x01,

  16. } LED_TypeDef;

  17. typedef struct
  18. {
  19.   uint8_t             LED_r;
  20.   uint8_t             LED_g;
  21.   uint8_t             LED_b;
  22. } ReadTypeDef_t;

  23. typedef struct
  24. {
  25.   uint8_t             Attr_Flags;
  26.   uint8_t             LED;
  27. } WirteTypeDef_t;

  28. WirteTypeDef_t  WirteTypeDef;
  29. ReadTypeDef_t ReadTypeDef;
  30. void GizWits_GatherSensorData(void);
  31. void GizWits_ControlDeviceHandle(void);
复制代码
判断语句:
  1. void GizWits_ControlDeviceHandle(void)
  2. {
  3. if ( (WirteTypeDef.Attr_Flags & (1 << 0)) == (1 << 0))
  4.   {
  5.     if (WirteTypeDef.LED == LED_OnOn)
  6.       {
  7.         ReadTypeDef.LED_r = LED_r;
  8.         LED_RGB_Control(254, 0, 0);
  9.         Serial.print(WirteTypeDef.LED);
  10.         Serial.println("LED");
  11.       }else{
  12.         ReadTypeDef.LED_r = false;
  13.         LED_RGB_Control(0, 0, 0);
  14.       }
  15.   }
  16.   if ( (WirteTypeDef.Attr_Flags & (1 << 1)) == (1 << 1))
  17.   {
  18.      if (WirteTypeDef.LED == LED_OnOn)
  19.       {
  20.         ReadTypeDef.LED_g = LED_g;
  21.         LED_RGB_Control(0, 254, 0);
  22.         Serial.print(WirteTypeDef.LED);
  23.         Serial.println("LED");
  24.       }else{
  25.         ReadTypeDef.LED_g = false;
  26.         LED_RGB_Control(0, 0, 0);
  27.       }
  28.   }
  29.   if ( (WirteTypeDef.Attr_Flags & (1 << 2)) == (1 << 2))
  30.    {
  31.       if (WirteTypeDef.LED == 0x01)
  32.       {
  33.         ReadTypeDef.LED_b = LED_b;
  34.         LED_RGB_Control(0, 0, 254);
  35.       }else{
  36.         ReadTypeDef.LED_b = false;
  37.         LED_RGB_Control(0, 0, 0);
  38.       }
  39.    }
  40. }
复制代码



伯乐 发表于 2016-10-18 23:19:49
晕船海盗 发表于 2016-10-14 06:18
arduino程序 结构体中对数据定义错误   
typedef struct
{

谢谢,哥们解答,现在判断哪里又有点小问题。。
true 发表于 2016-10-17 11:01:36
“字节序(及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:18:51
本帖最后由 晕船海盗 于 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
true 发表于 2016-10-13 11:58:34
楼主你数据点没有理解对,云端定的bool型数据点,代码里按数值型数据点解析了,请结合对应的通信协议文档进行修改,也可参考官网示例工程中的bool型数据点的用法。
伯乐 发表于 2016-10-12 10:47:08
没人懂??
加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表