Advertisement
Hadlock

arduino tinygps++ & u8g

Nov 11th, 2014
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.67 KB | None | 0 0
  1.  
  2. #include "U8glib.h"
  3. #include <TinyGPS++.h>
  4. #include <SoftwareSerial.h>
  5.  
  6. U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
  7. TinyGPSPlus gps;
  8. static const int RXPin = 3, TXPin = 2;
  9. static const uint32_t GPSBaud = 9600;
  10. SoftwareSerial ss(RXPin, TXPin);
  11. unsigned long last = 0UL;
  12.  
  13. const char* newTime;
  14.  
  15. void parseGPS(void) {
  16.  
  17.   while (ss.available() > 0)
  18.     gps.encode(ss.read());
  19.  
  20.   if (gps.location.isUpdated())
  21.   {
  22.     Serial.print(F("LOCATION   Fix Age="));
  23.     Serial.print(gps.location.age());
  24.     Serial.print(F("ms Raw Lat="));
  25.     Serial.print(gps.location.rawLat().negative ? "-" : "+");
  26.     Serial.print(gps.location.rawLat().deg);
  27.     Serial.print("[+");
  28.     Serial.print(gps.location.rawLat().billionths);
  29.     Serial.print(F(" billionths],  Raw Long="));
  30.     Serial.print(gps.location.rawLng().negative ? "-" : "+");
  31.     Serial.print(gps.location.rawLng().deg);
  32.     Serial.print("[+");
  33.     Serial.print(gps.location.rawLng().billionths);
  34.     Serial.print(F(" billionths],  Lat="));
  35.     Serial.print(gps.location.lat(), 6);
  36.     Serial.print(F(" Long="));
  37.     Serial.println(gps.location.lng(), 6);
  38.   }
  39.  
  40.   else if (gps.date.isUpdated())
  41.   {
  42.     Serial.print(F("DATE       Fix Age="));
  43.     Serial.print(gps.date.age());
  44.     Serial.print(F("ms Raw="));
  45.     Serial.print(gps.date.value());
  46.     Serial.print(F(" Year="));
  47.     Serial.print(gps.date.year());
  48.     Serial.print(F(" Month="));
  49.     Serial.print(gps.date.month());
  50.     Serial.print(F(" Day="));
  51.     Serial.println(gps.date.day());
  52.   }
  53.  
  54.   else if (gps.time.isUpdated())
  55.   {
  56.     Serial.print(F("TIME       Fix Age="));
  57.     Serial.print(gps.time.age());
  58.     Serial.print(F("ms Raw="));
  59.     Serial.print(gps.time.value());
  60.     Serial.print(F(" Hour="));
  61.     Serial.print(gps.time.hour());
  62.     Serial.print(F(" Minute="));
  63.     Serial.print(gps.time.minute());
  64.     Serial.print(F(" Second="));
  65.     Serial.print(gps.time.second());
  66.     Serial.print(F(" Hundredths="));
  67.     Serial.println(gps.time.centisecond());
  68.   }
  69.  
  70.   else if (gps.speed.isUpdated())
  71.   {
  72.     Serial.print(F("SPEED      Fix Age="));
  73.     Serial.print(gps.speed.age());
  74.     Serial.print(F("ms Raw="));
  75.     Serial.print(gps.speed.value());
  76.     Serial.print(F(" Knots="));
  77.     Serial.print(gps.speed.knots());
  78.     Serial.print(F(" MPH="));
  79.     Serial.print(gps.speed.mph());
  80.     Serial.print(F(" m/s="));
  81.     Serial.print(gps.speed.mps());
  82.     Serial.print(F(" km/h="));
  83.     Serial.println(gps.speed.kmph());
  84.   }
  85.  
  86.   else if (gps.course.isUpdated())
  87.   {
  88.     Serial.print(F("COURSE     Fix Age="));
  89.     Serial.print(gps.course.age());
  90.     Serial.print(F("ms Raw="));
  91.     Serial.print(gps.course.value());
  92.     Serial.print(F(" Deg="));
  93.     Serial.println(gps.course.deg());
  94.   }
  95.  
  96.   else if (gps.altitude.isUpdated())
  97.   {
  98.     Serial.print(F("ALTITUDE   Fix Age="));
  99.     Serial.print(gps.altitude.age());
  100.     Serial.print(F("ms Raw="));
  101.     Serial.print(gps.altitude.value());
  102.     Serial.print(F(" Meters="));
  103.     Serial.print(gps.altitude.meters());
  104.     Serial.print(F(" Miles="));
  105.     Serial.print(gps.altitude.miles());
  106.     Serial.print(F(" KM="));
  107.     Serial.print(gps.altitude.kilometers());
  108.     Serial.print(F(" Feet="));
  109.     Serial.println(gps.altitude.feet());
  110.   }
  111.  
  112.   else if (gps.satellites.isUpdated())
  113.   {
  114.     Serial.print(F("SATELLITES Fix Age="));
  115.     Serial.print(gps.satellites.age());
  116.     Serial.print(F("ms Value="));
  117.     Serial.println(gps.satellites.value());
  118.   }
  119.  
  120.   else if (gps.hdop.isUpdated())
  121.   {
  122.     Serial.print(F("HDOP       Fix Age="));
  123.     Serial.print(gps.hdop.age());
  124.     Serial.print(F("ms Value="));
  125.     Serial.println(gps.hdop.value());
  126.   }
  127.  
  128.   else if (millis() - last > 5000)
  129.   {
  130.     Serial.println();
  131.     if (gps.location.isValid())
  132.     {
  133.       static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
  134.       double distanceToLondon =
  135.         TinyGPSPlus::distanceBetween(
  136.           gps.location.lat(),
  137.           gps.location.lng(),
  138.           LONDON_LAT,
  139.           LONDON_LON);
  140.       double courseToLondon =
  141.         TinyGPSPlus::courseTo(
  142.           gps.location.lat(),
  143.           gps.location.lng(),
  144.           LONDON_LAT,
  145.           LONDON_LON);
  146.  
  147.       Serial.print(F("LONDON     Distance="));
  148.       Serial.print(distanceToLondon/1000, 6);
  149.       Serial.print(F(" km Course-to="));
  150.       Serial.print(courseToLondon, 6);
  151.       Serial.print(F(" degrees ["));
  152.       Serial.print(TinyGPSPlus::cardinal(courseToLondon));
  153.       Serial.println(F("]"));
  154.     }
  155.  
  156.     Serial.print(F("DIAGS      Chars="));
  157.     Serial.print(gps.charsProcessed());
  158.     Serial.print(F(" Sentences-with-Fix="));
  159.     Serial.print(gps.sentencesWithFix());
  160.     Serial.print(F(" Failed-checksum="));
  161.     Serial.print(gps.failedChecksum());
  162.     Serial.print(F(" Passed-checksum="));
  163.     Serial.println(gps.passedChecksum());
  164.  
  165.     if (gps.charsProcessed() < 10)
  166.       Serial.println(F("WARNING: No GPS data.  Check wiring."));
  167.  
  168.     last = millis();
  169. }
  170. }
  171.  
  172. void processGPS(void) {
  173.     // Dispatch incoming characters
  174.   while (ss.available() > 0)
  175.     gps.encode(ss.read());
  176.    
  177.    
  178.       if (gps.time.isUpdated()){
  179.     u8g.setFont(u8g_font_6x10);
  180.     newTime = (const char*) gps.time.value();
  181.     //Serial.println("newtime :   ---------------------------");
  182.     //Serial.println(gps.time.value());
  183.       }
  184.       }    
  185. // BEGIN DRAW
  186.  
  187. void draw(void) {
  188.  
  189.   drawText();
  190.   drawGPS();
  191.  
  192. }
  193.  
  194. void drawText(void) {
  195.     u8g.setFont(u8g_font_6x10);
  196.     u8g.drawStr(8,27, "  knock, knock, neo.");
  197. }
  198.  
  199. void drawGPS(void) {
  200.     //u8g.setFont(u8g_font_gdr25r);
  201.     //u8g.drawStr(0, 30, "U");
  202.     //u8g.setFont(u8g_font_gdr30n);
  203.     //u8g.drawStr90(23,10,"8");
  204.     //u8g.drawStr90(64,10,latitude);
  205.    
  206.     /*
  207.     Serial.print(F("TIME       Fix Age="));
  208.     Serial.print(gps.time.age());
  209.     Serial.print(F("ms Raw="));
  210.     Serial.print(gps.time.value());
  211.     Serial.print(F(" Hour="));
  212.     Serial.print(gps.time.hour());
  213.     Serial.print(F(" Minute="));
  214.     Serial.print(gps.time.minute());
  215.     Serial.print(F(" Second="));
  216.     Serial.print(gps.time.second());
  217.     Serial.print(F(" Hundredths="));
  218.     Serial.println(gps.time.centisecond());
  219.     */
  220.  
  221.     u8g.drawStr(7,15, newTime);
  222.     }  
  223.  
  224.  
  225. void pictureLoop(void)  {
  226.   // picture loop
  227.   u8g.firstPage();  
  228.   do {
  229.       draw();
  230.   } while( u8g.nextPage() );
  231.  
  232. }
  233.  
  234. // END DRAW
  235.  
  236. void setup() {
  237.   Serial.begin(115200);
  238.   ss.begin(GPSBaud);
  239.   Serial.println(F("KitchenSink.ino"));
  240.   Serial.println("  F L I G H T  -  S I M  -  D E B U G ");
  241. }
  242.  
  243. void loop() {
  244.   // put your main code here, to run repeatedly:
  245.   //parseGPS();      // parse gps
  246.   processGPS();    // get the fucking time
  247.   pictureLoop();   // draw display
  248. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement