Вопрос во синтаксису
- Войдите на сайт для отправки комментариев
Вс, 20/05/2012 - 09:37
Возникла проблема небольшая при работе с 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;
в результате в переменной оказывается что-то непонятное и я потом не могу это отобразить на экране.
со скоростью разобрался - поменял тип на float? а вот с координатами это не помогло
6,0 выдает :(
видимо связано с тем, что float может работать только с 6-7 символами в Arduino
А что символизирует шестерка в конце этого оператора:
lat=TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6;
Может быть без нее стоит попробовать? Вот так:
lat=TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat;
не помогло к сожалению
а можно как-то сконвертировать данные в другой тип ?
6 в конце - количество символов после запятой
6 в конце - количество символов после запятой
Это вы прочитали где-то или сами решили?
Что вы делаете в строке
lat=TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6;
проверяете значение переменной TinyGPS::GPS_INVALID_F_ANGLE (а судя по написанию в верхнем регистре это очень даже может быть константа) и в зависимости от того истина это или ложь, присваиваете переменной либо первое (до двоеточия), либо второе значение.
Другая форма записи - более длинная но и более понятная:
В последнем операторе переменной lat последовательно присваивается значение переменной flat, затем непонятно что делается с шестеркой. Во всяком случае прогоны с различными значениями от 1 до 15 никоим образом не повлияли на точность передаваемого значения.
Кстати, непонятно, что значит "не помогло"? Ничего не изменилось или результат другой, но вас не удовлетворяющий?
6 проверил эксперементальным путем
насчет результата - пустое значение выводит в сериалмониторе и ||| на экране
пепебрал все типы - пока ничего
завтра еще проверю пару вариантов
спасибо, что помогаете
по этой строке lcd.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
типа float
попробовал просто использовать переменную flat, работает, но после запятой только 2 символа вместо 6 :(
если подставить flat, 6 - результат не меняется
разобрался - спасибо :)