Не выводится строка из переменных...
- Войдите на сайт для отправки комментариев
Ср, 29/10/2014 - 17:38
В коде формируется строка из переменных вида :
statusHome = String("T_out_1-") + long(temp_out_1) + String(" V_out_1-") + int(vlazhnost_out_1) + String(" D-") + int(davlenie) + String(" T_in_1-") + long(temp_in_1) + String(" V_in_1-") + int(vlazhnost_in_1) + String(" A_t-") + int(auto_temp);
Если несколько значений равны 0, то строка выводится в сериал, если все значения отличны от 0, то строка не выводится совсем. Подскажите пожалуйста, в чем причина?
Потому что вы складываете разные типы данных - для языка C этот подход не работает. Вам нужно использовать функцию sprintf()
Не в этом дело...
Уменьшил количество выводимых символов в описании - всё заработало. Походу какое-то ограничение на длину строки есть, но его упоминания я найти не могу..
используй нультерминированную стрку тогда
Дело оказалось в нехватке ОЗУ. Дошло только после того, как стали переменне менять значения произвольно... Закомментировал отладочные сообщения ком порта и все прекрасно заработало.
Для экономии ОЗУ попробуйте заменить ваши отладочные сообщения наподобие вот этого:
Serial.print ( F ( “Hello World” ) )
Т. е. в данном случае строки хранятся не в озу а во флэш памяти и озу не занимают?
В коде формируется строка из переменных вида :
statusHome = String("T_out_1-") + long(temp_out_1) + String(" V_out_1-") + int(vlazhnost_out_1) + String(" D-") + int(davlenie) + String(" T_in_1-") + long(temp_in_1) + String(" V_in_1-") + int(vlazhnost_in_1) + String(" A_t-") + int(auto_temp);
Если несколько значений равны 0, то строка выводится в сериал, если все значения отличны от 0, то строка не выводится совсем. Подскажите пожалуйста, в чем причина?
А каким типом данных у Вас объявлена переменная statusHome ?
Сделал стрингом. Все данные с датчиков отсекают дробные. Как решить проблему?
Потому что вы складываете разные типы данных - для языка C этот подход не работает. Вам нужно использовать функцию sprintf()
Это тоже не работает. Вместо значений, например 26.06 выводится какоето пятичзначное число. Вобщем не верно тогда перевод осуществляется, так как массив char, а данные int и float, хотя да, выводить выводит.
функция sprintf() в avr-libc работает только с целыми числами - об этом уже неоднократно писали где только можно.