Прошло много времени с тех пор, как я прочитал NMEA GPS ...
Вам не нужно сравнивать подстроку, соответствующую типу данных NMEA, а не все буферные элементы NMEA? Метод .Split разделяет sBuffer на все запятые в предложении NMEA, чтобы у вас был каждый отдельный элемент. Но затем вы проверяете подстроку против первого элемента в цикле, что подразумевает, что вы хотите посмотреть на каждый элемент. Смешение ...
Так что ваш тест не будет выглядеть лучше:
string[] Words=sBuffer.Split(',');
if(String.Compare(Words[0],"$GPRMC")==0)
{
return "Correct Sentence";
}
else
{
return "Incorrect Sentence
}
Существует ли вероятность того, что поток NMEA выводит предложения, отличные от предложения Min Data, GPRMC, и вам нужно перечитать, пока не получите правильное предложение? Кроме того, вы уверены, что ваш GPS имеет тип данных $GPRMC
, а не GPRMC
? Я не думаю, что в типе данных должен быть $
.
т.е. в псевдо:
do {
buffer=read_NMEA(); //making sure the entire sentence is read...
array=split(buffer,",");
data_type=buffer[0];
}
while(data_type!="GPRMC" || readcount++<=MAX_NMEA_READS)
Чтобы отладить ваш цикл, попробуйте консольную запись элементов:
string[] Words = sBuffer.Split(',');
foreach (string item in Words)
{
Console.WriteLine(item);
}