wrighizilla

gps oled 4.0

May 14th, 2021 (edited)
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.51 KB | None | 0 0
  1. #include <SPI.h>
  2. #include <SD.h>
  3. #include <Wire.h>
  4. #include "SSD1306Ascii.h"
  5. #include "SSD1306AsciiWire.h"
  6. #include <NMEAGPS.h>
  7. #include <NeoSWSerial.h>
  8. #define I2C_ADDRESS 0x3C
  9. #define RST_PIN -1
  10. #define MAX_CHARS 24
  11. #define RX_pin 5
  12. #define TX_pin 4
  13. #define SHOW_INTERVAL 1
  14. #define GPS_baud 9600
  15. SSD1306AsciiWire oled;
  16. NMEAGPS gps;
  17. gps_fix fix;
  18. float odo, Speed, alt, Dist, head, maxs = 0, Am = 0;
  19. unsigned int Sat = 0;
  20. NeoGPS::Location_t lastLoc, base;
  21. bool stScan = true, lastLocOK = false;
  22. static NeoSWSerial gpsPort(RX_pin, TX_pin);
  23. static constexpr int INITIAL_SHOW = (2 * SHOW_INTERVAL) - 1;
  24. int show = INITIAL_SHOW;
  25. const int LED_PIN = 3;
  26. const float SPEED_LIMIT = 0.1; // speed limit value
  27. void disp(int c, int r)
  28. {
  29. oled.clear();
  30. oled.setCursor(c, r);
  31. }
  32. void setup() {
  33.  
  34. pinMode (LED_PIN, OUTPUT);
  35. Serial.begin(9600);
  36. gpsPort.begin(GPS_baud);
  37. Wire.begin();
  38. oled.begin(&SH1106_128x64, I2C_ADDRESS);
  39. oled.setFont(ZevvPeep8x16);
  40. oled.clear();
  41. disp(30, 2);// to center your name change 30
  42. oled.println("YourName");// max 10 characters available here
  43. delay(2000);
  44. disp(55, 2);
  45. oled.print("GPS");//max 5 characters available here
  46. delay(2000);
  47. oled.clear();
  48. const int cs_sd = 2;
  49. if (!SD.begin (cs_sd)) {
  50. oled.clear();
  51. disp(60, 2);
  52. oled.print("SD");//if you read this mean SD is not present
  53. delay(10000);
  54. oled.clear();
  55. return;
  56. }
  57. disp(60, 2);
  58. oled.print("OK");
  59. delay(2000);
  60. oled.clear();
  61. File data = SD.open("L.csv", FILE_WRITE);
  62. data.println("");
  63. data.println("Da Hr La Lo At Am Km Di Ve He Sa" );
  64. data.close();
  65. }
  66. void loop() {
  67. if (gps.available( gpsPort )) {
  68. gps_fix fix = gps.read();
  69. show = (show + 1) % SHOW_INTERVAL;
  70. if (fix.valid.speed && (fix.speed_kph() > SPEED_LIMIT)) {
  71. digitalWrite( LED_PIN, HIGH );
  72. } else {
  73. digitalWrite( LED_PIN, LOW );
  74. }
  75. if (fix.valid.location) {
  76. if (lastLocOK) {
  77. odo += fix.location.DistanceKm( lastLoc );
  78. Speed = fix.speed_kph();
  79. }
  80. lastLoc = fix.location;
  81. lastLocOK = true;
  82. if (stScan) {
  83. stScan = false;
  84. base = fix.location;
  85. } else {
  86. Dist = ( fix.location.DistanceKm( base ) );
  87. }
  88. }
  89. if ( Speed > maxs) maxs = Speed;
  90. if (fix.valid.heading ) head = fix.heading() ;
  91. if (fix.valid.satellites ) Sat = fix.satellites ;
  92. if (fix.valid.altitude) alt = fix.altitude();
  93. if ( alt > Am) Am = alt;
  94. if (show == 0) {
  95. char displayBufffer[MAX_CHARS];
  96. oled.setCursor(0, 0);
  97. snprintf(displayBufffer, MAX_CHARS, "Km:%2d.%1d", (int)odo, (int)(odo * 100) % 100);
  98. oled.println(displayBufffer);
  99. oled.setCursor(65, 0);
  100. snprintf(displayBufffer, MAX_CHARS, "Di:%2d.%1d", (int)Dist, (int)(Dist * 100) % 100);
  101. oled.println(displayBufffer);
  102. snprintf(displayBufffer, MAX_CHARS, "Ve:%2d.%1d", (int)Speed, (int)(Speed * 10) % 10);
  103. oled.println(displayBufffer);
  104. oled.setCursor(65, 2);
  105. snprintf(displayBufffer, MAX_CHARS, "Vm:%2d.%1d", (int)maxs, (int)(maxs * 10) % 10);
  106. oled.println(displayBufffer);
  107. snprintf(displayBufffer, MAX_CHARS, "Al:%2d.%1d", (int)alt, (int)(alt * 100) % 100);
  108. oled.println(displayBufffer);
  109. oled.setCursor(65, 4);
  110. snprintf(displayBufffer, MAX_CHARS, "Am:%2d.%1d", (int)Am, (int)(Am * 100) % 100);
  111. oled.println(displayBufffer);
  112. snprintf(displayBufffer, MAX_CHARS, "Sa: %d", (int)Sat);
  113. oled.println(displayBufffer);
  114. oled.setCursor(65, 6);
  115. snprintf(displayBufffer, MAX_CHARS, "He:%2d.%1d", (int)head, (int)(head * 100) % 100);
  116. oled.println(displayBufffer);
  117. }
  118. File data = SD.open("L.csv", FILE_WRITE);
  119. data.print(fix.dateTime.hours + 2);
  120. data.print(":");
  121. data.print(fix.dateTime.minutes);
  122. data.print(" ");
  123. data.print(fix.dateTime.date);
  124. data.print("/");
  125. data.print(fix.dateTime.month);
  126. data.print(" ");
  127. data.print(fix.latitude(), 6);
  128. data.print(" ");
  129. data.print(fix.longitude(), 6);
  130. data.print(" ");
  131. data.print(alt);
  132. data.print(" ");
  133. data.print(Am);
  134. data.print(" ");
  135. data.print(odo);
  136. data.print(" ");
  137. data.print(Dist);
  138. data.print(" ");
  139. data.print(Speed);
  140. data.print(" ");
  141. data.print(head);
  142. data.print(" ");
  143. data.print(Sat);
  144. data.println();
  145. data.close();
  146. }
  147. }
Add Comment
Please, Sign In to add comment