Не выводится строка из переменных...

Jek
Offline
Зарегистрирован: 05.01.2014

В коде формируется строка из переменных  вида :

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, то строка не выводится совсем. Подскажите пожалуйста, в чем причина?

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Потому что вы складываете разные типы данных - для языка C этот подход не работает. Вам нужно использовать функцию sprintf()

char buf[255];

sprintf(buf, "T_out_1-%d V_out_1-%d D-%d T_in_1-%d V_in_1-%d A_t-%d", temp_out_1,vlazhnost_out_1,davlenie,temp_in_1,vlazhnost_in_1,auto_temp);
Serial.println(buf);

 

Jek
Offline
Зарегистрирован: 05.01.2014

Не в этом дело...

Уменьшил количество выводимых символов в описании - всё заработало. Походу какое-то ограничение на длину строки есть, но его упоминания я найти не могу..

Radjah
Offline
Зарегистрирован: 06.08.2014

используй нультерминированную стрку тогда

Jek
Offline
Зарегистрирован: 05.01.2014

Дело оказалось в нехватке ОЗУ. Дошло только после того, как стали переменне менять значения произвольно... Закомментировал отладочные сообщения ком порта и все прекрасно заработало.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Для экономии ОЗУ попробуйте заменить ваши отладочные сообщения наподобие вот этого:

Serial.print  (  F   (   “Hello World”   )   )

Jek
Offline
Зарегистрирован: 05.01.2014

Т. е. в данном случае строки хранятся не в озу а во флэш памяти и озу не занимают?

Sirocco
Offline
Зарегистрирован: 28.09.2013

Jek пишет:

В коде формируется строка из переменных  вида :

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 ?

Сделал стрингом. Все данные с датчиков отсекают дробные. Как решить проблему?

Sirocco
Offline
Зарегистрирован: 28.09.2013

NeiroN пишет:

Потому что вы складываете разные типы данных - для языка C этот подход не работает. Вам нужно использовать функцию sprintf()

char buf[255];

sprintf(buf, "T_out_1-%d V_out_1-%d D-%d T_in_1-%d V_in_1-%d A_t-%d", temp_out_1,vlazhnost_out_1,davlenie,temp_in_1,vlazhnost_in_1,auto_temp);
Serial.println(buf);

 

Это тоже не работает. Вместо значений, например 26.06 выводится какоето пятичзначное число. Вобщем не верно тогда перевод осуществляется, так как массив char, а данные int и float, хотя да, выводить выводит.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

функция sprintf() в avr-libc работает только с целыми числами - об этом уже неоднократно писали где только можно.