没有从两个不同的串口 Arduino Uno 收到数据
No data received from two different Serial Port Arduino Uno
我目前正在尝试在我的 arduino uno 上使用两个不同的串行端口,即 (2,3) 用于 gsm 和 (8,9) 用于 gps。我已经尝试了这两个链接;
1) arduino-uno-with-multiple-software-serial-devices
但似乎没有任何效果。串口监视器什么也没显示。
更新
我将我的 gps 和串行端口的库更改为 AltSoftSerial 和 NeoSWSerial。尽管如果我在示例中使用它们,它们都可以正常工作。但是当我实现这两个库和 运行 代码时,串行监视器中没有结果。
#include <NMEAGPS.h>
#include <GPSport.h>
#include <AltSoftSerial.h>
AltSoftSerial sim900a;
NMEAGPS gps; // This parses the GPS characters
gps_fix fix;
void setup()
{
Serial.begin(9600);
sim900a.begin(9600);
gpsPort.begin(9600);
}
void loop()
{
while (gps.available(gpsPort))
{
fix = gps.read();
if (fix.valid.location)
{
Serial.println();
Serial.print("Latitude= ");
Serial.print(fix.latitude(), 6);
Serial.print(" Longitude= ");
Serial.println(fix.longitude(), 6);
sendData = 1;
}
else
{
sendData = 0;
}
}
if(sendData == 1)
{
//do stuffs
delay(5000);
}
}
P/S:我已经尝试使用 listen() 方法关闭和打开每个端口,但它似乎没有按预期工作。欢迎任何帮助。谢谢。
您将无法使用两个软件串口库来收听SIM900和GPS。
主要问题是SIM900角色随时可以到达。他们可能会在您正在收听一个软件串行端口时到达。
唯一的方法是使用其中一台设备的硬件串口。我建议将 GPS TX 引脚连接到 Arduino RX 引脚 0。然后您将在 Serial
上读取 GPS 字符。您必须断开引脚 0 才能通过 USB 上传新草图。您仍然可以使用 Serial.print
在串行监视器上显示信息 window。
SIM900 应该在引脚 8 和 9 上,您可以在此处使用 AltSoftSerial
。这比 SoftwareSerial
效率 多。 SoftwareSerial
长时间禁用中断,这可能会干扰草图的其他部分或其他库。不惜一切代价避免它。
this answer and on my NeoGPS library Installation page: Choosing a Serial Port 中有更多详细信息。
NeoGPS
和 AltSoftSerial
可从 Arduino IDE 获得,在菜单 Sketch -> Include Library -> Manage Libraries 下。
我目前正在尝试在我的 arduino uno 上使用两个不同的串行端口,即 (2,3) 用于 gsm 和 (8,9) 用于 gps。我已经尝试了这两个链接;
1) arduino-uno-with-multiple-software-serial-devices
但似乎没有任何效果。串口监视器什么也没显示。
更新
我将我的 gps 和串行端口的库更改为 AltSoftSerial 和 NeoSWSerial。尽管如果我在示例中使用它们,它们都可以正常工作。但是当我实现这两个库和 运行 代码时,串行监视器中没有结果。
#include <NMEAGPS.h>
#include <GPSport.h>
#include <AltSoftSerial.h>
AltSoftSerial sim900a;
NMEAGPS gps; // This parses the GPS characters
gps_fix fix;
void setup()
{
Serial.begin(9600);
sim900a.begin(9600);
gpsPort.begin(9600);
}
void loop()
{
while (gps.available(gpsPort))
{
fix = gps.read();
if (fix.valid.location)
{
Serial.println();
Serial.print("Latitude= ");
Serial.print(fix.latitude(), 6);
Serial.print(" Longitude= ");
Serial.println(fix.longitude(), 6);
sendData = 1;
}
else
{
sendData = 0;
}
}
if(sendData == 1)
{
//do stuffs
delay(5000);
}
}
P/S:我已经尝试使用 listen() 方法关闭和打开每个端口,但它似乎没有按预期工作。欢迎任何帮助。谢谢。
您将无法使用两个软件串口库来收听SIM900和GPS。
主要问题是SIM900角色随时可以到达。他们可能会在您正在收听一个软件串行端口时到达。
唯一的方法是使用其中一台设备的硬件串口。我建议将 GPS TX 引脚连接到 Arduino RX 引脚 0。然后您将在 Serial
上读取 GPS 字符。您必须断开引脚 0 才能通过 USB 上传新草图。您仍然可以使用 Serial.print
在串行监视器上显示信息 window。
SIM900 应该在引脚 8 和 9 上,您可以在此处使用 AltSoftSerial
。这比 SoftwareSerial
效率 多。 SoftwareSerial
长时间禁用中断,这可能会干扰草图的其他部分或其他库。不惜一切代价避免它。
this answer and on my NeoGPS library Installation page: Choosing a Serial Port 中有更多详细信息。
NeoGPS
和 AltSoftSerial
可从 Arduino IDE 获得,在菜单 Sketch -> Include Library -> Manage Libraries 下。