Fixed GPS -> Working
This commit is contained in:
+38
-14
@@ -3,7 +3,6 @@
|
|||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
#include <Adafruit_GFX.h>
|
#include <Adafruit_GFX.h>
|
||||||
#include <Adafruit_SSD1306.h>
|
#include <Adafruit_SSD1306.h>
|
||||||
#include <SoftwareSerial.h>
|
|
||||||
#include <TinyGPS++.h>
|
#include <TinyGPS++.h>
|
||||||
|
|
||||||
|
|
||||||
@@ -21,8 +20,8 @@
|
|||||||
#define LORA_FREQ 868E6
|
#define LORA_FREQ 868E6
|
||||||
|
|
||||||
// GPS Settings
|
// GPS Settings
|
||||||
#define _RX_GPS 23
|
#define _RX_GPS 25
|
||||||
#define _TX_GPS 22
|
#define _TX_GPS 4
|
||||||
#define _BAUDRATE_GPS 9600
|
#define _BAUDRATE_GPS 9600
|
||||||
|
|
||||||
// OLED Settings
|
// OLED Settings
|
||||||
@@ -31,7 +30,6 @@
|
|||||||
#define OLED_RESET -1
|
#define OLED_RESET -1
|
||||||
|
|
||||||
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
|
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
|
||||||
SoftwareSerial gps_serial(_RX_GPS, _TX_GPS);
|
|
||||||
TinyGPSPlus gps;
|
TinyGPSPlus gps;
|
||||||
|
|
||||||
void sendMessage(const String& msg) {
|
void sendMessage(const String& msg) {
|
||||||
@@ -47,7 +45,7 @@ bool waitForPacket(unsigned long timeout_ms) {
|
|||||||
unsigned long t0 = millis();
|
unsigned long t0 = millis();
|
||||||
while (millis() - t0 < timeout_ms) {
|
while (millis() - t0 < timeout_ms) {
|
||||||
if (LoRa.parsePacket()) return true;
|
if (LoRa.parsePacket()) return true;
|
||||||
delay(5);
|
vTaskDelay(pdMS_TO_TICKS(5));;
|
||||||
}
|
}
|
||||||
return false; // Timeout
|
return false; // Timeout
|
||||||
}
|
}
|
||||||
@@ -103,15 +101,33 @@ void showOnOLED(const String& line1, const String& line2 = "", const String& lin
|
|||||||
display.display();
|
display.display();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SerialPrintGPS(){
|
||||||
|
Serial.print("LAT: ");
|
||||||
|
Serial.println(gps.location.lat(), 6);
|
||||||
|
Serial.print("LONG: ");
|
||||||
|
Serial.println(gps.location.lng(), 6);
|
||||||
|
Serial.print("SPEED (km/h) = ");
|
||||||
|
Serial.println(gps.speed.kmph());
|
||||||
|
Serial.print("ALT (min)= ");
|
||||||
|
Serial.println(gps.altitude.meters());
|
||||||
|
Serial.print("HDOP = ");
|
||||||
|
Serial.println(gps.hdop.value() / 100.0);
|
||||||
|
Serial.print("Satellites = ");
|
||||||
|
Serial.println(gps.satellites.value());
|
||||||
|
Serial.print("Time in UTC: ");
|
||||||
|
Serial.println(String(gps.date.year()) + "/" + String(gps.date.month()) + "/" + String(gps.date.day()) + "," + String(gps.time.hour()) + ":" + String(gps.time.minute()) + ":" + String(gps.time.second()));
|
||||||
|
Serial.println("");
|
||||||
|
}
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
gps_serial.begin(_BAUDRATE_GPS);
|
Serial2.begin(_BAUDRATE_GPS, SERIAL_8N1, _RX_GPS, _TX_GPS);
|
||||||
|
|
||||||
// OLED init
|
// OLED init
|
||||||
Wire.begin(); // SDA/SCL Default
|
Wire.begin(); // SDA/SCL Default
|
||||||
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
|
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
|
||||||
Serial.println("OLED init fehlgeschlagen");
|
Serial.println("OLED init fehlgeschlagen");
|
||||||
while (1) delay(1000);
|
while (1) vTaskDelay(pdMS_TO_TICKS(1000));;
|
||||||
}
|
}
|
||||||
showOnOLED("LoRa OLED Init", "Bitte warten...");
|
showOnOLED("LoRa OLED Init", "Bitte warten...");
|
||||||
|
|
||||||
@@ -121,18 +137,27 @@ void setup() {
|
|||||||
if (!LoRa.begin(LORA_FREQ)) {
|
if (!LoRa.begin(LORA_FREQ)) {
|
||||||
Serial.println("Konnte LoRa nicht initialisieren!");
|
Serial.println("Konnte LoRa nicht initialisieren!");
|
||||||
showOnOLED("LoRa Init fehl", "Neustart nötig");
|
showOnOLED("LoRa Init fehl", "Neustart nötig");
|
||||||
while (1) delay(1000);
|
while (1) vTaskDelay(pdMS_TO_TICKS(1000));;
|
||||||
}
|
}
|
||||||
LoRa.enableCrc();
|
LoRa.enableCrc();
|
||||||
showOnOLED("LoRa bereit", "Creator:", "Timo Niemann");
|
showOnOLED("LoRa bereit", "Creator:", "Timo Niemann");
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
if(gps_serial.available()){
|
static size_t start = millis();
|
||||||
gps.encode(gps_serial.read());
|
if(Serial2.available()){
|
||||||
|
|
||||||
|
size_t while_break = millis();
|
||||||
|
while(!Serial2.available() && millis() - while_break < 1000) vTaskDelay(pdMS_TO_TICKS(10));
|
||||||
|
|
||||||
|
gps.encode(Serial2.read());
|
||||||
|
SerialPrintGPS();
|
||||||
|
|
||||||
if(gps.location.isUpdated()){
|
if(gps.location.isUpdated()){
|
||||||
Serial.println("GPS Update!");
|
Serial.println("GPS Update!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
start = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (waitForPacket(10)) {
|
if (waitForPacket(10)) {
|
||||||
@@ -147,15 +172,14 @@ void loop() {
|
|||||||
Serial.println("Empfangen: " + cmd);
|
Serial.println("Empfangen: " + cmd);
|
||||||
showOnOLED("Empfangen von:", "ID " + String(snd), "Cmd: " + cmd);
|
showOnOLED("Empfangen von:", "ID " + String(snd), "Cmd: " + cmd);
|
||||||
|
|
||||||
String lat_str = "LAT: " + String(gps.location.lat());
|
String lat_str = "LAT: " + String(gps.location.lat(), 6);
|
||||||
String lng_str = "LON: " + String(gps.location.lng());
|
String lng_str = "LON: " + String(gps.location.lng(), 6);
|
||||||
String satellites = "Satelliten: " + String(gps.satellites.value());
|
String satellites = "Satelliten: " + String(gps.satellites.value());
|
||||||
Serial.println("Sende GPS:\n" + lat_str + "\n" + lng_str);
|
Serial.println("Sende GPS:\n" + lat_str + "\n" + lng_str);
|
||||||
showOnOLED("Sende GPS Koords:", lat_str, lng_str, satellites);
|
showOnOLED("Sende GPS Koords:", lat_str, lng_str, satellites);
|
||||||
|
|
||||||
sendMessage(lat_str + "\n\n" + lng_str + "\n\n" + satellites);
|
sendMessage(lat_str + "\n\n" + lng_str + "\n\n" + satellites);
|
||||||
|
|
||||||
delay(1000);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
vTaskDelay(pdMS_TO_TICKS(10));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user