Последовательная связь с обработкой

Последовательная связь с обработкой

Последовательная связь с обработкой

Серийный класс

Операции по использованию последовательной связи в Обработка определены в классе Serial.Первая операция, которую необходимо выполнить для их использования в программе (эскиз) будет включать его в код с помощью import processing.serial.*;.

Содержание

    Класс Serial Он имеет пять разных конструкторов в зависимости от указанных параметров. Единственный обязательный параметр — родительский объект (родителя), что обычно соответствует основной программе (скажем, окну программы) класса PApplet. Как обычно, родителем будет написанная программа ( эскиз текущий), значение этого первого обязательного параметра будет this.

    Остальные пять параметров, которые можно передать конструктору: ① скорость, ② имя последовательного порта, ③ соотношение используемые в протоколе: ④ биты данных и ⑤ стоповые биты. Наиболее часто передаваемыми параметрами, помимо обязательного родительского объекта, являются имя порта и скорость.

    La скорость последовательной связи является целым числом (int) что по умолчанию значение 9600 если этот параметр не передан конструктору.

    Доступны последовательные порты. Метод списка

    El имя порта имеет форму, определяемую системой, таким образом, например в Дистрибутивы Linux будет что-то вроде / dev / ttyS4 / dev / ttyACM3 o / dev / ttyUSB1 (в зависимости от типа порта), а в Windows это будет что-то вроде COM12. Если порт физически не связан с устройством, программа обычно не знает, какой порт использовать. Обычный способ выбора порта — получить список доступных портов, показать его пользователю и позволить ему выбрать тот, который он хочет использовать. Метод Serial.list() возвращает вектор текстовых строк (String) с именами портов, доступных в системе.

    Порт, используемый библиотекой по умолчанию Serial является первым из возвращаемых методом list (конечно COM1 в Windows или / dev / ttyS0 en GNU / Linux). За исключением очень ограниченных случаев, когда оборудование, с которым работаете, строго известно (например, система в режиме киоска), оно обычно не опускается и порт назначения явно указывается.

    Обработка последовательного порта списка последовательных портов Linux ttyACM ttyS ttyUSB

    На скриншоте выше показаны выходные данные системы. GNU / Linux который имеет четыре последовательных порта RS-232 (ttyS0 a ttyS3) и пять адаптеров двух типов (ttyACM0 a ttyACM1 y ttyUSB0 a ttyUSB2).

    Разрешения последовательных устройств Linux ttyACM ttyS ttyUSB

    Чтобы получить доступ к последовательным портам, пользователь должен принадлежать к группе, к которой его назначает система, обычно терминал o дозвон. На скриншоте выше вы можете видеть, что последовательные порты, перечисленные с ls /dev/tty[ASU]* -la принадлежат к группе дозвон который имеет права доступа на чтение и запись.

    Параметры последовательного протокола

    La соотношение последовательной связи выражается в Обработка как персонаж(char), который может принимать значения: ① N (никто), чтобы не обнаружить соотношение, ② E (даже), чтобы указать, что бит четности четный, ③ O (странный), чтобы указать, что бит четности нечетно, ④ M (отметка), чтобы всегда делать бит четности и ⑤ S (космосе), чтобы всегда делать один бит четности. Значение по умолчанию, если оно не передано конструктору в качестве параметра, равно N (грех соотношение).

    Количество биты данных, которое по умолчанию равно восьми, указывает количество битов, составляющих чистую полезную нагрузку данных (называемую символом или иногда словом), которая передается в каждой базовой единице кадра. Параметр, указывающий количество бит данных, выражается целым числом (int).

    Наконец, пятый возможный параметр указывает продолжительность итоговой оценки, выражаемую как стоп-биты (стоп-биты), который обозначается числом, представленным в плавающая запятая (float), которые могут принимать значения 1.0 (значение по умолчанию, если параметр не передается конструктору), 1.5или 2.0.

    Конструкторы класса Serial

    В следующем списке показаны различные комбинации параметров, которые можно передать конструктору класса. Serial:

    • Serial(padre)
    • Serial(padre,puerto)
    • Serial(padre,velocidad)
    • Serial(padre,puerto,velocidad)
    • Serial(padre,puerto,velocidad,paridad,bits_datos,bits_parada)
    Завершить последовательную связь. Метод остановки.

    Чтобы освободить последовательный порт, назначенный при создании экземпляра Serial, и что другие системные приложения могут его использовать, связь завершается методом stop, который не получает параметров.

    Отправьте данные через последовательный порт. Метод записи

    Для отправки данных класс Serial de Обработка включает в себя метод write с помощью которого можно передавать ① текстовые строки (String), ② байты или ③ байт-векторы (byte[]). Интересно это вспомнить byte en ОбработкаJava) представляет целое число от -128 до 127, и по умолчанию строки используют кодировку UTF-16.

    Чтение данных из последовательного порта

    Чтобы программа могла выполнять другие задачи во время получения данных через последовательный порт, ее обычно сохраняют в буфер данные, которые поступают, и читать их, когда это необходимо. Хотя обычно это не очень эффективно, вы можете остановить приложение, чтобы загрузить все доступные данные; Однако наиболее распространенным будет чтение информации по мере ее поступления, либо на каждой итерации draw, когда в наличии определенное количество или получен специальный код.

    Объем данных, доступных в буфере. Доступный метод

    Чтобы узнать, поступили ли данные буфер сериал, метод available возвращает количество байтов, которые уже были сохранены в этом буфер. В любом случае операции чтения могут возвращать специальное значение (например, -1 o null) при попытке загрузить данные из буфер серия, когда пуста.

    Загружайте по одному байту за раз. Метод чтения

    Основные методы класса Serial которые служат для чтения информации, полученной последовательным портом, относятся к типу read» которые различаются между собой, главным образом, типом данных, в которых они доставляют полученную информацию.

    read используется для доставки байтов, полученных последовательным портом, в виде значения от 0 до 255. В качестве типа данных byte de Обработка представляет диапазон от -128 до 127, а не от 0 до 255, необходимо использовать int чтобы представить диапазон, возвращаемый read. Если вы попытаетесь прочитать с read y el буфер строка пуста, возвращает значение -1

    Чтение символов из последовательного порта. Метод чтенияЧар

    Метод readChar это похоже read но он возвращает значение в формате char вместо int. Как и внутренне, char en ОбработкаJava) хранятся в двух байтах, значение, выбранное для возврата при чтении с помощью readChar из буфер пустая серия это 0xFFFF o -1.

    Загрузите текстовую строку. Методы readString и readStringUntil.

    Метод readString возвращает объект String формируется на основе всех данных, имеющихся в буфер серия на момент консультации.

    Метод readString создает текстовую строку, предполагая, что байты, полученные последовательным портом, имеют формат ASCII поэтому этот метод чтения нельзя использовать для других кодировок.

    Если речь идет о чтении буфер серия с readString когда пусто, возвращаемое значение null.

    Метод readStringUntil добавить в readString возможность возврата информации, загруженной в буфер серии, разбивая ее по специальному символу (коду), который передается в качестве параметра. Такой способ чтения полученной информации позволяет выделить как разделители, так и терминаторы, помогающие интерпретировать полученную информацию.

    Метод readStringUntil вернуть null когда в буфер series не находит код, указанный в переданном ей аргументе (один байт).

    В следующем коде для Arduino отправляет три сообщения через последовательный порт. Первые два заканчиваются вкладкой, поэтому они появятся в консоли. Обработка, а третий, хотя и будет отправлен через последовательный порт, не будет прочитан с помощью readStringUntil(9) поскольку он не заканчивается вкладкой (с кодом ASCII 9).

    Обработка Serial.readStringUntil чтение последовательной строки

    Чтение блоков данных. Методы readBytes и readBytesUntil.

    Описанные выше методы используются для чтения данных в определенных форматах, для чтения блоков необработанных данных или в формате, который не предусмотрен в Обработка используются методы readBytes y readBytesUntil

    Метод readBytes попробуйте прочитать данные, доступные в буфер ряд. Если методу не передан параметр readBytes все доступные данные считываются и возвращаются в векторе (byte[]). Если в качестве параметра передается целое число, считывается максимальное количество байтов, указанное этим числом, и они также возвращаются в виде вектора.

    Есть третий способ использования readBytes, более эффективный, который принимает в качестве аргумента вектор байтов, в который помещается содержимое буфер ряд. Этот способ использования readBytes возвращает целое число (int), который представляет количество прочитанных байтов.

    Метод readBytesUntil работает аналогичным образом, но включает первый параметр, представляющий значение байта, который, если он найден в буфер, укажет на окончание чтения. В этом методе параметр, определяющий максимальное количество читаемых байт, не имеет смысла, поскольку это количество будет определяться специальным кодом.

    Проверить работу метода readBytes Предположим, что следующий код для Arduino который отправляет текст через последовательный порт.

    Следующий пример программы для Обработка читает текст из последовательного порта блоками по 32 байта (TOTAL_BYTES). Чтобы убедиться, что он работает, он показывает его через консоль в виде символов, заставляя тип полученных байтов char.

    На следующем скриншоте вы можете увидеть, как они отображаются в консоли. Обработка данные, загруженные блоками по (максимум) 32 байта (TOTAL_BYTES) каждый раз. Но есть проблема, о которой уже говорилось: Arduino отправлял стихи Федерико Гарсиа Лорка примера, закодированного как текст в формате UTF-8, который не тот, который используется Обработка (Java), что Вы предпочитаете UTF-16 так что те, кто не соответствует званию ASCII printable интерпретируются неправильно.

    Обработка Serial.readBytes UTF-16

    Чтобы решить эту проблему, можно загрузить наборы символов (кодировок) и определите новый объект String заставляя его быть представленным с помощью кодировки UTF-8 как показано в следующем примере кода.

    Обработка Serial.readBytes UTF-8

    Прочтите последние полученные данные. Методы Last и LastChar.

    В то время как остальные методы чтения («тип read») они загружают информацию буфер серии в том же порядке, в котором они поступили (FIFO), с помощью этих двух методов последний байт, достигший буфер ряд. Метод last возвращает значение последнего байта в виде int y lastChar возвращает значение в виде char.

    Управление последовательным буфером

    Хотя рассмотренные до сих пор методы вполне функциональны, они не всегда представляют собой лучший способ использования доступа к последовательному порту. Для загрузки данных им необходимо периодически проверять состояние буфер серии и прочитать данные, доступные в повторяющейся части кода. Как правило, более эффективный способ — читать данные только тогда, когда вы знаете, что они доступны.

    Прочитайте последовательный порт при получении данных. Серийное событие.

    Чтобы получить доступ к буфер Serial при получении данных событие Serial можно использовать, управляя им через определение метода. serialEvent. Этот метод использует последовательный порт, который запускает его, в качестве аргумента.

    Размер последовательного буфера. Буферный метод.

    Если вы знаете количество байтов, составляющих блок полезных данных, вы можете дополнительно оптимизировать этот стиль чтения данных. буфер серия через serialEvent. Метод buffer позволяет установить количество байтов, которые будут храниться в буфер перед запуском серийного мероприятия. Метод ожидает в качестве параметра целое число, обозначающее количество байтов.

    Заполняйте буфер до тех пор, пока не будет получено значение. Метод bufferUntil.

    Вместо установки вызова метода serialEvent за количество данных в буфер, с помощью метода bufferUntil вы можете настроить сохранение данных до тех пор, пока не поступит специальное значение, а затем вызвать событие Serial. Параметр, передаваемый этому методу, представляет собой int которое представляет значение, полученное в результате вызова serialEvent.

    Удалить данные, хранящиеся в буфере. Ясный метод.

    методом clear Вы можете удалить данные, которые в данный момент находятся в буфер. Этот метод можно использовать, например, для запуска нового сеанса приема данных, игнорируя данные, оставшиеся от предыдущего.

    Типичное приложение обработки для чтения данных через последовательный порт

    Наконец, удобно повторить операции объекта Serial de Обработка которые используются чаще, просматривая типичный пример получения данных через последовательный порт и рисуя с их помощью график, в данном случае составные области.

    Импортируйте последовательную библиотеку

    Определить протокол данных (разделители)

    Определить объект класса Serial

    Создайте экземпляр объекта класса Serial, установив используемый последовательный порт.

    Настройте буфер последовательного порта

    Реализуйте обработчик события Serial.

    Чтение последовательного буфера

    Условие полученных данных

    Завершить последовательную связь

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

    график с обработкой данных, полученных через последовательный порт

    Чтобы не потеряться в остальной части программы и сосредоточить внимание на последовательной связи с Обработка, выделяются строки кода, соответствующие предыдущим операциям.

    Оставить комментарий

    Вы могли пропустить