https://create.arduino.cc/projecthub/yv ... ane-3ea4cd
nella sua versione di base registra solo la velocità massima l'altitudine massima e il numero di satelliti gps connessi.
inoltre sulla sd registra le coordinate.
io adesso sto modificando lo sketch per aggiungere alcune funzioni.
in seguito le vorrei aggiungere anche nella parte che riguarda la SD card ma per adesso mi sto limitando al gps e al display.
ho aggiunto la velocità al secondo.. un dato che varia rispetto agli altri che indicano solo i valori massimi di picco..
è stato facile, ho scritto la stringa: int kmh1 = 0; e poi kmh1 = (gps.speed.kmph()); direttamente dalla libreria tinygps++
mandato a display oled.setCursor(10 , 110); oled.print(kmh1); funziona bene, provato adesso per strada.
adesso però vorrei riuscire ad aggiungere un nuovo dato che misuri la distanza percorsa dall'accensione e fix gps fino al momento della lettura.. una sorta di conta chilometri basato sui metri al secondo che vengono percorsi e sommati.
potete aiutarmi per favore? mi perdo..
questo è il codice scritto fin'ora..
Codice: Seleziona tutto
#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include<SD.h>
const int cs_sd=2;
static const int RXPin = 0, TXPin = 1;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);
int maxspeed = 0, speed1 = 0;
int maxhigh = 0, high1 = 0;
int maxsatelite = 0, satelite1 = 0;
int kmh = 0, kmh1 = 0;
#define I2C_ADDRESS 0x3C
#define RST_PIN -1
SSD1306AsciiWire oled;
//------------------------------------------------------------------------------
void setup() {
Wire.begin();
ss.begin(GPSBaud);
#if RST_PIN >= 0
oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);
#else
oled.begin(&Adafruit128x64, I2C_ADDRESS);
#endif
oled.setFont(System5x7);
oled.clear();
oled.println(" ");
oled.println("GPS DATA LOGGER");
delay(1000);
oled.clear();
if(!SD.begin(cs_sd))
{
oled.clear();
oled.print(" SD");
return;
}
oled.print("SD OK");
delay(1000);
oled.clear();
File data = SD.open("log.txt",FILE_WRITE);
data.println(""); data.println("log acquisition");
data.close();
}
//------------------------------------------------------------------------------
void loop() {
satelite1 = (abs(gps.satellites.value()));
oled.print("V max ");
oled.print(" H max ");
oled.print(" Sat ");
oled.println(" ");
oled.println(" ");
speed1 = (gps.speed.kmph());
if ( speed1 > maxspeed) {
maxspeed = speed1;
}
oled.setCursor(10 , 60);
oled.print(maxspeed);
high1 = (gps.altitude.meters());
if ( high1 > maxhigh) {
maxhigh = high1;
}
oled.setCursor(50 , 60);
oled.print(maxhigh);
oled.setCursor(100 , 60);
oled.print(satelite1);
oled.println(" ");
oled.println(" ");
oled.print("Km/h");
oled.print(" Trip ");
oled.println(" ");
oled.println(" ");
{
kmh1 = (gps.speed.kmph());
}
oled.setCursor(10 , 110);
oled.print(kmh1);
String Temps=String(gps.time.hour()+1)+(":")+(gps.time.minute())+(":")+(gps.time.second());
String Date=String(gps.date.day())+("/")+(gps.date.month())+("/")+(gps.date.year());
File data=SD.open("log.txt",FILE_WRITE);
data.println(Date + " " + Temps + " " + String(gps.location.lat(), 6)+" "+String(gps.location.lng(), 6)+(" ")+String(gps.altitude.meters(),0)+(" ")+String(gps.speed.kmph(),0))+(" ")+String(satelite1);
data.close();
DelayGPS(100);
oled.clear();
}
static void DelayGPS(unsigned long ms)
{
unsigned long start = millis();
do
{
while (ss.available())
gps.encode(ss.read());
} while (millis() - start < ms);
}
questo quello che vedo adesso nello schermo.. tutto a zero ovviamente e campo Trip (sul serio ) ancora vuoto e tutto ancora da scrivere
https://i.postimg.cc/ry3LJjxV/P1011800.jpg