GPS string aanpassen van snleheid over de grond naar snelheid door het water

Hallo arduino specialisten, Ik heb een probleempje met het veranderen van een nmea string uit de gps die ik wil veranderen met een arduino.
Ik heb een programma gevonden die de GPS uit kan lezen en uitsturen, maar ik weet niet wat ik moet doen om iets te veranderen in de software om dit voor elkaar te krijgen.
Ben een beginner van 69 jaar en doe mijn best wie o wie kan mij helpen
Bij voorbaat mijn dank groeten Jaap

De inkomende string is $–VTG,x.x,T,x.x,M,x.x,N,x.x,K,ahh
De uit komende string moet zijn : $–VHW,x.x,T,x.x,M,x.x,N,x.x,K
hh

het programma ziet er zo uit:

/*
Serial Event example

When new serial data arrives, this sketch adds it to a String.
When a newline is received, the loop prints the string and
clears it.

A good test for this is to try it with a GPS receiver
that sends out NMEA 0183 sentences.

Created 9 May 2011
by Tom Igoe

This example code is in the public domain.

*/

String inputString = “”; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete

void setup() {
// initialize serial:
Serial.begin(4800);
// reserve 200 bytes for the inputString:
inputString.reserve(200);
}

void loop() {
// print the string when a newline arrives:
if (stringComplete) {
Serial.println(inputString);
// clear the string:
inputString = “”;
stringComplete = false;
}
}

/*
SerialEvent occurs whenever a new data comes in the
hardware serial RX. This routine is run between each
time loop() runs, so using delay inside loop can delay
response. Multiple bytes of data may be available.
*/
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
if (inChar == ‘\n’) {
stringComplete = true;
}
}
}

Ben je zeker dat je gps deze waarde niet geeft?

als het water stil staat, dan is het gelijk, maar als het water stroomt, dan zul je met sinus en zo moeten gaan werken, en dat kan de GPS natuurlijk niet zelf.

Hoi Japioblanco, welkom.

VTG - Track made good and Ground speed
VHW - Water speed and heading

Dat zijn twee heel verschillende zaken, die twee hele andere waarden kunnen leveren.
De eerste word aan de hand van een GPS vastgesteld, de tweede werkt voor zover ik tot nog toe gezien heb altijd met een schoepenradje onder je vaartuig.

De referentie is dan dus heel anders, namelijk voor de eerste de aarde, en voor de tweede het schip (die meet hoeveel water er langs het schip stroomt).
Als je dus met die tweede stilligt aan een stromende rivier, dan word er een snelheid geregistreerd.

Daarom ben ik heel benieuwd waarom je dit wil doen, en ook of dat wel een goed idee is.

Als ik je vraag goed begrepen heb, wil je uit de VTG een snelheid halen, en die in een 'vervalste' VHW sentence weer uitzenden, klopt dat ?
Daarvoor moet je dus gaan kijken tot je bij de VTG tussen de bij de snelhied behorende komma's bent uitgekomen, en vervolgens die waarde weer tussen de juiste komma's in de VHW sentence uitzenden.
Maar daarmee ben je er dan nog niet.
Want je moet ook de checksum voor de VHW opnieuw berekenen en uitzenden.
Verder moet je nog even kijken of die twee waardes wel in hetzelfde formaat worden uitgezonden in die twee sentences (zo te zien wel, maar beter om dat nog eens goed te controleren).

MAS3:
Hoi Japioblanco, welkom.

VTG - Track made good and Ground speed
VHW - Water speed and heading

Dat zijn twee heel verschillende zaken, die twee hele andere waarden kunnen leveren.
De eerste word aan de hand van een GPS vastgesteld, de tweede werkt voor zover ik tot nog toe gezien heb altijd met een schoepenradje onder je vaartuig.

De referentie is dan dus heel anders, namelijk voor de eerste de aarde, en voor de tweede het schip (die meet hoeveel water er langs het schip stroomt).
Als je dus met die tweede stilligt aan een stromende rivier, dan word er een snelheid geregistreerd.

Daarom ben ik heel benieuwd waarom je dit wil doen, en ook of dat wel een goed idee is.

Als ik je vraag goed begrepen heb, wil je uit de VTG een snelheid halen, en die in een 'vervalste' VHW sentence weer uitzenden, klopt dat ?
Daarvoor moet je dus gaan kijken tot je bij de VTG tussen de bij de snelhied behorende komma's bent uitgekomen, en vervolgens die waarde weer tussen de juiste komma's in de VHW sentence uitzenden.
Maar daarmee ben je er dan nog niet.
Want je moet ook de checksum voor de VHW opnieuw berekenen en uitzenden.
Verder moet je nog even kijken of die twee waardes wel in hetzelfde formaat worden uitgezonden in die twee sentences (zo te zien wel, maar beter om dat nog eens goed te controleren).

Als ik je vraag goed begrepen heb, wil je uit de VTG een snelheid halen, en die in een 'vervalste' VHW sentence weer uitzenden, klopt dat ?
ja dat klopt, ik heb een bootje met eer radar en die wil alleen AIS weer geven als ik de snelheid door het water kan invoeren, het gaat mij dus om de juiste syntax te vinden om die regel aan te kunnen passen, of het 100 procent juist is geeft in dit geval niet alvast bedankt voor je reactie
groeten Jaap

Dat vind ik een vreemde eis.
Gaat het om de snelheid door het water, of om de heading die ook in die sentence zit (/kan zitten) ?
Om AIS targets goed over de radar targets te kunnen leggen, is een heading (voorligging) heel belangrijk.
Anders krijg je de afstanden goed afgebeeld, maar de hoek ten opzichte van je eigen schip is dan waarschijnlijk onjuist.
Zo word een AIS target dan naast een radar target afgebeeld in plaats van er over heen.
Uiteraard zit deze informatie ook in een $HEHDT, $HEHDM of soortgelijke sentences die speciaal voor die informatie bedoeld zijn, en uit een kompas afkomstig zijn.
Als je er ook al een kompas op hebt aangesloten, en goed werkend, dan heb je deze info uiteraard niet meer nodig uit een andere sentence.

Welke radar is het ?
Dan kan ik eens kijken of er iets over te vinden is, ik ben niet erg bekend met radars voor pleziervaart.

Dit zijn de betreffende velden die je uit de VTG moet halen, het gaat om de groen en rood gemarkeerde tekst.
Groen is de snelheid in knopen, rood die in kilometers per uur.
Het is waarschijnlijk dat je die knopen echt nodig hebt.

$–VTG,x.x,T,x.x,M,x.x,N,x.x,K,m,*hh

Vervolgens kopieer je die waardes naar de corresponderende kleuren in de velden van de VHW sentence:

$–VHW,x.x,T,x.x,M,x.x,N,x.x,K*hh

Zoals je ziet heb ik hier ook het laatste veld in turkoois gemarkeerd.
Dat is namelijk de checksum, en die moet je opnieuw uitrekenen omdat je de inhoud van de velden hebt aangepast, en de ontvanger het recht heeft (en je er daarom van uit moet gaan dat die dat ook zal doen) om deze ontvangen data niet te accepteren vanwege foute data.
Vergeet ook niet een (Carriage Return) en (Line Feed) te sturen.
Dat zijn speciale ASCII karakters (of eigenlijk stuurcommando’s) en die combinatie doet hetzelfde als de enter toets in een tekstverwerker.
Dit zijn de ASCII karakters 13 en 10.