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

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

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

2022-07-06 17
Передача данных через серийный порт 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.006 с.