极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 57150|回复: 19

Arduino红外遥控格力空调的问题

[复制链接]
发表于 2013-5-14 08:55:08 | 显示全部楼层
我今年的毕业设计是做一个语音遥控器,主要是控制空调的。要想用红外控制不同品牌的控制,这个工作量是非常大的。因为要知道不同厂家的遥控器代码。最容易实现也是最笨的方法就是破解官方遥控器的代码。见笑了,我也是这样做的。下面我说一下格力品牌空调的红外代码结构:引导码+35位信息码(旧);引导码+35位信息码+延时20ms+32位信息码(新);这个我也是费了很大劲才搞懂新的格力遥控器的编码。注意:新的遥控器为了兼容旧款的遥控器,前面的编码是一样的。只是后面的32位新增加的。格力的编码符合NEC格式的码元时间。
红外一开始发送一段13.5ms的引导码,引导码由9ms的高电平和4.5ms的低电平组成,采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”。
回复 支持 反对

使用道具 举报

发表于 2013-5-14 08:58:13 | 显示全部楼层
楼主的编码果然跟我破解的是一样的,新的格力编码方式
void GreeAC::test()
{
  irsend.enableIROut(38);
  sendpresumable();
  sendGree(0x49, 8);
  sendGree(0x0A, 8);
  sendGree(0x60, 8);
  sendGree(0x50, 8);
  sendGree(0x02, 3);
  irsend.mark(560);
  irsend.space(20000);
  sendGree(0x01, 8);
  sendGree(0x20, 8);
  sendGree(0x00, 8);
  sendGree(0xF4, 8);
  irsend.mark(560);
  irsend.space(0);
}
回复 支持 反对

使用道具 举报

发表于 2013-5-14 15:45:30 | 显示全部楼层
把你的整个工程文件上存,有空帮你看看,你只是上存部分程序呀,好像没有问题
回复 支持 反对

使用道具 举报

发表于 2013-5-15 09:45:07 | 显示全部楼层
我用Arduino IDE 1.0.3 编译不了你的工程文件
回复 支持 反对

使用道具 举报

发表于 2013-5-15 11:15:43 | 显示全部楼层
用示波器观察才发现是定时器溢出了。延时20毫秒要分开延时2次10毫秒就解决问题。
{
  irsend.enableIROut(38);
  sendpresumable();
  sendGree(0x49, 8);
  sendGree(0x0A, 8);
  sendGree(0x60, 8);
  sendGree(0x50, 8);
  sendGree(0x02, 3);
  irsend.mark(560);
  irsend.space(10000);//定时器溢出,要分开两次延时20ms
  irsend.space(10000);//
  sendGree(0x01, 8);
  sendGree(0x20, 8);
  sendGree(0x00, 8);
  sendGree(0xF4, 8);
  irsend.mark(560);
  irsend.space(0);
}

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2013-5-15 11:19:21 | 显示全部楼层
楼主的程序我编译不了,于是自己把它改到[pre lang="arduino" line="1" ]#include "Arduino.h"
#include <IRremote.h>
#include <IRremoteInt.h>
//#include <Gree.h>


IRsend irsend;
volatile boolean flag;

extern IRsend irsend;
//#define DEBUG 1


//    void setstate(byte mode, byte fan, byte temp, byte power);
    void test();
    void sendpresumable();
    void send0();
    void send1();
    void sendGree(byte ircode, byte len);
void sendpresumable()
{
  irsend.mark(9000);
  irsend.space(4500);
}   
void send0()
{
  irsend.mark(560);
  irsend.space(565);
}

void send1()
{
  irsend.mark(560);
  irsend.space(1690);
}

//
void sendGree(byte ircode, byte len)
{
  byte mask = 0x01;
  for(int i = 0;i < len;i++)
  {
    if (ircode & mask)
    {
      send1();
    }
    else
    {
      send0();
    }
    mask <<= 1;
  }
}

void test()
{
  irsend.enableIROut(38);
  sendpresumable();
  sendGree(0x49, 8);
  sendGree(0x0A, 8);
  sendGree(0x60, 8);
  sendGree(0x50, 8);
  sendGree(0x02, 3);
  irsend.mark(560);
  irsend.space(10000);
  irsend.space(10000);
  sendGree(0x01, 8);
  sendGree(0x20, 8);
  sendGree(0x00, 8);
  sendGree(0xF4, 8);
  irsend.mark(560);
  irsend.space(0);
}
void trig()
{
  flag = true;
}

void setup()
{
  Serial.begin(9600);
  flag = false;
  pinMode(2,INPUT_PULLUP);
//  attachInterrupt(0, trig, FALLING);
}

void loop()
{
   int val = digitalRead(2);
  if (val == 0)
  {
    test();
    delay(2000);
//    flag = false;
  }
}
[/code]一个工程里面
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-5 23:53 , Processed in 0.039628 second(s), 16 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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