Toggle navigation
科创
{{ getSearchSuggestionLabel(suggestion) }}
{{ part.text }}
查看更多
登录
 
注册
电波
论坛
专栏
应用
登录
注册
{{ getSearchSuggestionLabel(suggestion) }}
{{ part.text }}
查看更多
论坛
>
电子信息
>
电子技术
>
嵌入式
文号
t60374
阅读
5933
回复
0
收藏
1
所有教程由网友发布,仅供参考,请谨慎采纳。科创不对教程的科学性、准确性、可靠性负责。
转帖:Arduino教程(提高篇)——红外遥控(发射篇)
kc2038
2013/09/06
电子技术
IP:广西
Arduino教程(提高篇)——红外遥控(发射篇)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
上一篇提到了红外编码的原理,此篇用
arduino
软件模拟发出
38K
的载波信号配合红外发射头,发出带有载波信号的
38K
红外光,使
arduino
变成红外遥控器,配合红外接收就用此可以遥控各家电。
例程
1
:红外发射模块
(
取缔红外遥控器
)
配合
arduino
制作成红外遥控器,用串口输入一个数字,遥控器发射出一段编码,一边用红外接收模块,显示出接收到的编码
(
红外接收参照
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
此贴
)
连线示意图:
#define ADD 0x00
int IR_S = 8; //
接
arduino 8
号引脚
void setup()
{
pinMode(IR_S, OUTPUT);
Serial.begin(9600); // 9600
波特率
}
void loop()
{
uint8_t dat,temp;
if ( Serial.available()) {
temp = Serial.read();//?
IR_Send38KHZ(280,1);//
发送
9ms
的起始码
IR_Send38KHZ(140,0);//
发送
4.5ms
的结果码
IR_Sendcode(ADD);//
用户识别码
dat=~ADD;
IR_Sendcode(dat);//
用户识别码反吗
IR_Sendcode(temp);//
操作码
dat=~temp;
IR_Sendcode(dat);//
操作码反码
IR_Send38KHZ(21,1);//
发送结束码
}
delay(200);
}
void IR_Send38KHZ(int x,int y) //
产生
38KHZ
红外脉冲
{
for(int i=0;i<x;i++)//15=386US
{
if(y==1)
{
digitalWrite(IR_S,1);
delayMicroseconds(9);
digitalWrite(IR_S,0);
delayMicroseconds(9);
}
else
{
digitalWrite(IR_S,0);
delayMicroseconds(20);
}
}
}
void IR_Sendcode(uint8_t x) //
{
for(int i=0;i<8;i++)
{
if((x&0x01)==0x01)
{
IR_Send38KHZ(23,1);
IR_Send38KHZ(64,0);
}
else
{
IR_Send38KHZ(23,1);
IR_Send38KHZ(21,0);
}
x=x>>1;
}
}
打开串口,随意发送一个数字,红外发射头会发出带编码的
38K
红外波, 另一方面用一个红外接收头就可以接收到此码,将其解码就会知道遥控器是按的哪个按键。
接收方面,
arduino+
红外接收模块进行解码
红外遥控函数库:
红外遥控函数库.zip
23.84KB
ZIP
27次下载
(23.84 KB
)
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); //
初始化红外遥控
pinMode(12,1);
}
void loop() {
if (irrecv.decode(&results)) {
if(results.value==16753245) //
确认接收到的第一排按键
1
的编码,此码是预先读出来的按键编码。
{
digitalWrite(12,1); //
点亮
LED
Serial.println("turn on LED"); //
串口显示开灯
}
else if(results.value==16736925) //
确认接收到的第一排按键
2
的编码
{
digitalWrite(12,0); //
熄灭
LED
Serial.println("turn off LED"); //
串口显示关灯
}
irrecv.resume(); //
接收下一个值
}
}
例程
2
:
arduino
模拟
SONY
遥控器,用
arduino
串口发送一个字符便可以遥控
SONY
家电的开关。
/*********
红外发射头接
arduino
的
3
号数字口
**************************/
#include <IRremote.h>
IRsend irsend;
void setup()
{
Serial.begin(9600);
}
void loop() {
if (Serial.read() != -1) {
for (int i = 0; i < 3; i++) {
irsend.sendSony(0xa90, 12); // Sony TV power code
delay(100);
}
}
}
红外控制库发布地址:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
来自:
电子信息
/
电子技术
/
嵌入式
0
0
全部
只看作者
全部
只看作者
在列表中查看
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
编辑
删除
{{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
保存
取消
我也是有底线的
保存中...
保存