极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15469|回复: 2

红外遥控接收与软串口同时使用冲突

[复制链接]
发表于 2017-1-26 17:45:58 | 显示全部楼层 |阅读模式
本人初学,鼓捣2天实在搞不定,求大神指导。先说一下功能:另一个arduino设备串口输出一串数组比如 156,0,1,560,20,30,12350 本UNO软串口读取没任何问题,但加上红外接收代码就经常显示乱码。比方说上面的数组中间的某个逗号变成空格或者大于号,也有可能数字20直接变成30,读取错误数据的几率大约30%。但只要把下列代码中的  irrecv.enableIRIn(); //启动红外解码 删掉就一切正常。会不会是库里冲突呢?附代码求指导,先谢了!

#include <IRremote.h>
#include <SoftwareSerial.h>  
SoftwareSerial mySerial(2, 3); //定义软串口 RX, TX
int RECV_PIN = 11;      //定义RECV_PIN为11引脚
IRrecv irrecv(RECV_PIN); //设置RECV_PIN(也就是11引脚)为红外接收端
decode_results results; //定义results变量为红外结果存放位置
//定义一个comdata字符串变量,赋初值为空值
int mark = 0;
String comdata = "";
void setup(){
   // irrecv.enableIRIn(); //启动红外解码
    Serial.begin(57600); //串口波特率设为57600
    mySerial.begin(57600); //软串口波特率设为57600
   }
    void loop() {
   checkIR( ); // 檢查 IR 紅外遙控
   checkRC( ); // 檢查 软串口
}
void checkRC( ) {
    //j是分拆之后数字数组的位置记数
   int j = 0;
   //不断循环检测串口缓存,一个个读入字符串,
   while (mySerial.available() > 0)
  {
    //读入之后将字符串,串接到comdata上面。
    comdata += char(mySerial.read());
    //延时一会,让串口缓存准备好下一个数字,不延时会导致数据丢失,
    delay(2);
    //标记串口读过数据,如果没有数据的话,直接不执行这个while了。
    mark = 1;
  }
if(mark == 1) //如果接收到数据则执行comdata分析操作,否则什么都不做。
  {
    //显示刚才输入的字符串(可选语句)
    Serial.println(comdata);
     //comdata的字符串已经全部转换到numdata了,清空comdata以便下一次使用,
     //如果不请空的话,本次结果极有可能干扰下一次。
     comdata = String("");
//输出之后必须将读到数据的mark置0,不置0下次循环就不能使用了。
mark = 0;
  }
}
void checkIR( ) {
    //是否接收到解码数据,把接收到的数据存储在变量results中
  if (irrecv.decode(&results)) {
    //接收到的数据以16进制的方式在串口输出
    //Serial.println(results.value, HEX);
    //一旦接收到红外代码,根据不同键执行不同程序。
    if(results.value == 0xFD00FF){
      delay(1000);//其他代码省略
    }
    irrecv.resume(); // 继续等待接收下一组信号
  }
}
回复

使用道具 举报

发表于 2017-2-5 09:25:42 | 显示全部楼层
感觉问题出在位长,红外线是十六进制,串口是ASC码
回复 支持 反对

使用道具 举报

发表于 2017-2-5 16:21:41 | 显示全部楼层
都接软串口,用不同针脚定义试试。一般我不软硬结合用,感觉硬的比软的权限高:)
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-23 22:31 , Processed in 0.052074 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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