Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Include libarys
- #include <SoftwareSerial.h>
- #include <LiquidCrystal.h>
- #include <TinyGPS++.h>
- //Initalize libarys
- TinyGPSPlus gps;
- LiquidCrystal lcd(4,5,6,7,8,9);//RS,E,DB4,DB5,DB6,DB7, pins
- SoftwareSerial ssgps(2,3);//RX,TX pins
- //Custom characters
- byte satelliteChar[8]={
- B01000,B01010,B01100,B01111,B01000,B11110,B00000,
- };
- byte altitudeChar[8]={
- B00100,B01110,B10101,B00100,B00100,B11111,B00000,
- };
- byte clockChar[8]={
- B00000,B01110,B10101,B10111,B10001,B01110,B00000,
- };
- byte speedChar[8]={
- B00000,B00100,B00010,B11111,B00010,B00100,B00000,
- };
- //Set pins
- int debug=A0;
- int gled=10;
- int rled=11;
- int bled=12;
- int p13led=13;
- //Set some place holders
- int gpsSatellites;
- int gpsAltitude;
- int gpsSpeed;
- float gpsTime;
- float gpsLat;
- float gpsLng;
- long waitTime=5000;
- long waitLast=0;
- long waitCurrent;
- void setup(){
- //Start serial displays and lcd
- Serial.begin(115200);
- ssgps.begin(9600);//Software serial at 9600 baud the default for GY-NE06MV2
- lcd.begin(16,2);//16 char across and 2 lines
- lcd.clear();//Clear lcd screen
- //Print some text
- lcd.setCursor(0,0);
- lcd.print("GPS Data Logger ");
- lcd.setCursor(0,1);
- lcd.print("V 0.5 Beta");
- //Set memory address for custon charaters
- lcd.createChar(1,satelliteChar);
- lcd.createChar(2,altitudeChar);
- lcd.createChar(3,clockChar);
- lcd.createChar(4,speedChar);
- //Set pin for output pins
- pinMode(debug,INPUT_PULLUP);
- pinMode(gled,OUTPUT);
- pinMode(rled,OUTPUT);
- pinMode(bled,OUTPUT);
- pinMode(p13led,OUTPUT);
- //Delay and clear lcd screen
- delay(10000);
- lcd.clear();
- }
- void loop(){
- //Loop while gps is available
- while(ssgps.available()>0)
- if(gps.encode(ssgps.read()))
- displayInfo();
- //If no data from gps for 5 sec print no gps
- if(millis()>5000&&gps.charsProcessed()<10){
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("NO GPS DETECTED");
- lcd.setCursor(0,1);
- lcd.print("CHECK WIRING");
- while(true);
- }
- }
- void displayInfo(){
- //Set the vars from gps info
- gpsSatellites=(gps.satellites.value());
- gpsAltitude=(gps.altitude.feet());
- gpsSpeed=(gps.speed.mph());
- gpsTime=(gps.time.value());
- gpsLat=(gps.location.lat(),6);
- gpsLng=(gps.location.lng(),6);
- //When delay has been reached we display this
- unsigned long waitCurrent=millis();
- if(waitCurrent-waitLast>waitTime){
- waitLast=waitCurrent;
- lcd.clear();
- //Set cursor and print icon and satellites from gpsSatellites
- lcd.setCursor(0,0);
- lcd.write(1);
- lcd.setCursor(1,0);
- if (gps.satellites.isValid()){lcd.print(gpsSatellites);}
- else{lcd.print("**");}
- //Set cursor and print icon and altitude from gpsAltitude
- lcd.setCursor(3,0);
- lcd.write(2);
- lcd.setCursor(4,0);
- if (gps.altitude.isValid()){lcd.print(gpsAltitude);}
- else{lcd.print("****");}
- //Set cursor and print icon and speed from gpsSpeed
- lcd.setCursor(8,0);
- lcd.write(4);
- lcd.setCursor(9,0);
- if (gps.speed.isValid()){lcd.print(gpsSpeed);}
- else{lcd.print("**");}
- //Set cursor and print icon and time from gpsTime
- lcd.setCursor(11,0);
- lcd.write(3);
- lcd.setCursor(12,0);
- if (gps.time.isValid()){lcd.print(gps.time.value());}
- else{lcd.print("****");}
- //Set cursor and print lat and lng from GPS
- lcd.setCursor(0,1);
- if (gps.location.isValid()){
- lcd.print(gps.location.lat(),4);
- lcd.setCursor(8,1);
- lcd.print(gps.location.lng(),4);
- }
- else{lcd.print("INVALID DATA");}
- }
- //Turning on and off leds depending on the number of satellites seen
- if (gpsSatellites >= 9) {
- digitalWrite(gled,HIGH);
- digitalWrite(bled,LOW);
- digitalWrite(rled,LOW);
- }
- if (gpsSatellites < 9 && gpsSatellites > 3) {
- digitalWrite(bled,HIGH);
- digitalWrite(gled,LOW);
- digitalWrite(rled,LOW);
- }
- else {
- digitalWrite(rled,HIGH);
- digitalWrite(bled,LOW);
- digitalWrite(gled,LOW);
- }
- //Check if debug pin is low
- if(digitalRead(debug)==LOW){//If debug pin is low serial print more data
- digitalWrite(p13led,HIGH);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("DIAGNOSTIC MODE");
- Serial.println("---------------------");
- Serial.print("Debug Pin Status - ");
- Serial.println(digitalRead(debug));
- Serial.print("Red Led Status - ");
- Serial.println(digitalRead(rled));
- Serial.print("Blue Led Status - ");
- Serial.println(digitalRead(bled));
- Serial.print("Green Led Status - ");
- Serial.println(digitalRead(gled));
- Serial.print("Satellites Age - ");
- Serial.print(gps.satellites.age());
- Serial.print(" - Satellites Seen - ");
- Serial.println(gps.satellites.value());
- Serial.print("Altitude Age - ");
- Serial.print(gps.altitude.age());
- Serial.print(" - Altitude - ");
- Serial.println(gps.altitude.feet());
- Serial.print("Speed Age - ");
- Serial.print(gps.speed.age());
- Serial.print(" - Speed - ");
- Serial.println(gps.speed.mph(),2);
- Serial.print("Time Age - ");
- Serial.print(gps.time.age());
- Serial.print(" - Time - ");
- Serial.println(gps.time.value());
- Serial.print("Location Age - ");
- Serial.println(gps.location.age());
- Serial.print("Location Lat -");
- Serial.print(gps.location.lat(),6);
- Serial.print(" - Lng - ");
- Serial.println(gps.location.lng(),6);
- delay(5000);
- digitalWrite(p13led,LOW);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement