Arduino 红外遥控接收篇之一
Arduino 红外遥控接收篇之一一:红外遥控原理:
红外遥控是由红外发射和红外接收系统组成
1、红外接收:接收电路是一种集成红外线接收和放大一体的一体化红外接收器模块,能够完成从红外线接收到输出与TTL电平信号兼容的所有工作,它适用于红外线遥控和红外线数据传输。接收器做成的红外接收模块只有三个引脚,信号线,VCC,GND。与arduino和其他单片机连接通信非常方便。
这里我使用的了OCROBOT MANGO(ARDUNIO 兼容控制板)的红外接收套件
2、红外发射:红外发射的遥控器发射的38K红外载波信号是由遥控器里的编码芯片对其进行编码。 至于编码原理查查阅相关的产品说明.
用的时候,VOUT接模拟口或数字脚,GND接到实验板的GND,VCC接到实验板上的+5V 。
本例来源于红外库文件自带的范例Irrecv
二红外遥控实验器材
1实验器材
红外遥控器:1个
红外接收头1个
面包线若干
实验连线
接好Arduino控制器
将红外接收头按上述方法接好,将VOUT接到数字口11;
注意:红外接收器圆形那头对着自己,图片上的标注文字写错了,不好改请见谅.
遥控器的编码方式:NEC协议
实物图片
红外控制库发布地址:https://github.com/shirriff/Arduino-IRremote
下载一个红外接收库Irrecv,将它安装在Ardunio IDE库文件目录下(其实就是把压缩包解压将Irrecv文件夹复制到E:\download\arduino-1.0.1-windows\arduino-1.0.1\libraries,请根据自己的实际的路径作相应的修改)
//本例来自于红外接收模块的IRremote自带范例
/*
* IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
* An IR detector/demodulator must be connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/
#include <IRremote.h>
int RECV_PIN = 11;//定义红外接收器的引脚为11
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // 初始化红外接收器
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);//以16进制换行输出接收代码
Serial.println();//为了便于观看输出结果增加一个空行
irrecv.resume(); // 接收下一个值
}
}
执行结果 回头试试,一直想搞这个玩 atmega8l最小系统不能使用IRremote.h库,不知道楼主有没有解决方案呀? atmega8l最小系统:
我没有这个硬件,无法测试,请想其它办法解决吧. 嘿嘿,这个好~ tom 发表于 2012-10-30 21:13 static/image/common/back.gif
atmega8l最小系统:
我没有这个硬件,无法测试,请想其它办法解决吧.
可以使用atmega8最小系统来完成本实验。 :lol这个我也玩过 难道不要放个电阻上去吗? #include <IRremote.h>
#include <MotorCar.h>
#include <Ultrasonic.h>
#include <myServo.h>
Ultrasonic ultrasonc(3,2);
MotorCar motor(4,5,8,12,10,11);
myServo servo;
int pos=0;
//int buzzerPin=1;
int ledPin=6;
//int ultInputPin=2;//echo
//int ultOutputPin=3;//trig
int time=0;//to calculate the rotation angle.
const int irReceiverPin=0;
IRrecv irrecv(irReceiverPin);
decode_results results;
//LED blinking
void ledBlink(const int interval=50)
{
digitalWrite(ledPin,HIGH);
delay(interval);
digitalWrite(ledPin,LOW);
delay(interval);
}
//define the IR code
#define ADV 0xFF18E7
#define LEF 0xFF10EF
#define BAC 0xFF4AB5
#define RIG 0xFF5AA5
#define STO 0xFF38C7
void setup()
{
Serial.begin(9600);
servo.ServoInit(9);//connect the signal Pin to control myServo.
motor.stopCar();
irrecv.enableIRIn();//start IR enable
}
void loop(){
servo.SetServoAngle(90);
int n=analogRead(A0)/6;
int distance=ultrasonc.Ranging(CM);
if(irrecv.decode(&results))
{
Serial.println(results.value,HEX);
switch(results.value)
{
case ADV:
motor.forward(100);
break;
case BAC:
motor.back(100);
break;
case LEF:
motor.turnLeft(100);
break;
case RIG:
motor.turnRight(100);
break;
case STO:
motor.stopCar();
break;
default:
delay(600);
}
irrecv.resume();
}
}
为什么我的程序执行的时候没有反应呢? 谁帮忙看看。 求助,为什么总是有错?
Arduino:1.5.6-r2 (Windows 7), 板:"Arduino Uno"
Build options changed, rebuilding all
使用库 Robot IR Remote 在文件夹: E:\Program Files(for work)\arduino\libraries\RobotIRremote
使用库 IRremote 在文件夹: D:\Personal\Documents\Arduino\libraries\IRremote (legacy)
E:\Program Files(for work)\arduino\hardware\tools\avr\bin\avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=156 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IE:\Program Files(for work)\arduino\hardware\arduino\avr\cores\arduino -IE:\Program Files(for work)\arduino\hardware\arduino\avr\variants\standard -IE:\Program Files(for work)\arduino\libraries\RobotIRremote\src -ID:\Personal\Documents\Arduino\libraries\IRremote D:\Personal\Temp\build6035377890728783291.tmp\IRrecvDemo.cpp -o D:\Personal\Temp\build6035377890728783291.tmp\IRrecvDemo.cpp.o
E:\Program Files(for work)\arduino\hardware\tools\avr\bin\avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=156 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IE:\Program Files(for work)\arduino\hardware\arduino\avr\cores\arduino -IE:\Program Files(for work)\arduino\hardware\arduino\avr\variants\standard -IE:\Program Files(for work)\arduino\libraries\RobotIRremote\src -ID:\Personal\Documents\Arduino\libraries\IRremote E:\Program Files(for work)\arduino\libraries\RobotIRremote\src\IRremote.cpp -o D:\Personal\Temp\build6035377890728783291.tmp\Robot IR Remote\IRremote.cpp.o
E:\Program Files(for work)\arduino\hardware\tools\avr\bin\avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=156 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IE:\Program Files(for work)\arduino\hardware\arduino\avr\cores\arduino -IE:\Program Files(for work)\arduino\hardware\arduino\avr\variants\standard -IE:\Program Files(for work)\arduino\libraries\RobotIRremote\src -ID:\Personal\Documents\Arduino\libraries\IRremote E:\Program Files(for work)\arduino\libraries\RobotIRremote\src\IRremoteTools.cpp -o D:\Personal\Temp\build6035377890728783291.tmp\Robot IR Remote\IRremoteTools.cpp.o
E:\Program Files(for work)\arduino\libraries\RobotIRremote\src\IRremoteTools.cpp:5: error: 'TKD2' was not declared in this scope 按这个例子,我按下任意一个按钮,得到的值都是FFFFFFFF
不知道错在哪? irrecv.decode(&results)
楼主这句是什么意思啊?好多语法不会 十月华笑 发表于 2014-6-13 08:43
按这个例子,我按下任意一个按钮,得到的值都是FFFFFFFF
不知道错在哪?
按太久了…轻轻点一下就读出来了
页:
[1]