|
本帖最后由 openmmoo 于 2012-10-21 12:33 编辑
使用atmega8L制作arduino最小系统,接红外电路中又遇到了不少问题,来求指点:
1、atmega8l使用红外库找不到TCCR2A TCCR2B OCR2B的问题。
atmega8l最小系统使用极客工坊的 红外库时,提示找不到TCCR2A TCCR2B OCR2B,网上查了一下,可能是atmega8系统的bootloader系统太老,没定定义这几个寄存器。
在红外库的IRremote.cpp 文件中发现其包含了avr的interrupt.h文件,就在目录中找到此文件,在里面定义TCCR2A TCCR2B OCR2B这三个常量,编译通过。
现在问题:我对arduino不太熟,这样定义宏常量,可以吗?因为我的硬件电路方面还有问题,下面将说到,所以我不能测试这个编译好的程序是否能正常运行,求高手指正一下。
2、单片机收不到红外信号。
下图是检测红外接收头(0038)是否可以接收信号(由于没有找红外接收头,下图用一个三极管代替,左一脚是out,中间是Gnd,右边脚是vcc)。当有信号时,二极管根据信号闪烁。
把上图中的电路改装后加到下面的原理图中,连到单片机。
电路原理图是网上找的,用的是0038红外接收头,r16我用的是120n,r17我用的10k的可变电阻,调到最大,下面是面包板图:
面包板中取消了10k的电阻,因为加了10k电阻后,led1长亮。
以下是代码:
#include <IRremote.h>
#include <IRremoteInt.h>
int RECV_PIN = 10;
int LED =9;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
pinMode(LED,OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
digitalWrite(LED,HIGH);
delay(1000);
digitalWrite(LED,LOW);
irrecv.resume(); // Receive the next value
}
}
以上软硬件应实现以下功能:
当0038接收红外信号,LED1就会闪烁。然后把信号送到单片机的10脚,软件接收到信号,就将Led2点亮1秒。
现在问题:用机顶盒和海尔电扇的遥控LED1闪烁,但是led2就是不亮。不知是硬件还是软件原因,求指点。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|