Попытка извлечь долготу и широту из GPS с использованием модуля arduino и neo 6m, но цикл идет до бесконечности

Я новичок в 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.


person carbon    schedule 06.05.2019    source источник


Ответы (1)


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

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

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

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

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

person Giacomo Catenazzi    schedule 08.05.2019