小爱同学控制风扇风速
本帖最后由 BigStudent 于 2021-6-13 17:32 编辑使用了红外发射模块连接到Node mcu(8266)上,通过小爱同学来控制风扇,现在可以正常地开启和关闭,但是在调节风速上不知怎么处理?
#include <Blinker.h>
#include <IRremote.h>
void miotLevel(uint8_t level)
{
BLINKER_LOG("need set level: ", level);
// 0:AUTO MODE, 1-3 LEVEL
setLevel = level;
BlinkerMIOT.level(level);
BlinkerMIOT.print();
}
上述代码中的参数level不知怎么用?美的风扇似乎无法获取当前处于几档,所以直接和小爱说调到几档似乎不得行。
有没有让小爱调大风速或者调小风速的回调函数呢?
BigStudent 发表于 2021-6-13 00:39
谢谢回复。不过我还有个疑问。例如我设置风扇挡位level = 3,但是我又无法获知当前风扇的挡位是多少,如 ...
自己在程序用个全局变量记录下 level为当前挡位,可以是1、2、3,您使用if判断后根据挡位做出相应的控制即可 点灯官方 发表于 2021-6-11 16:57
level为当前挡位,可以是1、2、3,您使用if判断后根据挡位做出相应的控制即可 ...
谢谢回复。不过我还有个疑问。例如我设置风扇挡位level = 3,但是我又无法获知当前风扇的挡位是多少,如何用红外调节(发射一次红外信号可以升一档或者降一档) 奈何col 发表于 2021-6-13 00:44
自己在程序用个全局变量记录下
这个方法也不太好,因为风扇有记录挡位的功能,我打开风扇后,就已经处于上次的挡位了。而且如果有一次红外发射后风扇没有收到,但是全局变量却变化了,就会导致二者的量对应不上。没有办法获取风扇反馈的状态还是太行。
有没有直接让小爱调大风速或者调小风速的回调函数呢?没有开发文档提到这方面,有点无从下手 顶一下;P BigStudent 发表于 2021-6-13 09:30
这个方法也不太好,因为风扇有记录挡位的功能,我打开风扇后,就已经处于上次的挡位了。而且如果有一次红 ...
没看懂你说的,这只是个很基础的编程知识,都是这么做的。。。。 首先你的遥控器上得有这个加挡减挡功能,然后学习这两个按键的红外编码,然后可以在level 等于1时候让红外模块发送加挡指令,level等于3的时候发送减挡指令。 renshuang 发表于 2021-6-14 20:59
首先你的遥控器上得有这个加挡减挡功能,然后学习这两个按键的红外编码,然后可以在level 等于1时候让红外 ...
你的意思是说让“调为一档”的语音指令来代替“调低风速”,“调为3档”代替“调高风速”是吧 奈何col 发表于 2021-6-14 10:27
没看懂你说的,这只是个很基础的编程知识,都是这么做的。。。。
很简单啊,就是全局变量记录的数值和风扇的真实挡位是可能对应不上的。因为发射红外信号后发射端并没有接到反馈是否红外信号发射成功,并非可靠的方式,即使接收端没有收到,全局变量也会自增自减。
所以当出现发射红外信号后,如果风扇被东西挡到而无法获取红外信号,并没有调档时,其实全局变量也是会进行自增或自减的。由此,全局变量的值就和风扇真实挡位出现偏差,之后的代码就都乱了。
页:
[1]
2