收藏官网首页
查看: 21365|回复: 10

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

5

主题

35

帖子

734

积分

高级会员

Rank: 4

积分
734
跳转到指定楼层
楼主
发表于 2016-10-11 11:42:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
免费使用STM32、APP自动代码生成工具
请教下各位关于arduino底板数据点定义,,我定义了三个数据点:LED_r,LED_g,LED_b,布尔值,三个按钮。

以下是代码定义:


以下是调试输出数据:每个按钮操作两次,开、关。

可以看第一个按钮值正常,LED_r,灯正常运行,,第二个,第三个就不正常了。。这是怎么回事呢?数据点没定义好么。
贴上份代码: arduino.rar (2.61 KB, 下载次数: 5)


50

主题

94

帖子

2135

积分

金牌会员

Rank: 6Rank: 6

积分
2135
板凳
发表于 2016-10-13 11:58:34 | 只看该作者
楼主你数据点没有理解对,云端定的bool型数据点,代码里按数值型数据点解析了,请结合对应的通信协议文档进行修改,也可参考官网示例工程中的bool型数据点的用法。

5

主题

35

帖子

734

积分

高级会员

Rank: 4

积分
734
地板
 楼主| 发表于 2016-10-13 23:30:31 | 只看该作者
true 发表于 2016-10-13 11:58
楼主你数据点没有理解对,云端定的bool型数据点,代码里按数值型数据点解析了,请结合对应的通信协议文档进 ...

你好,哥们 对的,一直对这里不理解,不怎么这么设置,你帮忙看看这里。


16

主题

69

帖子

4892

积分

论坛元老

Rank: 8Rank: 8

积分
4892
5#
发表于 2016-10-14 06:18:51 | 只看该作者
免费使用STM32、APP自动代码生成工具
本帖最后由 晕船海盗 于 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

50

主题

94

帖子

2135

积分

金牌会员

Rank: 6Rank: 6

积分
2135
6#
发表于 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;

5

主题

35

帖子

734

积分

高级会员

Rank: 4

积分
734
7#
 楼主| 发表于 2016-10-18 23:19:49 | 只看该作者
晕船海盗 发表于 2016-10-14 06:18
arduino程序 结构体中对数据定义错误   
typedef struct
{

谢谢,哥们解答,现在判断哪里又有点小问题。。

5

主题

35

帖子

734

积分

高级会员

Rank: 4

积分
734
8#
 楼主| 发表于 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. }
复制代码



16

主题

69

帖子

4892

积分

论坛元老

Rank: 8Rank: 8

积分
4892
9#
发表于 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);
    }
  }
}

16

主题

69

帖子

4892

积分

论坛元老

Rank: 8Rank: 8

积分
4892
10#
发表于 2016-10-19 06:02:43 | 只看该作者
汉枫LPB120模块
伯乐 发表于 2016-10-13 23:30
你好,哥们 对的,一直对这里不理解,不怎么这么设置,你帮忙看看这里。

这个地方你直接把LED_r ,LED_g, LED_b  定义成 bool格式,下面就无法对LED调亮度了,只能控制亮和灭。

5

主题

35

帖子

734

积分

高级会员

Rank: 4

积分
734
11#
 楼主| 发表于 2016-10-19 21:18:22 | 只看该作者
晕船海盗 发表于 2016-10-19 05:57
/********
  typedef enum
  {

上板测试了下,不行呢,还是只能控制红灯开关。绿灯、蓝灯不行。现在在研究数据点问题,搞不懂在arduino IDE 怎么回事。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

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

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