极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 34961|回复: 11

arduino红外控制格力空调问题

[复制链接]
发表于 2014-6-10 19:12:42 | 显示全部楼层 |阅读模式
  1. [code]#include <IRremote.h>                  // 引用 IRRemote 函式库
  2. unsigned int rawCodes_ac_open[74] = {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};

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

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

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



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-6-11 02:06:49 | 显示全部楼层
楼主可以看看这个帖子:
使用IRremote库红外遥控家里的电器  http://www.arduino.cn/thread-3618-1-1.html
回复 支持 反对

使用道具 举报

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

解析了这个型号的IR代码 就容易多了~
回复 支持 反对

使用道具 举报

发表于 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
pinMode(3, OUTPUT);   
  digitalWrite(3, HIGH);   // 点亮LED测试(需通过手机摄像模式观察)
  delay ...

不是的,我程序代码里是没有注释这句话的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-11 10:45:13 | 显示全部楼层
啷哩个铛 发表于 2014-6-11 02:06
楼主可以看看这个帖子:
使用IRremote库红外遥控家里的电器  http://www.arduino.cn/thread-3618-1-1.html
  1. #include <IRremote.h>

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

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

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


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

使用道具 举报

发表于 2014-6-11 18:07:32 | 显示全部楼层
问下,你的编码或数组是自己拿着遥控器对着接收头测的,还是在网上找的码组或者?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-12 09:04:49 | 显示全部楼层
strdnly 发表于 2014-6-11 18:07
问下,你的编码或数组是自己拿着遥控器对着接收头测的,还是在网上找的码组或者?

自己拿遥控器对着街头测得
回复 支持 反对

使用道具 举报

发表于 2014-6-12 09:37:20 | 显示全部楼层
void IRsend::sendRaw(unsigned int buf[], int len, int hz),最后的定义是发送的频率,通常是38或40请试一下.
回复 支持 反对

使用道具 举报

发表于 2014-6-12 10:13:39 | 显示全部楼层
后知后觉 发表于 2014-6-12 09:04
自己拿遥控器对着街头测得

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

使用道具 举报

发表于 2014-8-24 15:25:12 | 显示全部楼层
我的格力开机是199位原始码,不知道不同型号有没有区别,感觉74位太少了。
回复 支持 反对

使用道具 举报

发表于 2015-8-21 16:05:19 | 显示全部楼层
会不会是这个发射头的问题啊?我看原帖子上用的是三根线的那种,是不是带功率放大的?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 17:17 , Processed in 0.040099 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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