From 34b785471ba560718ceec47764b6ca70c366dec5 Mon Sep 17 00:00:00 2001 From: Seth Date: Mon, 4 Nov 2024 21:10:48 +1300 Subject: [PATCH 1/3] multiplied lat and long by 10000000 to get the correct value --- GPSSpeedMultiCore.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GPSSpeedMultiCore.ino b/GPSSpeedMultiCore.ino index b5238f8..e166dab 100644 --- a/GPSSpeedMultiCore.ino +++ b/GPSSpeedMultiCore.ino @@ -65,7 +65,7 @@ bool setStartBrightness() { double az, el; setTime(myGPS.getHour(),myGPS.getMinute(),myGPS.getSecond(),myGPS.getDay(),myGPS.getMonth(),myGPS.getYear()); time_t timeUtc=now(); - calcHorizontalCoordinates(timeUtc,myGPS.getLatitude(),myGPS.getLongitude(),az,el); + calcHorizontalCoordinates(timeUtc,(double) myGPS.getLatitude()*10000000,(double) myGPS.getLongitude() * 10000000,az,el); if(el>SUNRISESET_STD_ALTITUDE){ screenBrightnessCurrent=15; From b6ffac1372c23f5a8c81fe1c44258bf6183b9559 Mon Sep 17 00:00:00 2001 From: Seth Date: Tue, 5 Nov 2024 10:07:10 +1300 Subject: [PATCH 2/3] brightnes set at start and every min unless button used --- GPSSpeedMultiCore.ino | 57 +++++++++++++++++++++++++++++++------------ 1 file changed, 42 insertions(+), 15 deletions(-) diff --git a/GPSSpeedMultiCore.ino b/GPSSpeedMultiCore.ino index e166dab..59aa90a 100644 --- a/GPSSpeedMultiCore.ino +++ b/GPSSpeedMultiCore.ino @@ -23,31 +23,36 @@ std::atomic_int gpsFixType(0); //screen Adafruit_AlphaNum4 disp = Adafruit_AlphaNum4(); unsigned long timeOfLastFix = 0UL; +unsigned long timer = millis(); +bool setInitBrightness = false; +unsigned long brightnessTimer = millis(); //button volatile bool buttonPushed = false; volatile int ScreenBrightnessUser = 15; volatile int screenBrightnessCurrent = ScreenBrightnessUser; volatile unsigned long lastButtonPush = 0UL; +volatile bool manualBrightness = false; void chageBrightness() { if (millis() - lastButtonPush > DEBOUNCE_DELAY) { buttonPushed = true; lastButtonPush = millis(); + manualBrightness=true; } } void connectGPS() { //need to do this everytime the GPS turns back on do { //set gps to 115200 baudrate code comes from sparkfun examples - // Serial.println("GNSS: trying 115200 baud"); + Serial.println("GNSS: trying 115200 baud"); Serial1.begin(115200); if (myGPS.begin(Serial1) == true) break; delay(100); - //Serial.println("GNSS: trying 9600 baud"); + Serial.println("GNSS: trying 9600 baud"); Serial1.begin(9600); if (myGPS.begin(Serial1) == true) { - // Serial.println("GNSS: connected at 9600 baud, switching to 115200"); + Serial.println("GNSS: connected at 9600 baud, switching to 115200"); myGPS.setSerialRate(115200); delay(100); } else { @@ -57,23 +62,36 @@ void connectGPS() { //need to do this everytime the GPS turns back on myGPS.setAutoPVT(true); myGPS.setUART1Output(COM_TYPE_UBX); //Set the UART1 port to output UBX only (turn off NMEA noise) myGPS.setNavigationFrequency(GPS_UPDATE_FREQUENCY); //set frequency of updates to 10/sec - myGPS.setDynamicModel(DYN_MODEL_AUTOMOTIVE); //set dynamic model of GPS to automotive to more accutate results + //myGPS.setDynamicModel(DYN_MODEL_AUTOMOTIVE); //set dynamic model of GPS to automotive to more accutate results } bool setStartBrightness() { - while (!(myGPS.getFixType() > 0)) {} //wait here untill gps gets a fix - double az, el; - setTime(myGPS.getHour(),myGPS.getMinute(),myGPS.getSecond(),myGPS.getDay(),myGPS.getMonth(),myGPS.getYear()); - time_t timeUtc=now(); - calcHorizontalCoordinates(timeUtc,(double) myGPS.getLatitude()*10000000,(double) myGPS.getLongitude() * 10000000,az,el); + double az = 0; + double el = 0; + int hour = myGPS.getHour(); + int min = myGPS.getMinute(); + int sec = myGPS.getSecond(); + int day = myGPS.getDay(); + int month = myGPS.getMonth(); + int year = myGPS.getYear(); + setTime(hour, min, sec, day, month, year); + time_t timeUtc = now(); + double lat = myGPS.getLatitude(); + lat = lat / 10000000; + double lng = myGPS.getLongitude(); + lng = lng / 10000000; + calcHorizontalCoordinates(timeUtc, lat, lng, az, el); - if(el>SUNRISESET_STD_ALTITUDE){ - screenBrightnessCurrent=15; - } else if ((elCIVIL_DAWNDUSK_STD_ALTITUDE)){ - screenBrightnessCurrent=MIDDLE_SCREEN_BRIGHTNESS; - } else if (el SUNRISESET_STD_ALTITUDE) { + screenBrightnessCurrent = 15; + } else if ((el < SUNRISESET_STD_ALTITUDE) && (el > CIVIL_DAWNDUSK_STD_ALTITUDE)) { + screenBrightnessCurrent = MIDDLE_SCREEN_BRIGHTNESS; + } else if (el < CIVIL_DAWNDUSK_STD_ALTITUDE) { + screenBrightnessCurrent = 0; } + ScreenBrightnessUser = screenBrightnessCurrent; disp.setBrightness(screenBrightnessCurrent); return true; } @@ -101,6 +119,14 @@ void setup1() { } void loop() { + //set init brightness + +if((!setInitBrightness&&gpsFixType.load()>0)||((!manualBrightness&&millis() > brightnessTimer + 6000)&&gpsFixType.load()>0)){ //fire every minute + setStartBrightness(); + setInitBrightness = true; + brightnessTimer= millis(); +} + //change brightness if (buttonPushed == true) { if (ScreenBrightnessUser == 15) { @@ -161,6 +187,7 @@ void loop() { rp2040.wdt_reset(); //rest watchdog timer } + void loop1() { //myGPS.getPVT(GPS_WAIT_TIME); speed.store(myGPS.getGroundSpeed() * 0.0036); //get speed in mm/s and convert to Km/h From 48cdfdf2f8646b2524004968c8bf3d4036a4242a Mon Sep 17 00:00:00 2001 From: Seth Date: Tue, 5 Nov 2024 10:39:16 +1300 Subject: [PATCH 3/3] added profiling into main loop --- GPSSpeedMultiCore.ino | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/GPSSpeedMultiCore.ino b/GPSSpeedMultiCore.ino index 59aa90a..fae61cc 100644 --- a/GPSSpeedMultiCore.ino +++ b/GPSSpeedMultiCore.ino @@ -12,6 +12,7 @@ #define GPS_UPDATE_FREQUENCY 10 //GPS update frequency per sec #define DEBOUNCE_DELAY 250 //time in ms #define MIDDLE_SCREEN_BRIGHTNESS 5 +//#define PROFILE true //GPS SFE_UBLOX_GPS myGPS; @@ -34,25 +35,29 @@ volatile int screenBrightnessCurrent = ScreenBrightnessUser; volatile unsigned long lastButtonPush = 0UL; volatile bool manualBrightness = false; +//profiler +int runCounter = 0; +unsigned long profileTimer = millis(); + void chageBrightness() { if (millis() - lastButtonPush > DEBOUNCE_DELAY) { buttonPushed = true; lastButtonPush = millis(); - manualBrightness=true; + manualBrightness = true; } } void connectGPS() { //need to do this everytime the GPS turns back on do { //set gps to 115200 baudrate code comes from sparkfun examples - Serial.println("GNSS: trying 115200 baud"); + // Serial.println("GNSS: trying 115200 baud"); Serial1.begin(115200); if (myGPS.begin(Serial1) == true) break; delay(100); - Serial.println("GNSS: trying 9600 baud"); + //Serial.println("GNSS: trying 9600 baud"); Serial1.begin(9600); if (myGPS.begin(Serial1) == true) { - Serial.println("GNSS: connected at 9600 baud, switching to 115200"); + //Serial.println("GNSS: connected at 9600 baud, switching to 115200"); myGPS.setSerialRate(115200); delay(100); } else { @@ -115,17 +120,16 @@ void setup1() { Serial1.setRX(1); Serial1.setTX(0); connectGPS(); - setStartBrightness(); + //setStartBrightness(); } void loop() { - //set init brightness - -if((!setInitBrightness&&gpsFixType.load()>0)||((!manualBrightness&&millis() > brightnessTimer + 6000)&&gpsFixType.load()>0)){ //fire every minute + //set init brightness + if ((!setInitBrightness && gpsFixType.load() > 0) || ((!manualBrightness && millis() > brightnessTimer + 6000) && gpsFixType.load() > 0)) { //fire every minute setStartBrightness(); setInitBrightness = true; - brightnessTimer= millis(); -} + brightnessTimer = millis(); + } //change brightness if (buttonPushed == true) { @@ -185,6 +189,18 @@ if((!setInitBrightness&&gpsFixType.load()>0)||((!manualBrightness&&millis() > br } disp.writeDisplay(); rp2040.wdt_reset(); //rest watchdog timer + + #if PROFILE + //profiling + runCounter++; + + if(millis() > profileTimer + 1000){ + Serial.println(runCounter); + runCounter=0; + profileTimer=millis(); + } + #endif + }