Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SPI.h>
- #include <SD.h>
- #include <Wire.h>
- #include "SSD1306Ascii.h"
- #include "SSD1306AsciiWire.h"
- #include <NMEAGPS.h>
- #include <NeoSWSerial.h>
- #define I2C_ADDRESS 0x3C
- #define RST_PIN -1
- #define MAX_CHARS 24
- #define RX_pin 5
- #define TX_pin 4
- #define SHOW_INTERVAL 1
- #define GPS_baud 9600
- SSD1306AsciiWire oled;
- NMEAGPS gps;
- gps_fix fix;
- float odo, Speed, alt, Dist, head, maxs = 0, Am = 0;
- unsigned int Sat = 0;
- NeoGPS::Location_t lastLoc, base;
- bool stScan = true, lastLocOK = false;
- static NeoSWSerial gpsPort(RX_pin, TX_pin);
- static constexpr int INITIAL_SHOW = (2 * SHOW_INTERVAL) - 1;
- int show = INITIAL_SHOW;
- const int LED_PIN = 3;
- const float SPEED_LIMIT = 0.1; // speed limit value
- void disp(int c, int r)
- {
- oled.clear();
- oled.setCursor(c, r);
- }
- void setup() {
- pinMode (LED_PIN, OUTPUT);
- Serial.begin(9600);
- gpsPort.begin(GPS_baud);
- Wire.begin();
- oled.begin(&SH1106_128x64, I2C_ADDRESS);
- oled.setFont(ZevvPeep8x16);
- oled.clear();
- disp(30, 2);// to center your name change 30
- oled.println("YourName");// max 10 characters available here
- delay(2000);
- disp(55, 2);
- oled.print("GPS");//max 5 characters available here
- delay(2000);
- oled.clear();
- const int cs_sd = 2;
- if (!SD.begin (cs_sd)) {
- oled.clear();
- disp(60, 2);
- oled.print("SD");//if you read this mean SD is not present
- delay(10000);
- oled.clear();
- return;
- }
- disp(60, 2);
- oled.print("OK");
- delay(2000);
- oled.clear();
- File data = SD.open("L.csv", FILE_WRITE);
- data.println("");
- data.println("Da Hr La Lo At Am Km Di Ve He Sa" );
- data.close();
- }
- void loop() {
- if (gps.available( gpsPort )) {
- gps_fix fix = gps.read();
- show = (show + 1) % SHOW_INTERVAL;
- if (fix.valid.speed && (fix.speed_kph() > SPEED_LIMIT)) {
- digitalWrite( LED_PIN, HIGH );
- } else {
- digitalWrite( LED_PIN, LOW );
- }
- if (fix.valid.location) {
- if (lastLocOK) {
- odo += fix.location.DistanceKm( lastLoc );
- Speed = fix.speed_kph();
- }
- lastLoc = fix.location;
- lastLocOK = true;
- if (stScan) {
- stScan = false;
- base = fix.location;
- } else {
- Dist = ( fix.location.DistanceKm( base ) );
- }
- }
- if ( Speed > maxs) maxs = Speed;
- if (fix.valid.heading ) head = fix.heading() ;
- if (fix.valid.satellites ) Sat = fix.satellites ;
- if (fix.valid.altitude) alt = fix.altitude();
- if ( alt > Am) Am = alt;
- if (show == 0) {
- char displayBufffer[MAX_CHARS];
- oled.setCursor(0, 0);
- snprintf(displayBufffer, MAX_CHARS, "Km:%2d.%1d", (int)odo, (int)(odo * 100) % 100);
- oled.println(displayBufffer);
- oled.setCursor(65, 0);
- snprintf(displayBufffer, MAX_CHARS, "Di:%2d.%1d", (int)Dist, (int)(Dist * 100) % 100);
- oled.println(displayBufffer);
- snprintf(displayBufffer, MAX_CHARS, "Ve:%2d.%1d", (int)Speed, (int)(Speed * 10) % 10);
- oled.println(displayBufffer);
- oled.setCursor(65, 2);
- snprintf(displayBufffer, MAX_CHARS, "Vm:%2d.%1d", (int)maxs, (int)(maxs * 10) % 10);
- oled.println(displayBufffer);
- snprintf(displayBufffer, MAX_CHARS, "Al:%2d.%1d", (int)alt, (int)(alt * 100) % 100);
- oled.println(displayBufffer);
- oled.setCursor(65, 4);
- snprintf(displayBufffer, MAX_CHARS, "Am:%2d.%1d", (int)Am, (int)(Am * 100) % 100);
- oled.println(displayBufffer);
- snprintf(displayBufffer, MAX_CHARS, "Sa: %d", (int)Sat);
- oled.println(displayBufffer);
- oled.setCursor(65, 6);
- snprintf(displayBufffer, MAX_CHARS, "He:%2d.%1d", (int)head, (int)(head * 100) % 100);
- oled.println(displayBufffer);
- }
- File data = SD.open("L.csv", FILE_WRITE);
- data.print(fix.dateTime.hours + 2);
- data.print(":");
- data.print(fix.dateTime.minutes);
- data.print(" ");
- data.print(fix.dateTime.date);
- data.print("/");
- data.print(fix.dateTime.month);
- data.print(" ");
- data.print(fix.latitude(), 6);
- data.print(" ");
- data.print(fix.longitude(), 6);
- data.print(" ");
- data.print(alt);
- data.print(" ");
- data.print(Am);
- data.print(" ");
- data.print(odo);
- data.print(" ");
- data.print(Dist);
- data.print(" ");
- data.print(Speed);
- data.print(" ");
- data.print(head);
- data.print(" ");
- data.print(Sat);
- data.println();
- data.close();
- }
- }
Add Comment
Please, Sign In to add comment