我目前正试图在我的arduino uno上使用两个不同的串口,即(2,3)用于gsm,(8,9)用于gps。我试过这两个链接; 击>
1)arduino-uno-with-multiple-software-serial-devices
2)Two port receive using software serial on Arduino.
但似乎没有任何效果。串行监视器什么也没显示。 击>
更新
我将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()方法来关闭和打开每个端口,但它似乎没有按预期工作。欢迎任何帮助。谢谢。
答案 0 :(得分:1)
您将无法使用两个软件串行库来收听SIM900和GPS。
主要问题是SIM900字符可以随时到达。当您正在收听一个软件串口时,它们可能会到达。
唯一的方法是使用其中一个设备的硬件串口。我建议将GPS TX引脚连接到Arduino RX引脚0.然后您将在Serial
上读取GPS字符。您必须断开引脚0以通过USB上传新草图。您仍然可以使用Serial.print
在“串行监视器”窗口中显示信息。
SIM900应位于引脚8和8上。 9,你可以使用AltSoftSerial
。这比<{1}} 更高效。 SoftwareSerial
长时间禁用中断,这可能会干扰草图的其他部分或其他库。不惜一切代价避免它。
this answer和我的NeoGPS图书馆安装页面中的更详细信息:Choosing a Serial Port。
SoftwareSerial
和NeoGPS
可从Arduino IDE的菜单 Sketch - &gt;下获得。包含图书馆 - &gt;管理图书馆。