// Programvare for testing av GPS-mottakeren // av Nils Kr. Rossing 13.03.20 2020 // Skolelaboratoriet, Institutt for fysikk, NTNU // Inkluder biblioteker #include // #include #include #include ///////////////// Display ////////////// Adafruit_SSD1306 display(4); // Deklarasjon av enheten "display" av klassen Adafruit_SSD1306 ////////////////// GPS ///////////////// #define GPS_RX 5 #define GPS_TX 4 SoftwareSerial gpsCom(GPS_RX, GPS_TX); TinyGPSPlus gps; ////////////////// LED ///////////////// #define LED_RED 7 #define LED_GREEN 8 /////// Testing og kalibrering ///////// int intervall = 5; // Angir ca. intervall i sek. mellom hver måling bool gpsOn = true; // True = GPS-måling på False = GPS-måling avslått //////////////// setup() /////////////// void setup() { // Aktiver LEDpinner pinMode(LED_RED, OUTPUT); pinMode(LED_GREEN, OUTPUT); // Initialiering av seriekommunikasjon Serial.begin(9600); // Til PC monitor gpsCom.begin(9600); // Til GPS mottaker display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Initialiser display med adresse 0x3C Serial.println("Test_GPS_1"); Serial.println("Tid (s), Lengdegrad, Breddegrad, Hoyde"); // Klargjør display for utskrift display.clearDisplay(); // Slett informasjon på display display.setTextSize(1); // Sett størrelse på tekst display.setTextColor(WHITE); // Hvit tekst på sort bagrunn // Skriver ut en initialiseringstekst til displayet display.setCursor(26,6); // Plasser markør display.println("Init. V5"); // Skriv Initialisering display.setCursor(8,16); // Plasser markør øverst til venstre display.println("Kan ta minutter"); display.display(); } void loop() { ///////////////// Les fra GPS-enhet ///////////////// if(gpsOn) // gpsOn=True Leser GPS-data - For testing innendørs { // kan GPS slås av dvs. gpsOn=False gpsCom.listen(); bool gpsEncodeComplete = false; do { if (!gpsCom.available()) // Ingen GPS-data tilgjengelig. Les på nytt { continue; } gpsEncodeComplete = gps.encode(gpsCom.read()); if (!gpsEncodeComplete) // Ufullstendig GPS-data tilgjengelig. Les på nytt { continue; } } while (!gpsEncodeComplete); // Gjenta lesning til gyldige data oppnås bool gpsValid = gps.location.isValid(); bool gpsUpdated = gps.location.isUpdated(); bool isUseful = gpsValid && gpsUpdated; if (!isUseful) // Ugyldige data tenn rød lysdiode { digitalWrite(LED_RED, HIGH); delay(500); digitalWrite(LED_RED, LOW); return; } else // Gyldige data tenn grønn lysdiode { digitalWrite(LED_GREEN, HIGH); delay(500); digitalWrite(LED_GREEN, LOW); } } ////// Skriv ut data til PC monitor og SD-kort ////// Serial.print(long(millis()/1000)); // Skriv ut sekunder Serial.print(","); Serial.print(gps.location.lng(), 6); // Lengdegrader i desimalgrader, 6 desimaler Serial.print(","); Serial.print(gps.location.lat(), 6); // Breddegrader i desimalgrader, 6 desimaler Serial.print(","); Serial.print(gps.altitude.meters(), 1); // Høyde i meter, 1 desimaler Serial.println(); // Klargjør display på toppen av instrumentet for utskrift display.clearDisplay(); // Slett informasjon på display display.setTextSize(1); // Sett størrelse på tekst display.setTextColor(WHITE); // Hvit tekst på sort bagrunn // Skrive ut Lengde- og Breddegrad display.setCursor(0,0); // Flytt markør til neste linje display.print("L:"); display.print(gps.location.lng(),5); // Skriv lengdegrad display.print(" B:"); display.println(gps.location.lat(),5); // Skriv breddegrad display.display(); // Overfør informasjonen til displayet og vis delay(intervall*1000); // Intervall mellom hver måling }