解决Arduino红外转码发射的问题
新手上路,望大家赐教。在坛子里经常看到有关红外线接收和发射的问题,有些问题其实比较简单,直接用好库里的例子就好了,但有些问题还是有一点点难度。比如,将红外接收后直接转码发射的问题,就有一点难度了,但这个转码的功能的确很实用,所以,很有必要研究解决。本人花费了2个小时进行调式,现将通过调式的代码与大家交流,望各位大虾批评指正。#include <IRremote.h>
int RECV_PIN = 11;//一体化红外接收头接11脚
IRrecv irrecv(RECV_PIN);
decode_results results;
int X=0;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // 使能红外接收进程,此函数使定时器中断
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
switch(results.value)
{
case 0x288823DC:
{
X=1;
break;
}
case 0x2888A35C:
{
X=2;
break;
}
}
irrecv.resume(); // 接收下一个数据
}
switch(X)
{
case 1:
{
X=0;
IRsend irsend;//创建一个发射对象,红外发射二极管必须接3脚
for (int i = 0; i < 3; i++) {
irsend.sendSony(0xa90, 12); // Sony TV power code
Serial.println("send 1!");
delay(100);
}
irrecv.enableIRIn();//发射完后,必须重新使能红外接收进程,此函数使定时器中断
break;
}
case 2:
{
X=0;
IRsend irsend;
for (int i = 0; i < 3; i++) {
irsend.sendSony(0xa99, 12); // Sony TV power code
Serial.println("send 2!");
delay(100);
}
irrecv.enableIRIn();//发射完后,必须重新使能红外接收进程,此函数使定时器中断
break;
}
}
} 补充一下,或许这样更清晰一些!
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
int X=0;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // 使能红外接收进程,此函数使定时器中断
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
switch(results.value)
{
case 0x288853AC:
{
X=1;
break;
}
case 0x28884BB4:
{
X=2;
break;
}
case 0x28889966:
{
X=3;
break;
}
case 0x2888837C:
{
X=4;
break;
}
case 0x2888738C:
{
X=5;
break;
}
case 0x2888A956:
{
X=6;
break;
}
case 0x2888639C:
{
X=7;
break;
}
case 0x288823DC:
{
X=8;
break;
}
case 0x2888A35C:
{
X=9;
break;
}
}
irrecv.resume(); // 接收下一个数据
}
switch(X)
{
case 1:
{
X=0;
sendNECled(0xFFE21D);
break;
}
case 2:
{
X=0;
sendNECled(0xFFD22D);
break;
}
case 3:
{
X=0;
sendNECled(0xFF12ED);
break;
}
case 4:
{
X=0;
sendNECled(0xFF52AD);
break;
}
case 5:
{
X=0;
sendNECled(0xFF926D);
break;
}
case 6:
{
X=0;
sendNECled(0xFF32CD);
break;
}
case 7:
{
X=0;
sendNECled(0xF1567EA);
break;
}
case 8:
{
X=0;
sendRC6led(0x059);
break;
}
case 9:
{
X=0;
sendRC6led(0x05C);
break;
}
}
}
void sendNECled(long J){
IRsend irsend;
delay(100);
for (int i = 0; i < 1; i++) {
irsend.sendNEC(J, 32); // Sony TV power code
Serial.println("send OK!");
delay(40);
}
irrecv.enableIRIn();//发射完后,必须重新使能红外接收进程,此函数使定时器中断
}
void sendRC6led(long J){
IRsend irsend;
delay(100);
for (int i = 0; i < 1; i++) {
irsend.sendRC6(J, 12); // Sony TV power code
Serial.println("send OK!");
delay(40);
}
irrecv.enableIRIn();//发射完后,必须重新使能红外接收进程,此函数使定时器中断
}
支持一个!!!!!!!!!!!
页:
[1]