极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11198|回复: 5

红外发射问题【arduino pro mini + 红外发射管(LED) + nRF24L01】

[复制链接]
发表于 2014-8-14 10:19:53 | 显示全部楼层 |阅读模式
设备:arduino pro mini + 红外发射管(LED) + nRF24L01

原理:arduino pro mini通过nRF24L01接收到开关指令后,再由红外发射管控制空调开关。

问题:

先看两组代码:

代码1:
//定义三个数组,分别是关、开、温度设定。
unsigned int turn_off[212] = {8950,4400,600,1600,600,1600,600,500,600,500,550,500,600,500,600,1600,600,1650,550,1650,550,1650,550,1600,600,500,600,500,600,500,550,1650,600,1600,550,550,550,500,600,500,600,500,600,500,550,500,600,500,600,500,550,550,550,500,600,500,600,500,600,500,550,500,600,500,600,500,600,500,550,550,550,500,600,500,600,500,550,1650,600,500,550,550,550,500,600,500,600,500,550,500,600,550,600,450,600,1600,550,550,550,500,600,500,600,500,600,500,600,500,550,1650,550,500,600,500,600,500,600,500,550,500,600,500,600,500,600,500,550,550,550,550,550,500,600,500,600,450,600,500,600,500,600,500,600,500,600,450,600,500,600,500,600,500,600,450,600,500,650,400,650,500,550,500,600,550,550,500,550,550,550,550,550,500,600,500,600,500,600,500,550,1650,550,550,550,1650,550,450,650,500,600,500,600,450,600,500,600,1650,550,1600,600,1650,550,1600,600,500,600,500,550,550,550,500,600,25546};

unsigned int turn_on[212] = {8950,4400,600,1600,600,1600,600,500,600,500,550,550,550,500,600,1600,600,1600,600,1600,600,1650,550,1650,550,500,600,500,550,550,550,1650,600,1600,600,500,550,500,600,500,600,500,550,550,550,550,550,550,550,500,550,550,600,450,600,500,600,500,600,500,600,450,600,550,550,500,550,550,600,450,600,500,600,500,550,550,600,1600,550,550,550,500,600,550,550,500,600,500,550,550,550,500,600,500,600,1600,600,500,550,550,550,500,600,500,550,550,600,500,550,1650,550,500,600,550,550,500,550,550,550,550,550,550,550,500,600,500,550,550,550,500,600,500,600,500,600,500,550,500,600,500,550,550,550,550,550,500,600,500,600,500,600,500,550,500,600,500,550,1650,600,500,600,500,550,550,550,550,550,500,600,500,550,550,550,500,600,500,600,500,550,1650,550,550,550,1650,550,550,550,550,550,500,550,550,550,500,600,1650,550,1650,550,1650,550,1650,550,550,550,1600,600,550,550,500,600,29482};

unsigned int set_temp[212] = {8950,4450,550,1600,600,1650,550,550,550,500,600,500,550,550,550,1650,550,1650,550,1650,550,1650,550,1650,550,550,550,1650,550,550,550,500,600,1600,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,550,550,500,600,500,550,550,550,550,550,500,600,500,550,550,550,550,550,500,600,500,600,500,550,550,550,500,600,1600,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,550,550,1650,550,500,600,500,600,500,550,550,550,500,600,500,600,1600,600,500,550,550,550,500,600,500,600,500,550,550,550,550,550,500,600,500,550,550,550,550,550,500,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,1650,550,550,550,500,600,500,550,550,550,550,550,500,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,500,600,500,600,1600,600,500,550,1650,600,1600,600,1600,600,1600,600,1600,600,18540};

//通过nRF24l01接收到指令后,再由红外控制空调

    switch(val)
    {
      case 1:irsend.sendRaw(turn_off,212,38);irsend.sendRaw(turn_off,212,38);break;    //关空调
      case 2:irsend.sendRaw(turn_on,212,38);irsend.sendRaw(turn_on,212,38);break;    //开空调
      case 3:irsend.sendRaw(set_temp,212,38);irsend.sendRaw(set_temp,212,38);break;    //设定温度为26度  
     }

以上代码调试正常,没问题。但把代码改为代码2这样就出问题了,无法控制空调了,请各位高人指点与解决。

代码2:
//定义三个数组,分别是关、开、温度设定,跟代码1没变化。
unsigned int turn_off[212] = {8950,4400,600,1600,600,1600,600,500,600,500,550,500,600,500,600,1600,600,1650,550,1650,550,1650,550,1600,600,500,600,500,600,500,550,1650,600,1600,550,550,550,500,600,500,600,500,600,500,550,500,600,500,600,500,550,550,550,500,600,500,600,500,600,500,550,500,600,500,600,500,600,500,550,550,550,500,600,500,600,500,550,1650,600,500,550,550,550,500,600,500,600,500,550,500,600,550,600,450,600,1600,550,550,550,500,600,500,600,500,600,500,600,500,550,1650,550,500,600,500,600,500,600,500,550,500,600,500,600,500,600,500,550,550,550,550,550,500,600,500,600,450,600,500,600,500,600,500,600,500,600,450,600,500,600,500,600,500,600,450,600,500,650,400,650,500,550,500,600,550,550,500,550,550,550,550,550,500,600,500,600,500,600,500,550,1650,550,550,550,1650,550,450,650,500,600,500,600,450,600,500,600,1650,550,1600,600,1650,550,1600,600,500,600,500,550,550,550,500,600,25546};

unsigned int turn_on[212] = {8950,4400,600,1600,600,1600,600,500,600,500,550,550,550,500,600,1600,600,1600,600,1600,600,1650,550,1650,550,500,600,500,550,550,550,1650,600,1600,600,500,550,500,600,500,600,500,550,550,550,550,550,550,550,500,550,550,600,450,600,500,600,500,600,500,600,450,600,550,550,500,550,550,600,450,600,500,600,500,550,550,600,1600,550,550,550,500,600,550,550,500,600,500,550,550,550,500,600,500,600,1600,600,500,550,550,550,500,600,500,550,550,600,500,550,1650,550,500,600,550,550,500,550,550,550,550,550,550,550,500,600,500,550,550,550,500,600,500,600,500,600,500,550,500,600,500,550,550,550,550,550,500,600,500,600,500,600,500,550,500,600,500,550,1650,600,500,600,500,550,550,550,550,550,500,600,500,550,550,550,500,600,500,600,500,550,1650,550,550,550,1650,550,550,550,550,550,500,550,550,550,500,600,1650,550,1650,550,1650,550,1650,550,550,550,1600,600,550,550,500,600,29482};

unsigned int set_temp[212] = {8950,4450,550,1600,600,1650,550,550,550,500,600,500,550,550,550,1650,550,1650,550,1650,550,1650,550,1650,550,550,550,1650,550,550,550,500,600,1600,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,550,550,500,600,500,550,550,550,550,550,500,600,500,550,550,550,550,550,500,600,500,600,500,550,550,550,500,600,1600,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,550,550,1650,550,500,600,500,600,500,550,550,550,500,600,500,600,1600,600,500,550,550,550,500,600,500,600,500,550,550,550,550,550,500,600,500,550,550,550,550,550,500,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,1650,550,550,550,500,600,500,550,550,550,550,550,500,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,500,600,500,600,1600,600,500,550,1650,600,1600,600,1600,600,1600,600,1600,600,18540};

//通过nRF24l01接收到指令后,再由红外控制空调,修改了以下代码。

    switch(val)
    {
      case 1:irsend.sendRaw(turn_off,212,38);irsend.sendRaw(turn_off,212,38);break;    //关空调
      case 2:irsend.sendRaw(turn_on,212,38);delay(500);irsend.sendRaw(set_temp,212,38);break;    //开空调,并设定温度为26度
     }

删除了“delay(500);”代码也是一样无法开/关空调与设定温度。
回复

使用道具 举报

发表于 2014-8-14 11:05:58 | 显示全部楼层
是不是中间间隔太短了
开机后是不是应该等待的时间长一点再设置温度
回复 支持 反对

使用道具 举报

发表于 2014-8-14 11:07:13 | 显示全部楼层
很可能是溢出了。

参考这个

http://www.geek-workshop.com/thread-5159-1-1.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-14 11:12:18 | 显示全部楼层
本帖最后由 xiaoesky 于 2014-8-14 11:44 编辑
瘦网虫 发表于 2014-8-14 11:07
很可能是溢出了。

参考这个


{:soso_e179:} 我也是这样分析的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-14 11:14:15 | 显示全部楼层
瘦网虫 发表于 2014-8-14 11:07
很可能是溢出了。

参考这个

哦哦,谢谢!我觉得你的这个方法应该比较有效。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-15 23:15:00 | 显示全部楼层
瘦网虫 发表于 2014-8-14 11:07
很可能是溢出了。

参考这个

我才参照了你的建议,采用这种方式把数据存放到flash中:
PROGMEM unsigned int set_temp[212] = {8950,4450,550,1600,600,1650,550,550,550,500,600,500,550,550,550,1650,550,1650,550,1650,550,1650,550,1650,550,550,550,1650,550,550,550,500,600,1600,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,550,550,500,600,500,550,550,550,550,550,500,600,500,550,550,550,550,550,500,600,500,600,500,550,550,550,500,600,1600,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,550,550,1650,550,500,600,500,600,500,550,550,550,500,600,500,600,1600,600,500,550,550,550,500,600,500,600,500,550,550,550,550,550,500,600,500,550,550,550,550,550,500,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,1650,550,550,550,500,600,500,550,550,550,550,550,500,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,500,600,500,600,500,550,550,550,500,600,500,600,1600,600,500,550,1650,600,1600,600,1600,600,1600,600,1600,600,18540};

然后我要使用这些数据,是不是要做一个循环?读取到数组set_temp[212]中?这样才能使用这组数据吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 04:27 , Processed in 0.035300 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表