4) 点击“控制”菜单,选择“如果那么”模块,拖动至编辑区域组合在“重复执行”模块中,在“显示光强度”模块的下一步,后续代码部分的更新不再一一列举,只描述图形编辑部分,如图:
5) 点击“数字与逻辑”菜单,选择“比较值”模块,拖动至编辑区域组合在“如果那么”模块中的判断条件的位置,并且点击“=”修改为“≥”如图:
6) 与之前步骤相同方式选择“当前光强度”模块,拖动至编辑区域组合在“比较值”模块的左侧空白位置,如图:
7) 点击“数字与逻辑”菜单,选择“数字”模块,拖动至编辑区域组合在“比较值”模块的右侧空白处,并点击数字修改为需要设置的值,如图:
8) 点击“功能控件”-“光控灯”菜单,选择“【光控灯】控制灯状态”模块,拖动至编辑区域组合在“如果那么”模块中,如图:
9) 点击“IntoRobot”菜单,选择“延时”模块,拖动至编辑区域组合在“如果那么”的下一步执行位置,在“重复执行“中,如图:
10) 点击“功能控件”-“光控灯”菜单,选择“【光控灯】事件监控”模块,拖动至编辑区域放置的空白处即可,如图:
11) 点击“控制”菜单,选择“如果那么 否则”模块,拖动至编辑区域组合在“【光控灯】事件监控”模块下面,如图:
12) 类似之前步骤,选择“比较值”模块,拖动至编辑区域组合在“如果那么 否则”模块中“如果”的空白位置,如图:
13) 点击“功能控件”-“光控灯”菜单,选择“【光控灯】开关状态”模块,拖动至编辑区域组合在“比较值”模块中的左侧空白位置,如图:
14) 点击“数字与逻辑”菜单,选择“打开/关闭”输出模块,拖动至编辑区域组合在“比较值”的右侧空白位置中,并将值设置为“关闭”,如图:
15) 在之前已经组合的“【光控灯】控制灯D0为关闭”模块上点击右键,点击菜单中的“复制”,会复制出相同的模块,将组合在“如果那么 否则”的“那么”的位置中,也可以从左侧菜单种选择拖动,如图:
16) 相同的方式添加“【光控灯】控制灯D0为打开”模块至“否则”位置,至此,整个图形编程组合完成,如图:
5. 除了通过上述方式每个模块自己组合外,我们还为光控灯提供了示例,点击左侧图形代码模块菜单,展开“功能控件”,点击“光控灯”,
直接将两部分代码块拖动至编辑区组合即可完成。
1)打开菜单可以看到如下:
2)选择重复执行模块组,拖动至编辑区,并且与“IntoRobot主程序”起始模块进行组合,如下:
3)选择“【光控灯】事件监控”模块组,拖动至编辑区域,平台会自动将其回调添加至主程序。如图:
4)选择设置光照传感器以及灯光控制连接的管脚。示例中光照传感器使用默认的wire管脚(SDA,SDL分别连接D8,D9),灯泡的开关控制连接D0管脚。
5)点击“代码”按钮,可以打开查看对应的生成的代码。如图:
6. 光控灯图形编程操作完成,下一步在确保对应设备在线的情况下,点击烧录按钮,即可将该程序烧录至设备。
7. 图形编程在设备正常运行,对应控件显示如下:
8. 图形代码各模块注释如下图:
对应代码为:
- #include
- #define OPTCTRLLAMP_CMD_SWITCH "channel/optCtrlLamp_0/cmd/switch"
- #define OPTCTRLLAMP_DATA_STATUS "channel/optCtrlLamp_0/data/status"
- #define OPTCTRLLAMP_DATA_ILLUMINATION "channel/optCtrlLamp_0/data/illumination"
- GY30 gy30;
- void optCtrlLampSwitchCb(uint8_t *payload, uint32_t len)
- {
- if (atoi((char *)payload) == 0)
- {
- digitalWrite(D0, LOW);
- IntoRobot.publish(OPTCTRLLAMP_DATA_STATUS,LOW);
- }
- else
- {
- digitalWrite(D0, HIGH);
- IntoRobot.publish(OPTCTRLLAMP_DATA_STATUS,HIGH);
- }
- }
- void setup()
- {
- Wire.begin();
- delay(100);
- IntoRobot.subscribe(OPTCTRLLAMP_CMD_SWITCH, NULL, optCtrlLampSwitchCb);
- pinMode(D0, OUTPUT);
- gy30.begin();
- }
- void loop()
- {
- IntoRobot.publish(OPTCTRLLAMP_DATA_ILLUMINATION, gy30.Read());
- if (gy30.Read() >= 1000)
- {
- digitalWrite(D0, LOW);
- IntoRobot.publish(OPTCTRLLAMP_DATA_STATUS,LOW);
- }
- delay(1000);
- }
[media]http://player.youku.com/player.php/sid/XMTI5Nzc3MTQ3Mg==/v.swf[/media]
更多实例教程请查看IntoRobot BBS http://bbs.intorobot.com/。可加入QQ群(460095989)与众多创客进行交流。