非常奇怪的现象,求大神解答!!-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5739|回复: 9

[已解决] 非常奇怪的现象,求大神解答!!

[复制链接]
发表于 2013-11-18 21:16 | 显示全部楼层 |阅读模式
本帖最后由 duanliangcong 于 2013-11-20 16:22 编辑

程序是:
#include <SoftwareSerial.h>
SoftwareSerial gps(0,1);
char data;
void setup()

{
  Serial.begin(4800);
  gps.begin(4800);
}

void loop()
{
if(gps.available() > 0)
{
   data = gps.read();
   Serial.print(data);
}
}


GPS是SIRF2   TTL接口的

这程序我用在UNO上面可以运行,用串口监视器软件能看到数据;用在MAGE2560上面编译能通过,但是不能运行。在串口监视器上看不到任何数据。GPS的TX接MAGE2560上的0(RX0)
为什么会出现这样的情况呢?按道理来讲,在UNO上能运行的,在MAGE2560上应该也能运行啊

发表于 2013-11-18 22:53 | 显示全部楼层
一、0,1是默认的硬件串口,别用SoftwareSerial
二、Mega上还有serial1、2、3,没必要用SoftwareSerial
三、UNO上每个IO口都可以做SoftwareSerial,但MEGA上只有特定的一些IO口可以
发表于 2013-11-18 23:52 | 显示全部楼层
用Mega2560的硬串口多过软串口
 楼主| 发表于 2013-11-19 12:04 | 显示全部楼层
本帖最后由 duanliangcong 于 2013-11-19 12:06 编辑
奈何col 发表于 2013-11-18 22:53
一、0,1是默认的硬件串口,别用SoftwareSerial
二、Mega上还有serial1、2、3,没必要用SoftwareSerial
三 ...

谢谢您的解答。按照您所说的。我将程序改成了如下,但是还是行不通。麻烦您指点一下。修改后的程序如下:

int rxPin = 0;                    // RX
int txPin = 1;                    // TX
char data;

void setup()
{
  Serial.begin(4800);
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
}

void loop()
{
if(Serial.available() > 0)
{
   data = Serial.read();
   Serial.print(data);
}
}
 楼主| 发表于 2013-11-19 12:07 | 显示全部楼层
szchenwei 发表于 2013-11-18 23:52
用Mega2560的硬串口多过软串口

那您能帮忙修改一下吗,我试了很多办法,没一个成功的。
发表于 2013-11-19 15:14 | 显示全部楼层
使用了Serial.begin(4800);,便已经初始化serial了,不用再pinMode(rxPin, INPUT);pinMode(txPin, OUTPUT);

serial通常用于和计算机通信。建议你在MEGA上使用 serial1-3
 楼主| 发表于 2013-11-19 16:54 | 显示全部楼层
奈何col 发表于 2013-11-19 15:14
使用了Serial.begin(4800);,便已经初始化serial了,不用再pinMode(rxPin, INPUT);pinMode(txPin, OUTPUT); ...

果断将程序改成入下形式,结果很出乎以外。接15脚和14脚完全没反映,反而接到1脚上面MEGA2560的TX会闪烁。Serial1~Serial3我都试了。都没用。我用UNO检测了GPS,GPS并没有问题。那到底问题处在哪里呢?

int rxPin = 15;                   //MEGA2560的RX3在15脚
int txPin = 14;                   //MEGA2560的TX3在14脚         
char data;
void setup()
{
  Serial3.begin(4800);
}

void loop()
{
if(Serial3.available() > 0)
{
   data = Serial3.read();
   Serial3.print(data);
}
}
 楼主| 发表于 2013-11-19 16:55 | 显示全部楼层
本帖最后由 duanliangcong 于 2013-11-19 16:59 编辑
奈何col 发表于 2013-11-19 15:14
使用了Serial.begin(4800);,便已经初始化serial了,不用再pinMode(rxPin, INPUT);pinMode(txPin, OUTPUT); ...

果断将程序改成入下形式,结果很出乎以外。接15脚和14脚完全没反映,反而接到1脚上面MEGA2560的TX会闪烁。而且不能按复位按钮,否则程序就中断不运行了,而且复位按钮按下后,MEGA2560板子上的L灯不会灭了再亮。有一种死机的现象。Serial1~Serial3我都试了。都没用。我用UNO检测了GPS,GPS并没有问题。那到底问题处在哪里呢?

int rxPin = 15;                   //MEGA2560的RX3在15脚
int txPin = 14;                   //MEGA2560的TX3在14脚         
char data;
void setup()
{
  Serial3.begin(4800);
}

void loop()
{
if(Serial3.available() > 0)
{
   data = Serial3.read();
   Serial3.print(data);
}
}

点评

tx、rx闪是和电脑通信时看的,你弄GPS就别管灯了 你想在电脑上看到输出的结构,得用Serial.print(data);而不是serial3  详情 回复 发表于 2013-11-19 22:58
发表于 2013-11-19 22:58 | 显示全部楼层
duanliangcong 发表于 2013-11-19 16:55
果断将程序改成入下形式,结果很出乎以外。接15脚和14脚完全没反映,反而接到1脚上面MEGA2560的TX会闪烁。 ...

tx、rx闪是和电脑通信时看的,你弄GPS就别管灯了

你想在电脑上看到输出的结构,得用Serial.print(data);而不是serial3
 楼主| 发表于 2013-11-20 16:21 | 显示全部楼层
奈何col 发表于 2013-11-19 22:58
tx、rx闪是和电脑通信时看的,你弄GPS就别管灯了

你想在电脑上看到输出的结构,得用Serial.print(data); ...

ok了。确实不用管灯。我用数传传回来的数据。成功了。谢谢,非常感谢您的帮助
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-4 03:36 , Processed in 0.101656 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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