Вопрос во синтаксису

source
source аватар
Offline
Зарегистрирован: 20.05.2012

Возникла проблема небольшая при работе с TinyGPS

 Для примера, вывод координат реализован в примере так:

   lcd.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);

скорость так:

   lcd.print(gps.f_speed_kmph()== TinyGPS::GPS_INVALID_F_SPEED ? 0: gps.f_speed_kmph());

Все работает, все хорошо, но как мне эти данные закинуть в переменную?

 

пробовал закидывать в char

char lat;

lat=flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6;

и так 

lat=TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6;

в результате в переменной оказывается что-то непонятное и я потом не могу это отобразить на экране.

 

source
source аватар
Offline
Зарегистрирован: 20.05.2012

со скоростью разобрался - поменял тип на float? а вот с координатами это не помогло

6,0 выдает :( 

видимо связано с тем, что float может работать только с 6-7 символами в Arduino 

step962
Offline
Зарегистрирован: 23.05.2011

 А что символизирует шестерка в конце этого оператора:

lat=TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6;

Может быть без нее стоит попробовать? Вот так:

lat=TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat;

source
source аватар
Offline
Зарегистрирован: 20.05.2012

не помогло к сожалению

а можно как-то сконвертировать данные в другой тип ? 

 

6 в конце - количество символов после запятой

step962
Offline
Зарегистрирован: 23.05.2011

source пишет:

6 в конце - количество символов после запятой

Это вы прочитали где-то или сами решили?

Что вы делаете в строке

lat=TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6;

проверяете значение переменной TinyGPS::GPS_INVALID_F_ANGLE (а судя по написанию в верхнем регистре это очень даже может быть константа) и в зависимости от того истина это или ложь, присваиваете переменной либо первое (до двоеточия), либо второе значение.

Другая форма записи - более длинная но и более понятная:

if(TinyGPS::GPS_INVALID_F_ANGLE)
lat = 0.0;
else lat = flat, 6;

В последнем операторе переменной lat последовательно присваивается значение переменной flat, затем непонятно что делается с шестеркой. Во всяком случае прогоны с различными значениями от 1 до 15 никоим образом не повлияли на точность передаваемого значения.

 

Кстати, непонятно, что значит "не помогло"? Ничего не изменилось или результат другой, но вас не удовлетворяющий?

 

source
source аватар
Offline
Зарегистрирован: 20.05.2012

6 проверил эксперементальным путем

 

насчет результата  - пустое значение выводит в сериалмониторе и ||| на экране

пепебрал все типы - пока ничего

завтра еще проверю пару вариантов

спасибо, что помогаете 

source
source аватар
Offline
Зарегистрирован: 20.05.2012

по этой строке lcd.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);

типа float

попробовал просто использовать переменную   flat, работает, но после запятой только 2 символа вместо 6 :(

если подставить flat, 6 - результат не меняется 

source
source аватар
Offline
Зарегистрирован: 20.05.2012

разобрался - спасибо :)