Мне нужно декодировать и отправить сигнал GPS на удаленный сервер с помощью модуля GSM. Я сгенерировал значения широты и долготы отдельно и объединил их в массив char
. Таким образом, я могу легко передать char*
последовательному write()
модулю GSM. Но эта объединенная строка содержит ошибочные значения. Я проверил декодированные значения, и у них есть реальные числа, но это происходит только тогда, когда я объединяю их в свой массив char
. Я запускаю этот код на Arduino Uno:
void loop()
{
char data[128];
data[0]='\0';
initialize();
strncat(data,getLat(),10);
strncat(data," ",2);
strncat(data,getLon(),10);
Serial.write(data);
Serial.println();
}
char* getLat(){
char buffer[10];
dtostrf(flat, 3, 6, buffer);
Serial.write(buffer);
Serial.print(" ");
return buffer;
}
Вывод выглядит следующим образом: первые два столбца содержат значения, только что напечатанные при вызове getLat()
методов (в преобразовании нет ошибок), а последние два значения представляют собой конкатенированную часть.
6.929772 79.947296 Àb 79.947296
6.929772 79.947296 6.929772 79.947296
6.929772 79.947296 6.929772 79.947296
6.929772 79.947296 6.929772 79.947296
6.929772 79.947296 6.929772 79tdt
6.929772 79.947296 6.929772 79.947296
6.929772 79.947296 6.vtet bztbt
6.929772 79.947296 6.929772 79.947296
Может кто-нибудь сказать мне, что здесь не так? Заранее спасибо.
getLat()
возвращает адрес автоматической переменной. Этот адрес становится недействительным после возврата из функции, и любое разыменование или даже оценка этого адреса вызывает неопределенное поведение. - person WhozCraig   schedule 30.08.2014