int paikka;
int laskuri;
String knots = "x";
String dataOK = "V";
String NMEAst;
String NMEAstring;
float Nopeus_F = 0;
float Nopeus = 0;
float Nopeus_Test = 0;
char uusitavu;
char vanhatavu;
char dump;
#include <SoftwareSerial.h>;// => adding SoftwareSerial library
//#define BTTX 9;// => BTTX (TXD) on digital 9
//#define BTRX 10;// => BTRX (RXD) on digital 10
SoftwareSerial SerialGPS=SoftwareSerial(14, 10, 1);// => declare SerialBT function. 9 on input, siis se tulee GPSltä.
void setup() {
// put your setup code here, to run once:
NMEAstring.reserve(1000);
pinMode(14, INPUT);
pinMode(9, OUTPUT);
Serial.begin(115200);
SerialGPS.begin(9600);
Serial.print("KUKUKU");
}
void loop() {
// put your main code here, to run repeatedly:
/*
if ((Serial.available()>0) || (SerialGPS.available()>0))
{
if (Serial.available()>0) {NMEAst = Serial.readString();}
if (SerialGPS.available()>0) {NMEAst = SerialGPS.read();}
*/
//while (!Serial.available()) {;} // Jos ei ole dataa bufferissa, odotellaan
luku:
//while (!Serial.available()) {;} // Jos ei ole dataa bufferissa, odotellaan
NMEAstring = "$GNRMC,142700.00,A,6009.13247,N,02453.12493,E,7.677,225.33,220822,,,A*7D 17:27:02.273 $GNVTG,225.33,T,,M,7.677,N,14.218,K,A*19";
etsi:
Serial.println(NMEAstring); // Printataan tutkittava stringi
dataOK = NMEAstring.substring(17,18); // Otetaan validaatio-merkki
Serial.println(dataOK);
if (dataOK = "A") // Jos validia dataa, käytetään se laskelmiin
{
knots = NMEAstring.substring(46, 51); // Luetaan nopeustieto
Serial.println(knots);
Nopeus = knots.toFloat(); // Muunnetaan luvuksi
Nopeus_F = 0.25 * Nopeus + 0.75 * Nopeus_F; //Lasketaan suodatettua nopeutta: 25% uutta, loput vanhaa
Serial.println(Nopeus_F);
if (Nopeus_F*16*10 > 31) // Jos riittävän korkea taajuus, ohjataan signaali päälle: 10Hz vastaa 1kn, mutta kytkennässä on 4-bittinen jakaja, siis jakaa 16:lla
{tone(4,Nopeus_F*16*10);} // Ohjaa signaali päälle
else
{noTone(4);} // Ohjataan signaali pois koska taajuus olisi liian matala.
}
resetoidaan:
dataOK = "V"; // Lähdetään siitä että data ei ole validia
delay(500); // Annetaan sarjasiirron päättyä.
while (SerialGPS.available()) {dump = SerialGPS.read();} // Loppudataa ei tarvita joten dumpataan se
//NMEAstring =""; // Nollataan kerättävä stringi ja luettavat tavut
uusitavu = ""; vanhatavu = "";
//Serial.println(NMEAst);
//
//NMEAst = "$GLGSV,2,1,07,69,51,083,27,78,32,034,30,79,41,101,30,80,08,154,*66 17:25:40.702 $GLGSV,2,2,07,85,36,249,40,86,40,313,,87,03,002,*54 17:25:40.752 $GNGLL,6009.15350,N,02453.17195,E,142538.00,A,A*78$GNRMC,142539.00,A,6009.15350,N,02453.17076,E,7.268,300.26,220822,,,A*72";
//dataOK = "V";
//paikka = NMEAst.indexOf("GNRMC"); // Etsitään RMC
//dataOK = NMEAst.substring(paikka+16,paikka+17); // Etsitään validity-merkki
// Jos data on validia...
//if (dataOK == "A")
// {
//
// knots = NMEAst.substring(paikka+45, paikka+50);
// Nopeus = knots.toFloat();
// Nopeus_F = 0.25 * Nopeus + 0.75 * Nopeus_F; //Lasketaan suodatettua nopeutta
//Nopeus_Test = Nopeus_F*0.75 + Nopeus*0.25;
//
// if (Nopeus_F*160 > 31)
// {tone(4,Nopeus_F*160);} // Ohjaa ääni
//else
// {noTone(4);}
// }
// else
// {
// }
// }
//int NMEA = 5;
//Serial.print(Nopeus_F*160);Serial.print(" ");Serial.print(paikka);Serial.print(" ");Serial.print(knots);Serial.print(" ");Serial.println((Nopeus_F));
//delay(500);
}