小爱同学控制风扇风速-Arduino中文社区 - Powered by Discuz! Archiver

BigStudent 发表于 2021-6-10 16:18

小爱同学控制风扇风速

本帖最后由 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不知怎么用?美的风扇似乎无法获取当前处于几档,所以直接和小爱说调到几档似乎不得行。
有没有让小爱调大风速或者调小风速的回调函数呢?




奈何col 发表于 2021-6-13 00:44

BigStudent 发表于 2021-6-13 00:39
谢谢回复。不过我还有个疑问。例如我设置风扇挡位level = 3,但是我又无法获知当前风扇的挡位是多少,如 ...

自己在程序用个全局变量记录下

点灯官方 发表于 2021-6-11 16:57

level为当前挡位,可以是1、2、3,您使用if判断后根据挡位做出相应的控制即可

BigStudent 发表于 2021-6-13 00:39

点灯官方 发表于 2021-6-11 16:57
level为当前挡位,可以是1、2、3,您使用if判断后根据挡位做出相应的控制即可 ...

谢谢回复。不过我还有个疑问。例如我设置风扇挡位level = 3,但是我又无法获知当前风扇的挡位是多少,如何用红外调节(发射一次红外信号可以升一档或者降一档)

BigStudent 发表于 2021-6-13 09:30

奈何col 发表于 2021-6-13 00:44
自己在程序用个全局变量记录下

这个方法也不太好,因为风扇有记录挡位的功能,我打开风扇后,就已经处于上次的挡位了。而且如果有一次红外发射后风扇没有收到,但是全局变量却变化了,就会导致二者的量对应不上。没有办法获取风扇反馈的状态还是太行。

有没有直接让小爱调大风速或者调小风速的回调函数呢?没有开发文档提到这方面,有点无从下手

tuxm999 发表于 2021-6-13 09:58

顶一下;P

奈何col 发表于 2021-6-14 10:27

BigStudent 发表于 2021-6-13 09:30
这个方法也不太好,因为风扇有记录挡位的功能,我打开风扇后,就已经处于上次的挡位了。而且如果有一次红 ...

没看懂你说的,这只是个很基础的编程知识,都是这么做的。。。。

renshuang 发表于 2021-6-14 20:59

首先你的遥控器上得有这个加挡减挡功能,然后学习这两个按键的红外编码,然后可以在level 等于1时候让红外模块发送加挡指令,level等于3的时候发送减挡指令。

BigStudent 发表于 2021-6-15 09:07

renshuang 发表于 2021-6-14 20:59
首先你的遥控器上得有这个加挡减挡功能,然后学习这两个按键的红外编码,然后可以在level 等于1时候让红外 ...

你的意思是说让“调为一档”的语音指令来代替“调低风速”,“调为3档”代替“调高风速”是吧

BigStudent 发表于 2021-6-15 09:14

奈何col 发表于 2021-6-14 10:27
没看懂你说的,这只是个很基础的编程知识,都是这么做的。。。。

很简单啊,就是全局变量记录的数值和风扇的真实挡位是可能对应不上的。因为发射红外信号后发射端并没有接到反馈是否红外信号发射成功,并非可靠的方式,即使接收端没有收到,全局变量也会自增自减。
所以当出现发射红外信号后,如果风扇被东西挡到而无法获取红外信号,并没有调档时,其实全局变量也是会进行自增或自减的。由此,全局变量的值就和风扇真实挡位出现偏差,之后的代码就都乱了。
页: [1] 2
查看完整版本: 小爱同学控制风扇风速