0

我目前正在尝试在我的 arduino uno 上使用两个不同的串行端口,即 (2,3) 用于 gsm,(8,9) 用于 gps。我已经尝试了这两个链接;

1) arduino-uno-with-multiple-software-serial-devices

2)在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() 方法来关闭和打开每个端口,但它似乎没有按预期工作。欢迎任何帮助。谢谢你。

4

1 回答 1

1

您将无法使用两个软件串行库来收听 SIM900 和 GPS。

主要问题是 SIM900 字符可以随时到达。当您正在收听一个软件串行端口时,它们可能会到达。

唯一的方法是为其中一个设备使用硬件串行端口。我建议将 GPS TX 引脚连接到 Arduino RX 引脚 0。然后您将读取 GPS 字符Serial。您必须断开引脚 0 才能通过 USB 上传新草图。您仍然可以使用Serial.print在串行监视器窗口上显示信息。

SIM900 应该在引脚 8 和 9 上,您可以在其中使用AltSoftSerial. 这SoftwareSerial. _ SoftwareSerial长时间禁用中断,这可能会干扰草图的其他部分或其他库。不惜一切代价避免它。

此答案和我的NeoGPS库安装页面中的更多详细信息:选择串行端口

NeoGPS并且AltSoftSerial可以从 Arduino IDE 的菜单Sketch -> Include Library -> Manage Libraries下获得。

于 2018-04-26T00:31:46.103 回答