Vai indietro   Forum Modellismo.net > Discussioni generali > Off Topic
Rispondi
 
Strumenti della discussione
Vecchio 24-06-20, 07:59 PM   #1
Utente Vip - Io sostengo Modellismo.net
 
Registrato dal: May 2002
Messaggi: 417
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

Strumenti della discussione

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 07:18 AM.


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