diff --git a/lib/boatData/GwBoatData.cpp b/lib/boatData/GwBoatData.cpp index 39d22c8..424ebe4 100644 --- a/lib/boatData/GwBoatData.cpp +++ b/lib/boatData/GwBoatData.cpp @@ -493,6 +493,11 @@ double formatKnots(double cv) return cv * 3600.0 / 1852.0; } +double formatKmh(double cv) +{ + return cv *3600.0 / 1000.0; +} + uint32_t mtr2nm(uint32_t m) { return m / 1852; @@ -523,4 +528,4 @@ public: }; static XWriter xwriter; ARDUINOJSON_NAMESPACE::TextFormatter<XWriter> testWriter(xwriter); -#endif \ No newline at end of file +#endif diff --git a/lib/boatData/GwBoatData.h b/lib/boatData/GwBoatData.h index a4df3b4..ae50b3f 100644 --- a/lib/boatData/GwBoatData.h +++ b/lib/boatData/GwBoatData.h @@ -129,6 +129,7 @@ double formatCourse(double cv); double formatDegToRad(double deg); double formatWind(double cv); double formatKnots(double cv); +double formatKmh(double cv); uint32_t mtr2nm(uint32_t m); double mtr2nm(double m); @@ -251,4 +252,4 @@ class GwBoatData{ }; -#endif \ No newline at end of file +#endif diff --git a/lib/nmea2kto0183/N2kDataToNMEA0183.cpp b/lib/nmea2kto0183/N2kDataToNMEA0183.cpp index 1056c87..afafcd6 100644 --- a/lib/nmea2kto0183/N2kDataToNMEA0183.cpp +++ b/lib/nmea2kto0183/N2kDataToNMEA0183.cpp @@ -528,6 +528,31 @@ private: { SendMessage(NMEA0183Msg); } + + if (shouldSend && NMEA0183Reference == NMEA0183Wind_Apparent) + { + double wa = formatCourse(WindAngle); + if (!NMEA0183Msg.Init("VWR", talkerId)) + return; + if (!NMEA0183Msg.AddDoubleField(( wa > 180 ) ? 360-wa : wa)) + return; + if (!NMEA0183Msg.AddStrField(( wa >= 0 && wa <= 180) ? 'R' : 'L')) + return; + if (!NMEA0183Msg.AddDoubleField(formatKnots(WindSpeed))) + return; + if (!NMEA0183Msg.AddStrField("N")) + return; + if (!NMEA0183Msg.AddDoubleField(WindSpeed)) + return; + if (!NMEA0183Msg.AddStrField("M")) + return; + if (!NMEA0183Msg.AddDoubleField(formatKmh(WindSpeed))) + return; + if (!NMEA0183Msg.AddStrField("K")) + return; + + SendMessage(NMEA0183Msg); + } } /* if (WindReference == N2kWind_Apparent && boatData->SOG->isValid())