xiaoesky 发表于 2014-8-14 10:19:53

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

设备:arduino pro mini + 红外发射管(LED) + nRF24L01

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

问题:

先看两组代码:

代码1:
//定义三个数组,分别是关、开、温度设定。
unsigned int turn_off = {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 = {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 = {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 = {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 = {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 = {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

xiaoesky 发表于 2014-8-14 11:12:18

本帖最后由 xiaoesky 于 2014-8-14 11:44 编辑

瘦网虫 发表于 2014-8-14 11:07 static/image/common/back.gif
很可能是溢出了。

参考这个


{:soso_e179:} 我也是这样分析的。

xiaoesky 发表于 2014-8-14 11:14:15

瘦网虫 发表于 2014-8-14 11:07 static/image/common/back.gif
很可能是溢出了。

参考这个


哦哦,谢谢!我觉得你的这个方法应该比较有效。

xiaoesky 发表于 2014-8-15 23:15:00

瘦网虫 发表于 2014-8-14 11:07 static/image/common/back.gif
很可能是溢出了。

参考这个


我才参照了你的建议,采用这种方式把数据存放到flash中:
PROGMEM unsigned int set_temp = {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中?这样才能使用这组数据吗?
页: [1]
查看完整版本: 红外发射问题【arduino pro mini + 红外发射管(LED) + nRF24L01】