Bearing computation + fixes

Compute the correct bearing and removes several debug
print outputs.
This commit is contained in:
Tim Staat 2025-09-04 02:03:54 +02:00
parent 02154d4517
commit 9082ffa56c
2 changed files with 25 additions and 41 deletions

View File

@ -14,8 +14,13 @@ QMC5883LCompass compass;
#define TXD2 17 #define TXD2 17
// ID 1 = Julia; ID 2 = Tim // ID 1 = Julia; ID 2 = Tim
#define OWN_ID 1 #define OWN_ID 2
#define REQ_ID 2 #define REQ_ID 1
#define BEARING_CORRECTION 3
#define LED_PIN 5
#define GPS_BAUD 9600 #define GPS_BAUD 9600
@ -61,6 +66,10 @@ void setup(void) {
u8g2.begin(); // start a display. u8g2.begin(); // start a display.
gpsSerial.begin(GPS_BAUD, SERIAL_8N1, RXD2, TXD2); gpsSerial.begin(GPS_BAUD, SERIAL_8N1, RXD2, TXD2);
Serial.println("Serial 2 started at 9600 baud rate"); Serial.println("Serial 2 started at 9600 baud rate");
pinMode(LED_PIN, OUTPUT);
} }
void drawTriangles(byte i, char *time, char *distanceString) { void drawTriangles(byte i, char *time, char *distanceString) {
@ -109,12 +118,13 @@ bool doHttpRequest(char *payload, char *latitude, char *longitude, char *gpsTime
} }
byte calculateBearing(float bearing) { byte calculateBearing(float bearing) {
compass.read();
int relativeAngle = (int)(bearing - compass.getAzimuth()); int relativeAngle = (int)(bearing - compass.getAzimuth());
relativeAngle += 360; relativeAngle += 360;
relativeAngle %= 360; relativeAngle %= 360;
return compass.getBearing(relativeAngle); return (compass.getBearing(relativeAngle) + BEARING_CORRECTION + 16) % 16;
} }
void setDistanceBearingString(char *distance, byte *bearing, const char *payload) { void setDistanceBearingString(char *time, char *distance, byte *bearing, const char *payload) {
StaticJsonDocument<200> doc; StaticJsonDocument<200> doc;
DeserializationError error = deserializeJson(doc, payload); DeserializationError error = deserializeJson(doc, payload);
@ -126,11 +136,10 @@ void setDistanceBearingString(char *distance, byte *bearing, const char *payload
} }
const char* dist2 = doc["distance"]; const char* dist2 = doc["distance"];
//Serial.println(dist2); const char* time2 = doc["lastUpdateTZ"];
Serial.println("JSON stuff:");
Serial.println(dist2);
strcpy(distance, dist2); strcpy(distance, dist2);
strcpy(time, time2);
*bearing = calculateBearing(String(doc["bearing"]).toFloat()); *bearing = calculateBearing(String(doc["bearing"]).toFloat());
} }
@ -177,44 +186,19 @@ void loop(void) {
char distanceString[16]; char distanceString[16];
strcpy(distanceString, distanceArray); strcpy(distanceString, distanceArray);
char remoteTimeString[16];
strcpy(remoteTimeString, timeString);
if (doHttpRequest(myPayloadResponse, latitude, longitude, dateTimeString)) if (doHttpRequest(myPayloadResponse, latitude, longitude, dateTimeString))
setDistanceBearingString(distanceString, &triangleIndex, myPayloadResponse); setDistanceBearingString(remoteTimeString, distanceString, &triangleIndex, myPayloadResponse);
Serial.println(); drawTriangles(triangleIndex, remoteTimeString, distanceString);
Serial.println("TimeString: ");
Serial.println(timeString);
Serial.println("DateString: ");
Serial.println(dateString);
Serial.println("Date: ");
Serial.println(dateString);
Serial.println("DateTime: ");
Serial.println(dateTimeString);
Serial.println("DistanceString: ");
Serial.println(distanceString);
drawTriangles(triangleIndex, timeString, distanceString);
Serial.println("-------------------------------"); Serial.println("-------------------------------");
int a;
compass.read();
//Calculate heading digitalWrite(LED_PIN, HIGH);
a = compass.getAzimuth();
float heading = compass.getBearing(a);
char myArray[3];
compass.getDirection(myArray, a);
Serial.print("A: ");
Serial.print(a);
Serial.print("Heading: ");
Serial.print(heading);
Serial.print(" - ");
Serial.print(myArray);
Serial.println();
Serial.println("-------------------------------");
delay(5000); delay(5000);
digitalWrite(LED_PIN, LOW);
} }

View File

@ -34,7 +34,7 @@ while 重启五秒内 && 重置按键被按下
#define SSID_LENGTH 40 #define SSID_LENGTH 40
#define WIFI_SET_PIN 27 #define WIFI_SET_PIN 18
int record_rst_time(); int record_rst_time();
void nvs_test(); void nvs_test();