softwareserial 是否有使用条件?-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13476|回复: 4

softwareserial 是否有使用条件?

[复制链接]
发表于 2013-4-12 09:51 | 显示全部楼层 |阅读模式
在用arduino uno 跟apc220连接的实验中,采用了softwareserial进行信息传输,因为还在初学阶段就采用了官网提供的例程,如下
<code>
#include <SoftwareSerial.h>
const int rx=10;
const int tx=11;
SoftwareSerial mySerial(rx, tx); // RX, TX
void setup()  
{
  // Open serial communications and wait for port to open:
  pinMode(rx,INPUT);
  pinMode(tx,OUTPUT);
  Serial.begin(57600);

  Serial.println("22!");
  // set the data rate for the SoftwareSerial port
  mySerial.begin(4800);
  mySerial.println("11");
}
void loop() // run over and over
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}
</code>
但是实验时,4800窗口下未能输出11,而是输出了乱码……ÿÿ
不知道是什么原因
2.GIF
发表于 2013-4-12 11:34 | 显示全部楼层
在程序中,把两个串口的波特率改成一致, 串口moniter的波特率改为和程序一直.
另外,你的硬件是怎么连接的?
发表于 2013-4-15 08:12 | 显示全部楼层
这里:
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
软串口收到的数据被应串口写出去了,但是你应串口的波特率是57600:
Serial.begin(57600);
你软串口的波特率是4800:
mySerial.begin(4800);
然后你IDE的波特率是4800;
所以当应串口写入数据的时候就会乱码。
要么你把两个串口波特率改成一样的,要么就把上面程序改掉:
  if (mySerial.available())
    mySerial.write(mySerial.read());
  if (Serial.available())
    Serial.write(Serial.read());
发表于 2013-4-15 11:22 | 显示全部楼层
arduino 的软串口库有局限就是波特率不能太高,最好在9600及以下,否则容易出问题。
发表于 2013-11-8 16:22 | 显示全部楼层
输出时用char格式试试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-1-1 19:06 , Processed in 0.077427 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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