обработка данных Serial
- Войдите на сайт для отправки комментариев
Втр, 07/07/2020 - 11:23
Здравствуйте! на борту esp8266 делает запрос на хостинг.. получает ответ вида 100111011-где любая цифра это состояние пина на ардуинке ..либо включен либо выключен
далее этот набор цифр принимает mega2560 в Serial3 .. собственно проблема в том как разбить этот набор цифр по одной..и записать в переменные..
1- pin24
0-pin25
0-pin26 ....
если делать запрос и получать одну цифру..проблем бы не было..но это очень много запросов.. поэтому хост выдает одной строкой состояние всех пинов ..
как разбить этот набор цифр по одной..и записать в переменные..
1- pin24
0-pin25
0-pin26 ....
Написать парсер входного кода и распихиватель по переменным.
да в этом то и проблема..
бьюсь 4й день..
ну так показывай, как бьёшься.
Вы неправильно понимаете работу parseInt
Он ваш ТЕКСТ "100111011" воспринимает как одно число.
unsigned
long
data = Serial3.parseInt();
А почему ты читаешь unsigned long, когда пишешь String? Да еще и функцией parseInt?
спасибо. просто это единственный способ которого я добился что бы корректно получить данные от esp8266
в мониторе порта ардуино.. а как эти 100111011 цифры разбить по одной.. заранее извиняюсь за некомпетентность.. я больше в php все время..только открываю мир контроллеров
если просто long то выводит не все цифры в строке...5 или 6 ... а parseInt() единственное что хоть как то правильно передает в порт
если просто принимать serial.read() прилетает что то типа 50 ...10 .. или 216...114... вместо 1000111000...
10101001 приходит строкой? У String есть метод, выдающий указатель на char[]. Указатель берите и бегите с ним, пока не встретите NULL. Каждый следующий символ - "состояние" пина.
Что-то вроде:
В Arduino.h есть макрос для побитового чтения числа
В Arduino.h есть макрос для побайтового чтения числа
разве из названия макроса не очевидно. что чтение будет ПОБИТОВОЕ, а не побайтное?
ну и потом, ТС в итоге остановился на варианте через строку, а не через число...
разве из названия макроса не очевидно. что чтение будет ПОБИТОВОЕ, а не побайтное?
ну и потом, ТС в итоге остановился на варианте через строку, а не через число...
Это опИска, уже исправил ))
Да дело его, но можно было проще
Да дело его, но можно было проще
"проще" - понятие относительное. :) ТС, похоже, не отличиает битов от байтов... поэтому я считаю, что "проще" оставить как есть. чем пытаться обьяснить ему другой путь :)
"проще" - понятие относительное. :) ТС, похоже, не отличиает битов от байтов...
Вот и я, его почитавши, сам описАлся ))
разве из названия макроса не очевидно. что чтение будет ПОБИТОВОЕ, а не побайтное?
ну и потом, ТС в итоге остановился на варианте через строку, а не через число...
Это опИска, уже исправил ))
Да дело его, но можно было проще
Во-первых, он получает с get-запроса строку, а не число.
В принципе, можно было в ЕСПшке эту строку конвертнуть в число, потом в атмеге это число читать побитово... Что это даст? На мой взгляд, кроме сокращения посылок между есп и атмегой - никакой другой выгоды нет.
А учитывая, сколько новых знаний ТСу надо будет выкурить для этого - овчинка выделки не стоит...
Вот проверку передачи между ЕСП и атмегой (хотя бы элементарной однобайтовой суммой, про СРС и не заикаюсь) я бы сделал. Малейшее искажение и не тот пин включится.