Vai indietro   Forum Modellismo.net > Discussioni generali > Off Topic
Registrazione FAQ Mercatino Community Calendario
Rispondi
 
Strumenti della discussione
Vecchio 24-06-20, 07:59 PM   #1
Utente
 
Registrato dal: May 2002
Messaggi: 592
wrighizilla inizia ad ingranare.
predefinito 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.

Ultima modifica di wrighizilla; 24-06-20 a 08:04 PM
wrighizilla non è in linea   Rispondi quotando
Rispondi


Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smilie sono attive
Il codice IMG è attivo
il codice HTML è disattivato
Trackbacks are attivo
Pingbacks are attivo
Refbacks are disattivato


Discussioni simili
Discussione Ha iniziato questa discussione Forum Risposte Ultimo messaggio
Servo Arduino delu1995 Automodelli elettrici 1/10 Touring 1 11-02-17 08:33 PM
facciamo uno sketch? Senzacervello Tecniche modellistiche navali 6 07-06-16 08:15 AM
Problema con arduino Bobo17 Robot-Mania 0 26-12-15 04:16 PM
ESC & Arduino Jim_Morrison Impianti radio, caricatori, ESC e batterie 1 02-12-14 10:13 AM
Esc & Arduino Ithos92 Automodelli elettrici 1/10 Touring 1 12-01-12 07:48 AM


Tutti gli orari sono GMT +2. Attualmente sono le 01:41 AM.


Chi Siamo | Pubblicità | Scambio banner | Disclaimer | Regolamento | P.IVA 00319251203
Disponibile su App Store Disponibile su Google Play