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;
- unsigned long tmp, var = 0;
- int secondi, minuti = 0, ore = 0, fct = 2, fcl = 1;
- 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();
- const int cs_sd = 2;
- if (!SD.begin (cs_sd)) {
- oled.clear();
- disp(65, 2);
- oled.print("SD");//if you read this mean SD is not present
- delay(10000);
- oled.clear();
- return;
- }
- File data = SD.open("L.csv", FILE_WRITE);
- data.println("");
- data.println("Da Hr Tm La Lo At Am Km Di Ve He Sa" );
- data.close();
- }
- void loop() {
- tmp = (millis() / 1000);
- secondi = tmp - (var * 10) + fct;
- if (secondi > 60) {
- secondi = secondi - 60;
- }
- if (secondi == 60) {
- minuti = minuti + 1;
- var = var + 6;
- }
- if (((minuti == 10) || (minuti == 20) || (minuti == 30) || (minuti == 40) || (minuti == 50) || (minuti == 60)) && (secondi == 1)) {
- fct = fct + fcl;
- }
- if (minuti >= 60) {
- minuti = 0;
- ore = ore + 1;
- }
- if (ore >= 24) {
- ore = 0;
- }
- 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, "%d:%d:%d ", (int)ore, (int)minuti, (int)secondi);
- 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(ore);
- data.print(":");
- data.print(minuti);
- data.print(":");
- data.print(secondi);
- 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