Доброго всем времени суток.
Хочу сделать проект считывать данные с АЦП Arduino DUE
Ардуино запрограммировал так чтобы она в COM порт на скорости 9600 отправляла данные в диапазоне от 0 до 4095, а на для начала я хочу получить эти данные а потом обработать с использованием графики.
На форуме нашел пример немного оптимизировал его под себя и он не пошел у меня к сожалению, помогите разобраться пожалуйста?
code_36688.txt
Этот топик читают: Гость
Ответов: 146
Рейтинг: 1
|
|||
карма: 0 |
| ||
файлы: 1 | code_36688.txt [1KB] [463] |
Ответов: 8959
Рейтинг: 824
|
|||
legandox, в каком формате ваш Arduino отправляет данные, те самые от "0" до "4095" (12-ти битным словом, двумя байтами (знаковое целое, беззнаковое целое), четырьмя байтами (каждый байт-символ цифры))
![]() |
|||
карма: 19 |
|
Ответов: 146
Рейтинг: 1
|
|||
Леонид, а как определить двумя байтами (знаковое целое, беззнаковое целое), четырьмя байтами (каждый байт-символ цифры)? Я сторонней программой прочитал COM порт (скриншот ниже), и как я понял он принимает вот такие значения 38 36 30 0D 0A 38 31 36 0D 0A 37 37 34 0D 0A 37 [img] http://s019.radikal.ru/i620/1512/15/8f20aa6afce2.png [/img] |
|||
карма: 0 |
|
Ответов: 8959
Рейтинг: 824
|
|||
legandox, это не он принимает, а ваша "сторонняя программа" переводит в шестнадцатиричный вид принятые байты
![]() Уберите конвертор из вашей схемы и получите на выходе байты (коды символов) которые выдаёт ваш Ардуино, и любой интерфейсный компонент покажет: 38=56=8 36=54=6 30=48=0 (Строка: 860) 0D=13 0A=10 (Перевод строки) 38=56=8 31=49=1 36=54=6 (Строка: 816) 0D=13 0A=10 (Перевод строки) 37=55=7 37=55=7 (Строка: 77) ------------ Дoбавленo в 10.38:
|
|||
карма: 19 |
|
Ответов: 146
Рейтинг: 1
|
|||
Леонид, присланная Вами схема хоть чуть начала работать, но в текстовом поле появляются пустые строки (как будто щелкали много раз enter-ом)
Я на ардуино (внутри микроконтроллера) тип данных присваиваю int и направляю в COM порт. Тип данных int (от англ. integer - целое число) один их наиболее часто используемых типов данных для хранения чисел. int занимает 2 байта памяти, и может хранить числа от -32 768 до 32 767 (от -2^15 до 2^15-1) Следовательно цифра 2 которая стоит в блоке DoData верна, хотя я и попробовал другие значения (4,8,16,32) |
|||
карма: 0 |
|
Ответов: 8959
Рейтинг: 824
|
|||
legandox, схема выложена вами, я удалил конвертор
СОМ порт имеет свой буфер, в котором принятые данные накапливаются, выдаётся из буфера столько байт, сколько запросили. Чем чаще идёт обращение к порту, тем больше нагрузка на компьютер, поэтому лучше пореже обращаться, но брать побольше с учётом установленной скорости. Так как вы (компьютер) не знаете, когда и сколько байт придёт, возможно разбиение слова по запросам: один байт в первом обращении, второй в следующем. Поэтому данные на выходе сшиваются и затем распарсиваются по каким-либо признакам, в вашем случае, наверное, по символам "10" и "13". Пустые строки можно отсеять с помощью If-Else. code_36693.txt А ещё у нас есть порт COMEX, который выдаёт данные сам по мере прступления |
|||
карма: 19 |
| ||
файлы: 1 | code_36693.txt [1.8KB] [497] |
Ответов: 146
Рейтинг: 1
|
|||
Леонид, Спасибо большое.
Только в блоке COM надо было на точку onread))) она у меня заработала только на другом компьютере, а на этом Windows 10 стоит программа отказалась работать!) И еще я провел эксперимент помимо цифр еще и буквы (слова) английские хорошо проходят, наши к сожалению нет. code_36701.txt |
|||
карма: 0 |
| ||
файлы: 1 | code_36701.txt [2KB] [483] |
7