Передача данных через серийный порт — КиберПедия 

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Передача данных через серийный порт

2022-07-06 15
Передача данных через серийный порт 0.00 из 5.00 0 оценок
Заказать работу

 

Для работы с серийным портом будем пользоваться библиотекой RXTX. Добавим новый класс и назовем его Serial.java. После импортирования всех необходимых элементов библиотеки в теле класса необходимо инициализировать объекты классов serialPort, input, output, а также объявить константы:TIME_OUT=2000 (время ожидания информации),DATA_RATE = 9600 (скорость передачи серийного порта, должна совпадать с заданной в коде для Arduino), PORT_NAMES (массив имен порта для различных операционных систем). Также в классе должно содержаться несколько методов.

Первый метод носит название initializeи используется для подготовки порта и инициализации переменных и объектов. Сначала в нем выбирается подходящее имя порта: в цикле по всем элементам PORT_NAMEсравнивается значение элемента массива и имени порта, полученного из системы. Если не требуется мультиплатформерность, то эта часть необязательная и для Windowsдостаточно задать имя порта как, например, «COM4».

ЗатемвэтомжеметоденужнометодомportId.openоткрытьсерийныйпорти установить параметры DATA_RATE,DATABITS_8, STOPBITS_1 и PARITY_NONE. МетодамиgetInputStreamиgetOutputStream открываем входящие и исходящие потоки данных. Входящий поток не пригодится, так как информация будет передаваться только в сторону Arduino, но можно добавить этот метод для дальнейших усовершенствований. Также включим так называемое прослушивание событий методом addEventListener - тогда программа будет реагировать на входящие сигналы.

Следующим шагом необходимо прописать метод закрытия серийного порта.Назовем его close. При условии, что серийный порт существует, прослушивание событий должно быть закрыто методом removeEventListenerи порт закрыт методом close.

Для отправки данных будет использоваться метод sendSingleByte. Он принимает один аргумент - байт, который будет передаваться, назовем его myByte. Методом output.writeзначение прописывается в серийный порт.

Метод serialEventбудет вызываться автоматически, когда в серийный порт будут поступать данные. Для этого нужно в его аргументы поставить событие прихода данных SerialPortEvent. В этом методе значение считывается методом input.read, преобразуется из типа byteв тип и хранится в переменной value. Также пропишем вывод переменной в консоль, предварительно проверив, входит ли она в интервал от 0 до 255.

Теперь для класса можно создавать объекты и вызывать их методы.Создадим объект serialкласса Serialи запустим метод его инициализации в функции start. В методе setClosed, выполняющемся при закрытии программы, пропишем serial.close.

Теперь закодируем информацию с двух переменных, получаемых с камеры, в один байт. При разжатых пальцах в этом байте будет содержатся просто количество отфильтрованных контуров. При сжатых байт будет содержать значение {1, 1, 1, 1, 1, 1, 1, 1} (127).В конце функции, анализирующей изображение следует добавить метод, осуществляющий отправку данных - serial.sendSingleByteи в аргументах ему задать полученный байт.

Следующий этап - модернизировать код для Arduinoтак, чтобы он мог принимать данные, отправляемые в серийный порт.Добавим переменную типа Byteи назовем ее getByte. В каждом повторении цикла loopтеперь можно добавить команду Serial.read, при условии, если Serial.avaliable.

Известно, что контроллер ArduPilotвоспринимает сигнал смены режима полета так же, как и сигналы газа, рыскания, тангажа и крена - в виде сигнала с широтно-импульсной модуляцией. Конкретные режимы, которые будут переключаться этим сигналом, можно настроить в программе MissionPlanner.Одному каналу можно присвоить функцию смены до 256 режимов, но чаще всего один канал на пульте меняет два или три режима. В нашем случае подобный вариант является оптимальным. Сделаем так, чтобы при сжатых пальцах первый канал передавал байт 11111111, а при разжатых - 0000000. Второй канал будет управляться количеством пальцев - пусть при сжатых пальцах значение равно 0, при трех разжатых - 86, при четырех 172, при пяти - 255.

Принятый байт нужно «разложить» обратно на два сигнала, аналогичными условиями: если принятый байт равен 127, то переменная mode1 типа intравна 255, а mode2 -нулю, иначе mode 1 равна нулю, а mode2 определяется по вышеописанному методу.

 


Поделиться с друзьями:

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.007 с.