Forum Modellismo.net

Forum Modellismo.net (https://www.modellismo.net/forum/)
-   Off Topic (https://www.modellismo.net/forum/off-topic/)
-   -   Dubbi e modifiche su sketch Arduino (https://www.modellismo.net/forum/off-topic/131720-dubbi-e-modifiche-su-sketch-arduino.html)

wrighizilla 24-06-20 07:59 PM

Dubbi e modifiche su sketch Arduino
 
ho costruito un gps che funziona abbastanza bene ma vorrei modificare alcune funzioni, purtroppo non ne sto venendo a capo..

il gps è questo https://create.arduino.cc/projecthub...52375&offset=0

in questi giorni sto provando ad aggiungere una funzione "disl" dislivello che vorrei misurasse da zero (fix, reset o campo base) i metri di altitudine che vengono discesi o saliti durante un tragitto..
ovvero disl vorrei poterlo azzerare sulla cima di una collina e sapere sul display quanti metri di dislivello sono stati percorsi.

attualmente "alt = fix altitude mi rende un dato sul livello del mare e tutte le prove che ho fatto hanno sempre indicato una altitudine di partenza slm ad esempio 48mt casa mia.

io è da poco che gioco con arduino e avrei bisogno di confrontarmi con qualcuno più esperto di me che magari mi possa aiutare a scrivere meglio il codice.

non riesco a capire come azzerare il dato dell'altitudine slm, la stessa cosa che si fa con una bilancia quando si azzera la tara e si esclude la ciotola.

questo è il codice.
"disl" adesso misura un valore fix.alt.whole ma è solo un refuso dell'ultima prova che ho fatto..

codice:

#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"
#include <NMEAGPS.h>
#include <SoftwareSerial.h>
//#include <NeoSWSerial.h>
const int cs_sd=2;
#define I2C_ADDRESS 0x3C
#define RST_PIN -1
SSD1306AsciiWire lcd;
NMEAGPS gps;
gps_fix fix;
File myFile;
float odo;
float Speed;
float alt;
int disl; //--dislivello

NeoGPS::Location_t    lastLoc;
bool                  lastLocOK = false;
static const int RXPin = 5, TXPin = 4; //-- gps pin
static const uint32_t GPSBaud = 9600;
SoftwareSerial gpsPort(RXPin, TXPin);
const int SHOW_INTERVAL = 1;
const int INITIAL_SHOW  = (2 * SHOW_INTERVAL) - 1;
    int show          = INITIAL_SHOW;
const int  LED_PIN  = 3;  //-- led on at speed limit
const float SPEED_LIMIT = 0.0; // --setup speed limit value es: 55.0; kmh
int maxs = 0;


void setup(){
  pinMode (LED_PIN, OUTPUT);
Serial.begin(9600);
gpsPort.begin(GPSBaud);
Wire.begin();
lcd.begin(&Adafruit128x64, I2C_ADDRESS);
lcd.setFont(TimesNewRoman16_bold);
lcd.clear();
lcd.println("  GPS");
lcd.println(" ");
lcd.println("  WELCOME");
delay(3000);
lcd.clear();
if(!SD.begin(cs_sd)){
lcd.clear();
lcd.println(" ");
lcd.print("NO SD");
delay(3000);
return;}
lcd.println(" ");
lcd.print("SD Card OK");
delay(2000);
lcd.clear();
File data = SD.open("log.csv",FILE_WRITE);             
data.println("");
data.println("Data  Hr+1  Lat  Lon  Disl  Alt  Vel  Dist" ); //-- Hr+1 add your local time difference 
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 ( Speed > maxs)
maxs = Speed;
if (fix.valid.altitude)
 alt = ( fix.altitude());
 
disl = (fix.alt.whole);//--dislivello
 
 
 
 
if (show == 0) {
#define MAX_CHARS 22
char displayBufffer[MAX_CHARS];
lcd.setCursor(0,0); 
snprintf(displayBufffer, MAX_CHARS, " Km  :  %  3d.%02d", (int)odo, (int)(odo * 100)%100);
lcd.println(displayBufffer); 
snprintf(displayBufffer, MAX_CHARS, "Kmh:  %  3d.%02d", (int)Speed, (int)(Speed * 100)%100);
lcd.println(displayBufffer);
snprintf(displayBufffer, MAX_CHARS, "Vmx:  %  3d.%02d", (int)maxs, (int)(maxs * 100)%100);
lcd.println(displayBufffer);
snprintf(displayBufffer, MAX_CHARS, "Disl  :  %  3d.%02d", (int)alt, (int)(alt * 100)%100);
lcd.println(displayBufffer);}   
String Temps=String(fix.dateTime.hours +1)+(":")+(fix.dateTime.minutes)+(":")+(fix.dateTime.seconds);
String Date=String(fix.dateTime.day)+("/")+(fix.dateTime.month)+("/")+(fix.dateTime.year); 
File data=SD.open("log.csv",FILE_WRITE);
data.println(Date +("  ")+ Temps +("  ")+ String(fix.latitude(), 6)+("  ")+String(fix.longitude(), 6)+("  ")+String(disl)+("  ")+String(alt)+("  ")+String(Speed)+("  ")+ String(odo));
data.close();}}



vi ringrazio. :)


Tutti gli orari sono GMT +2. Attualmente sono le 06:44 PM.