也来贡献一点东西——关于IRemote库与mega8
本帖最后由 一墙一别院 于 2013-12-1 16:42 编辑到年尾了同事家想搞个GSM防盗器,顺手做了一个,用了mega8的片子,网淘了个sim900a的拆机模块,加上坏主板上的一些部件,可是ARDUINO的IRemote库我想大家因为程序体积问题都是在mega16以上片子的系统上完成设计的吧,因为从来没见到有人说它在mega8上是不好使的,事实也确实如此,它有一个Arduino的兼容性错误(姑且让我这样称呼它吧),因为我的GSM模块是拆机件,人工引出的pwr_key所以是需要外加1s左右的高电平开机的,但在红外控制部分我使用了中断,IRemote库在MEGA8上是使用的定时器1中断,其他片子大多是TIMER2,具体可以去看IRemoteInt文件,很抱歉因为作者这个特殊的设定,造成了一旦在mega8上使用该库文件,那么就会造成Arduino库的所有使用TIMER0的函数不好使,例如delay(),macros()函数,他们都是使用的TIMER0计数器,但是mega8的TIMER0与TIMER1是共用中断寄存器TIMSK的,作者在对TIMER1的TIMSK寄存器赋值时不小心的用了这样一句:“
#if defined(__AVR_ATmega8P__) || defined(__AVR_ATmega8__)
#define TIMER_ENABLE_INTR (TIMSK = _BV(OCIE1A))
作者没有意识到他在开启TIMER1的比较匹配中断时也将TIMER0的中断溢出位TIMSK的TOIE0位也抹0了,所以现在你只需要做一件事,那就是找到上面那段话毫不留情的将它修改成:
#if defined(__AVR_ATmega8P__) || defined(__AVR_ATmega8__)
#define TIMER_ENABLE_INTR (TIMSK |= _BV(OCIE1A))
好吧,现在你可以在MEGA8上惬意的享受IRemote库带来的便捷了{:soso_e104:}
外带附上几张我的GSM报警器
另外感觉红外不是很给力,在研究315M波段的收发信器以及NRF24L01,希望有经验的朋友一起来交流下!{:soso_e100:} 为什么我用mega8板子的时候,下载带红外库文件的程序,装不下呢? mega8本来就只有8k的空间,如果烧入bootloader的话就只有7k左右了,光编译IRemote库大概就有7k左右了,你当然烧不进啦,首先我没有烧bootloader,IRemote库也被我精简过了,就剩下了我需要的代码,全部程序下载完4k不到:lol hp198969 发表于 2013-12-1 19:09 static/image/common/back.gif
为什么我用mega8板子的时候,下载带红外库文件的程序,装不下呢?
mega8本来就只有8k的空间,如果烧入bootloader的话就只有7k左右了,光编译IRemote库大概就有7k左右了,你当然烧不进啦,首先我没有烧bootloader,IRemote库也被我精简过了,就剩下了我需要的代码,同时我也没有采用arduino.h库函数,所以全部程序下载完4k不到:lol sim900a多少钱买的
flashria 发表于 2013-12-2 10:08 static/image/common/back.gif
sim900a多少钱买的
单买片子的话38,邮票封装,自己焊接麻烦,买2手拆机带板才42,可惜就是没有引出mic跟speaker,现在有冲动飞线出来加MT8870做DTMF控制:lol hp198969 发表于 2013-12-1 19:09 static/image/common/back.gif
为什么我用mega8板子的时候,下载带红外库文件的程序,装不下呢?
我也装不下,超体积了 楼主,可以吧你精简后的 红外库 分享一下吗,Atmp8 很需要它 本帖最后由 一墙一别院 于 2013-12-3 21:57 编辑
绿林网页 发表于 2013-12-2 22:56 static/image/common/back.gif
楼主,可以吧你精简后的 红外库 分享一下吗,Atmp8 很需要它
我是直接拿的功能,然后使用的自己的编码格式,只保留了hashcode解码写到程序里面了,不知道你要些什么功能,简单的精简方式就是,收发分离的话单独去掉收或者发,收发一体的话,根据自己的片子和使用的代码类型,去掉其他片子的文件和其他类型的解码,深一点的话就是继续将ARDUINO.h的库函数再改成avr的库函数,但这时切忌不要使用arduino的IDE编译,因为他是自动加ARDUINO库的:lol 一墙一别院 发表于 2013-12-3 21:53 static/image/common/back.gif
我是直接拿的功能,然后使用的自己的编码格式,只保留了hashcode解码写到程序里面了,不知道你要些什么 ...
就是 收和发 分离开,不需要支持那么多设备协议,只要支持Arduino测试用的那个遥控器就可以了 绿林网页 发表于 2013-12-3 22:33 static/image/common/back.gif
就是 收和发 分离开,不需要支持那么多设备协议,只要支持Arduino测试用的那个遥控器就可以了
你说的测试那个遥控器是什么代码格式呢…… 本帖最后由 绿林网页 于 2013-12-4 21:10 编辑
一墙一别院 发表于 2013-12-4 20:54 static/image/common/back.gif
你说的测试那个遥控器是什么代码格式呢……
http://gd3.alicdn.com/bao/uploaded/i3/13130021724949638/T1fcedXthXXXXXXXXX_!!0-item_pic.jpg_310x310.jpg_.webp
http://tradearchive.taobao.com/trade/detail/tradeSnap.htm?spm=a1z09.2.9.157.xULOvA&tradeID=268724481542134
MP3遥控器 红外载波频率:38KHz
http://img02.taobaocdn.com/imgextra/i2/49873130/T2F886Xn4cXXXXXXXX_!!49873130.jpg
资料下载 http://pan.baidu.com/share/link?shareid=459500&uk=2302102993 本帖最后由 一墙一别院 于 2013-12-5 19:41 编辑
绿林网页 发表于 2013-12-4 21:06 static/image/common/back.gif
http://tradearchive.taobao.com/trade/detail/tradeSnap.htm?spm=a1z09.2.9.157.xULOvA&tradeID=268 ...
你这个好像也没协议的,精简了一个已经修复了mega8的定时器错误,你自己试下行不行 一墙一别院 发表于 2013-12-5 19:37 static/image/common/back.gif
你这个好像也没协议的,精简了一个已经修复了mega8的定时器错误,你自己试下行不行
先谢谢哥们,其次,编译好像过不了,报错了
代码:#include <IRremote.h>
#include <IRremoteInt.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(); // 接收下一个值
}
}
用Atm8 和 uno 都 报错,编译不过
IRremoteMin\IRremote.cpp.o: In function `MATCH(int, int)':
/IRremoteInt.h:176: multiple definition of `MATCH(int, int)'
sketch_dec05a.cpp.o:D:\Arduino\libraries\IRremoteMin/IRremoteInt.h:176: first defined here
IRremoteMin\IRremote.cpp.o: In function `MATCH_MARK(int, int)':
/IRremoteInt.h:177: multiple definition of `MATCH_MARK(int, int)'
sketch_dec05a.cpp.o:D:\Arduino\libraries\IRremoteMin/IRremoteInt.h:177: first defined here
IRremoteMin\IRremote.cpp.o: In function `MATCH_SPACE(int, int)':
/IRremoteInt.h:178: multiple definition of `MATCH_SPACE(int, int)'
sketch_dec05a.cpp.o:D:\Arduino\libraries\IRremoteMin/IRremoteInt.h:178: first defined here 我弄好了,原来是多添加了一个引用,,我是点菜单上的查入库,就自动添加了这两个
#include <IRremote.h>
#include <IRremoteInt.h>
就报错了,后来发现,删掉第二个,只保留第一个,就不报错了,可以用了
非常感谢~
页:
[1]
2