后知后觉 发表于 2014-6-10 19:12:42

arduino红外控制格力空调问题

#include <IRremote.h>                  // 引用 IRRemote 函式库
unsigned int rawCodes_ac_open = {8850,4450,650,550,600,1650,600,600,600,1650,650,1650,650,500,650,550,650,550,600,600,600,1650,650,1650,600,1650,600,600,650,550,600,550,650,550,600,600,600,600,600,550,650,550,650,550,600,1650,650,550,600,600,600,600,600,550,650,550,650,550,600,1650,650,550,600,1700,600,550,650,550,600,1700,600,550,650,23458};

IRsend irsend;                        // 定义 IRsend 物件来发射红外线讯号

void setup()
{
Serial.begin(9600);
pinMode(3, OUTPUT);   
digitalWrite(3, HIGH);   // 点亮LED测试(需通过手机摄像模式观察)
delay(3000);             // 等待3秒
digitalWrite(3, LOW);    // 结束测试
}

void loop()
{
   Serial.print("SendIR: ");
//irsend.sendRaw(rawCodes_ac_open,74, 32);   // 记得换成你遥控器的红外线编码
delay(3000);
}


程序已参照http://www.geek-workshop.com/thread-5001-1-1.html实验过,依旧是格力空调没有任何反应,空调的型号的是YBOF2

啷哩个铛 发表于 2014-6-11 02:06:49

楼主可以看看这个帖子:
使用IRremote库红外遥控家里的电器http://www.arduino.cn/thread-3618-1-1.html

darkorigin 发表于 2014-6-11 08:36:14

玩IR建议先从解析对应遥控器的红外协议开始
你可以先搭建一个解析遥控的平台 把数据解出来
其实空调遥控不同于电视机等设备, 电视是单数据发送(即只发送被按下键的代码)
空调发送的是状态(就是所有的状态信息 )不管你按下哪个按钮 都会发送所有按键的状态(温度 上下风 左右摆 风速 睡眠 节能 定时 模式 指示灯 等等状态信息)

解析了这个型号的IR代码 就容易多了~

xiaoesky 发表于 2014-6-11 10:02:21

pinMode(3, OUTPUT);   
digitalWrite(3, HIGH);   // 点亮LED测试(需通过手机摄像模式观察)
delay(3000);             // 等待3秒
digitalWrite(3, LOW);    // 结束测试

上面这段代码不需要。

然后把这段改一下:
//irsend.sendRaw(rawCodes_ac_open,74, 32);   // 记得换成你遥控器的红外线编码

改成:
irsend.sendRaw(rawCodes_ac_open,74, 32);   // 记得换成你遥控器的红外线编码

注:你的原代码主要问题是没有把信号发送出去,所以空调肯定是没反应哈!

后知后觉 发表于 2014-6-11 10:38:25

xiaoesky 发表于 2014-6-11 10:02 static/image/common/back.gif
pinMode(3, OUTPUT);   
digitalWrite(3, HIGH);   // 点亮LED测试(需通过手机摄像模式观察)
delay ...

不是的,我程序代码里是没有注释这句话的

后知后觉 发表于 2014-6-11 10:45:13

啷哩个铛 发表于 2014-6-11 02:06 static/image/common/back.gif
楼主可以看看这个帖子:
使用IRremote库红外遥控家里的电器http://www.arduino.cn/thread-3618-1-1.html

#include <IRremote.h>

int RECV_PIN = 11;//定义红外接收器的引脚为11
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // 初始化红外接收器
}

void loop() {
if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);//以16进制换行输出接收代码
    Serial.println();//为了便于观看输出结果增加一个空行
    irrecv.resume(); // 接收下一个值
}
}

您发的链接帖子,我看了,我照着改了,但是接收到的还是74个编码,然后我用上述代码做了一个红外接收程序,发现:板子发射的编码,跟我按遥控接收到的编码不一样

strdnly 发表于 2014-6-11 18:07:32

问下,你的编码或数组是自己拿着遥控器对着接收头测的,还是在网上找的码组或者?

后知后觉 发表于 2014-6-12 09:04:49

strdnly 发表于 2014-6-11 18:07 static/image/common/back.gif
问下,你的编码或数组是自己拿着遥控器对着接收头测的,还是在网上找的码组或者?

自己拿遥控器对着街头测得

林定祥 发表于 2014-6-12 09:37:20

void IRsend::sendRaw(unsigned int buf[], int len, int hz),最后的定义是发送的频率,通常是38或40请试一下.

strdnly 发表于 2014-6-12 10:13:39

后知后觉 发表于 2014-6-12 09:04 static/image/common/back.gif
自己拿遥控器对着街头测得

哦,那看来要自己做着玩还可以,要想做成产品的话,还得下点功夫啊。。。。

zhujieo 发表于 2014-8-24 15:25:12

我的格力开机是199位原始码,不知道不同型号有没有区别,感觉74位太少了。

风的味道 发表于 2015-8-21 16:05:19

会不会是这个发射头的问题啊?我看原帖子上用的是三根线的那种,是不是带功率放大的?
页: [1]
查看完整版本: arduino红外控制格力空调问题