• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Jak połączyć dwa programy? - GPS + LoRa
#1
Przyszedł czas na połączenie 2 programów. Oddzielnie działają, jednak nie wiem jak je połączyć.
Dane z GPS muszą być przesyłane z jednego arduino do drugiego za pomocą LoRa. Obydwa szkice są dla mnie zrozumiałe. Domyślam się, że nie powinna się w ostatecznym szkicu znajdować pętla while. Myślę też, że fragment kodu LoRa powinien się znajdować przed void displayInfo(). Nie wiem jednak jak powinienem go zmodyfikować.
Użyte moduły to
https://pl.aliexpress.com/item/Free-Samp...5c0fcOxBbJ
https://pl.aliexpress.com/item/For-Repla...5c0fcOxBbJ
Z góry dziękuję za podpowiedzi i poprawki.

Kod:
#include <TinyGPS++.h>
#include <SoftwareSerial.h>

static const int RXPin = 0, TXPin = 1;
static const uint32_t GPSBaud = 9600;

// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);

void setup()
{
 Serial.begin(115200);
 ss.begin(GPSBaud);

 Serial.println(F("DeviceExample.ino"));
 Serial.println(F("A simple demonstration of TinyGPS++ with an attached GPS module"));
 Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
 Serial.println(F("by Mikal Hart"));
 Serial.println();
}

void loop()
{
 // This sketch displays information every time a new sentence is correctly encoded.
 while (ss.available() > 0)
   if (gps.encode(ss.read()))
     displayInfo();

 if (millis() > 5000 && gps.charsProcessed() < 10)
 {
   Serial.println(F("No GPS detected: check wiring."));
   while(true);
 }
}

void displayInfo()
{
 Serial.print(F("Location: "));
 if (gps.location.isValid())
 {
   Serial.print(gps.location.lat(), 6);
   Serial.print(F(","));
   Serial.print(gps.location.lng(), 6);
 }
 else
 {
   Serial.print(F("INVALID"));
 }

 Serial.print(F("  Date/Time: "));
 if (gps.date.isValid())
 {
   Serial.print(gps.date.month());
   Serial.print(F("/"));
   Serial.print(gps.date.day());
   Serial.print(F("/"));
   Serial.print(gps.date.year());
 }
 else
 {
   Serial.print(F("INVALID"));
 }

 Serial.print(F(" "));
 if (gps.time.isValid())
 {
   if (gps.time.hour() < 10) Serial.print(F("0"));
   Serial.print(gps.time.hour());
   Serial.print(F(":"));
   if (gps.time.minute() < 10) Serial.print(F("0"));
   Serial.print(gps.time.minute());
   Serial.print(F(":"));
   if (gps.time.second() < 10) Serial.print(F("0"));
   Serial.print(gps.time.second());
   Serial.print(F("."));
   if (gps.time.centisecond() < 10) Serial.print(F("0"));
   Serial.print(gps.time.centisecond());
 }
 else
 {
   Serial.print(F("INVALID"));
 }

 Serial.println();
}
Kod:
#include <SoftwareSerial.h>

SoftwareSerial mySerial(3, 2); //TX, RX
// gnd SET_A and SET_B for Normal Mode (Send and Receive)

void setup() {
 Serial.begin(9600);
 mySerial.begin(9600);
}

void loop() {
 
 
 if(Serial.available() > 0){//Read from serial monitor and send over UM402
   String input = Serial.readString();
   mySerial.println(input);    
 }

 if(mySerial.available() > 1){//Read from UM402 and send to serial monitor
   String input = mySerial.readString();
   Serial.println(input);    
 }
 delay(20);
}
 
Odpowiedź
#2
(07-04-2019, 22:13)Michal320K napisał(a): Przyszedł czas na połączenie 2 programów. Oddzielnie działają, jednak nie wiem jak je połączyć.
Kurs Arduino rozwiąże problem.
Kod z Delay i/lub bez WDT to nie kod, to DEMO!
Kod wymaga komentarzy!
Nie pomagam leniwym analfabetom.

Zaawansowana Sonda Logiczna


 
Odpowiedź
#3
Czy idę w dobrą stronę? Zrezygnowałem z biblioteki TinyGPS++, ponieważ uważam, że nie jest potrzebna.

Kod:
#include <SoftwareSerial.h>

// HPS
int RXPin = 8;
int TXPin = 7;

int GPSBaud = 9600;

SoftwareSerial gpsSerial(RXPin, TXPin);
SoftwareSerial loraSerial(3, 2); //TX, RX

void setup()
{
 // Start the Arduino hardware serial port at 9600 baud
 Serial.begin(9600);

 // Start the software serial port at the GPS's default baud
 gpsSerial.begin(GPSBaud);

  loraSerial.begin(9600);
}

void loop()
{
 
 
 if(gpsSerial.available() > 0){//Read from serial monitor and send over UM402
   String input = gpsSerial.readString();
   loraSerial.println(input);    
 }

 if(loraSerial.available() > 1){//Read from UM402 and send to serial monitor
   String input = loraSerial.readString();
   Serial.println(input);    
 }
 delay(20);
}
Z góry dziękuję za odpowiedzi.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości