Попытка извлечь долготу и широту из GPS с использованием модуля Arduino и Neo 6 м, но цикл идет до бесконечности - PullRequest
0 голосов
/ 06 мая 2019

Я новичок в arduino и пытаюсь извлечь координату GPS, используя модуль neo 6m, используя arduino, но цикл работает до бесконечности. Можете ли вы помочь мне, почему он не ломается.

void gpsEvent()
{
    gpsString = "";
    while (1)
    {
        while (gps.available() > 0)  //Serial incoming data from GPS
        {
            char inChar = (char)gps.read();
            gpsString += inChar;//store incoming data from GPS to temparary string str[]
            i++;
            // Serial.print(inChar);
            if (i < 7)                      
            {
                if (gpsString[i-1] != test[i-1])    //check for right string
                {
                    i = 0;
                    gpsString = "";
                }
            }

            if (inChar == '\r')
            {
                if (i > 60)
                {
                    gps_status = 1;
                    break;
                }
                else
                {
                    i = 0;
                }
            }
        }

        if (gps_status)
            break;
     }
}

void get_gps()
{
    gps_status = 0;
    int x = 0;
    while (gps_status == 0)
    {
        gpsEvent();
        int str_lenth = i;
        coordinate2dec();
        i = 0;
        x = 0;
        str_lenth = 0;
    }
}

Я вызвал get_gps(); в цикле void setup () для инициализации системы, но функция gpsEvent, которая используется для извлечения правильной строки из данных, работает до бесконечности, можете ли вы помочь. Ссылка на код от https://circuitdigest.com/microcontroller-projects/arduino-based-accident-alert-system-using-gps-gsm-accelerometer но я сделал несколько собственных изменений, но не в программировании для модуля gps.

1 Ответ

0 голосов
/ 08 мая 2019

Я думаю, что одна из ошибок gpsString += inChar;.

Это не Python.Вы добавляете значение символа в указатель строки.

Вы должны создать буфер с максимальной длиной, вставить символ и проверить переполнение буфера.

Также i, похоже, не будетопределены.И в C очень плохая практика использовать глобальные переменные, как вы делаете.Оставьте один i в функции.Проверьте еще раз длину строки.

В общем, кажется, что вы используете язык, который вы не знаете достаточно для написания простых программ (манипулирование строками является базовым для C).Либо лучше изучите C, либо поищите реализацию (или просто ссылку) на языке Python библиотеки gps.

...