尝试使用arduino和neo 6m模块从gps提取经度和纬度,但是循环上升到无穷大

时间:2019-05-06 05:49:16

标签: arduino gps iot android-gps

我是arduino的新手,并尝试使用arduino使用neo 6m模块提取gps坐标,但是循环一直运行到无穷大。您能帮我为什么它没有破裂吗?

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;
    }
}

我在void setup()循环中调用了get_gps();来初始化系统,但是用于从数据中提取正确字符串的gpsEvent函数一直在运行,直到您可以无限寻求帮助为止。该代码的引用来自https://circuitdigest.com/microcontroller-projects/arduino-based-accident-alert-system-using-gps-gsm-accelerometer 但是我自己所做的更改很少,但gps模块的编程却没有。

1 个答案:

答案 0 :(得分:0)

我认为错误之一是gpsString += inChar;

这不是Python。您正在将字符值添加到字符串指针。

您应该创建一个最大长度的缓冲区,插入一个字符并检查缓冲区溢出。

似乎还没有定义i。在C语言中,在执行操作时使用全局变量是非常不好的做法。在函数中保留一个i。再次检查字符串长度。

通常,您似乎使用的是一种您不太了解的语言来编写简单的程序(字符串操作是C语言的基础)。学习更好的C语言,或者寻找gps库的python实现(或只是链接)。