Serial - способы вывода\ввода

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

Нужно в порт выплюнуть данные, если делаем так:

 Serial.print("{\"sensor_data\":{");  //Открываем тег для API [мгновенные значения датчиков]
            
            //=====DTH=HOME=======
            Serial.print("\"th\":");
            Serial.print(dthHome.temperature, 1);
            Serial.print(",");
            Serial.print("\"hh\":");
            Serial.print(dthHome.humidity, 1);
            Serial.print(",");
            
            //=====DTH=STREET=====
            Serial.print("\"ts\":");
            Serial.print(dthStreet.temperature, 1);
            Serial.print(",");
            Serial.print("\"hs\":");
            Serial.print(dthStreet.humidity, 1);
            Serial.print(",");
            
            //=====t window=====            
            Serial.print("\"tw\":");
            Serial.print(tw);
            Serial.print(",");
            
            //=====t balcon=====            
            Serial.print("\"tb\":");
            Serial.print(tb);
            Serial.print(","); 

то данные идут постепенно (построчно), и принимающая сторона не принимает их целиком, а рвёт на куски. А должна быть одна строка.

Как сделать так, чтоб вывести данные разом, одной командой Serial.print, в одну строку все сразу?

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

Надо сформировать буфер в котором будет вся строка, а потом отправить этот буфер. Можно попробовать воспользоваться функцией sprintf(), предварительно преобразовав дробные(если есть) части в строки.

Документация по функциям обычно есть в самой среде /Arduino/hardware/tools/avr/doc/avr-libc/avr-libc-user-manual.pdf

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

Или на принимающей стороне проверять корректность данных и ждать хвоста.

06-07,  09-12, 14-15, 17-20, 22-25 - шли одним куском.