关于红外遥控(红外一体接收头)的问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6721|回复: 1

[已解决] 关于红外遥控(红外一体接收头)的问题

[复制链接]
发表于 2012-8-26 17:41 | 显示全部楼层 |阅读模式
本帖最后由 爱上Arduino 于 2012-8-26 17:45 编辑

各位,有一段关于红外遥控的代码,琢磨了很久,还是有看不懂的地方,希望大神帮忙解答一下,谢了!!
附硬件连接图:
IRremote.JPG



*
*
附代码如下:

[mw_shl_code=csharp,true]#include <EEPROM.h>
#include <IRremote.h>

int irRxPin = 9;

int f = 38; // 40, 36, 38

IRrecv irrecv(irRxPin);
IRsend irsend;

decode_results results;
int codeLength = 0;
int currentCode = 0;

void setup()
{
  Serial.begin(9600);
  Serial.println("0-9 to set code memory, s - to send");
  irrecv.enableIRIn();
  setCodeMemory(0);
}

void loop()
{
  if (Serial.available())
  {
    char ch = Serial.read();
    if (ch >= '0' && ch <= '9')
    {
      setCodeMemory(ch - '0');
    }
    else if (ch == 's')
    {
      sendIR();
    }
  }
  if (irrecv.decode(&results))
  {
    storeCode();
    irrecv.resume();
  }
}

void setCodeMemory(int x)
{
  currentCode = x;
  Serial.print("Set current code memory to: ");
  Serial.println(currentCode);
  irrecv.resume();
}

void storeCode()
{
   // write the code to EEPROM, first byte is length
   int startIndex = currentCode * (RAWBUF + 1);
   int len = results.rawlen - 1;
   EEPROM.write(startIndex, (unsigned byte)len);
   for (int i = 0; i < len; i++)
   {
     if (results.rawbuf > 255)
     {
       EEPROM.write(startIndex + i + 1, 255);
     }
     else
     {
      EEPROM.write(startIndex + i + 1, results.rawbuf);
     }
   }
   Serial.print("Saved code, length: ");
   Serial.println(len);
}

void sendIR()
{
  // construct a buffer from the saved data in EEPROM and send it
  int startIndex = currentCode * (RAWBUF + 1);
  int len = EEPROM.read(startIndex);
  unsigned int code[RAWBUF];
  for (int i = 0; i < len; i++)
  {
     int pulseLen = EEPROM.read(startIndex + i + 2);
     if (i % 2)
     {
        code = pulseLen * USECPERTICK + MARK_EXCESS;
     }
     else
     {
        code = pulseLen * USECPERTICK - MARK_EXCESS;
     }
  }
  irsend.sendRaw(code, len, f);
  Serial.print("Sent code length: ");
  Serial.println(len);
}[/mw_shl_code]



关于这段代码,我不理解的地方主要在sendIR()和storeCode()这两个子函数中
1.其中的RAWBUF指的是什么意思?
2.USECPERTICK和MAKER_EXCESS分别指的是什么?
3.irsend.sendRaw(code,len,f)又指的是什么?
 楼主| 发表于 2012-8-26 17:47 | 显示全部楼层
好吧,我发现了,库里面原来有这些的定义的....不用麻烦各位了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 01:42 , Processed in 0.102653 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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