Доброго время суток! Работаю над небольшим проектом мониторинга состояний окружающей среды... Он состоит из 4-х Ардуин, 3 из которых занимаются сбором данных с различных сенсоров и по запросу передают по серийному порту на 4-ую Ардуину. Данные с сенсоров по серийному идут в формате состоящем из 2-4 чисел (в зависимости от датчика). Например "1234" без лишних запятых, букв и тд. Идут они раздельно с интерввалом в 5 секунд. Задача состоит в том чтоб считать эти данные также раздельно и целиком а не по-битно... Т.к. данные я получаю, но лишь один бит из нескольких в формате ASCII. Я перерыл весь интернет, перепробывал кучу всяких кодов, но все никак...может кто-то сталкивался или может помоч? Заранее благодарен! Вот пример кода: Serial.write('R'); //запрашиваем данные с датчика дождя if(Serial.available() > 0) { rain = Serial.read(); //считываем данные delay(50); lcd.setCursor(-4, 2); //выводим на дисплей lcd.print("Rain: "); lcd.print(rain); lcd.print(" "); delay(50); dataString += "\nrain,"; //отслылаем на сервер Pachube.com dataString += rain; } delay(2000); З.Ы. Данные с датчиков приходят в нормальном виде, но не распознаются правильно уже самой Ардуиной. Проверено используя Tera Term терминал напрямую к серийному порту 4-ой Ардуины...
Этот код считывает один байт (символ) и тут же его показывает, не дожидаясь, пока прибудет остальная часть передаваемой строки. Что написали - то и получили, все верно работает.
Если совсем в лоб, то так: Код (C): Serial.write('R'); //запрашиваем данные с датчика дождя if(Serial.available() >= 4) { // считываем 4 байта } Но если по дороге пропадет хотя бы один байт - вся система развалится и перестанет корректно работать. Чтобы этого не произошло, используйте протокол пакетной передачи - он всегда отличит начало очередного пакета и скажет, если пакет пришел битым.