Послідовний зв'язок з обробкою

Послідовний зв'язок з обробкою

Послідовний зв'язок з обробкою

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

Операції з використанням послідовного зв’язку в Обробка визначені в класі Serial.Перша операція для використання їх у програмі (ескіз) буде включити його в код з import processing.serial.*;.

Зміст

    клас Serial Він має п’ять різних конструкторів залежно від вказаних параметрів. Єдиним обов’язковим параметром є батьківський об’єкт (батько), яка зазвичай відповідає головній програмі (скажімо, вікну програми) класу PApplet. Як зазвичай, батьківською буде написана програма (the ескіз поточний), значення цього першого обов'язкового параметра буде 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

    Щоб отримати доступ до послідовних портів, користувач повинен належати до групи, до якої система його призначає, зазвичай tty 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, який не отримує параметрів.

    Надсилайте дані через послідовний порт. Метод write.method

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

    Читання даних із послідовного порту

    Щоб програма могла виконувати інші завдання під час отримання даних через послідовний порт, її зазвичай зберігають у a буфера дані, які надходять, і читати їх, коли це необхідно. Хоча зазвичай це не дуже ефективно, ви можете зупинити програму, щоб завантажити всі доступні дані; Однак найпоширенішим буде читання інформації в міру її надходження або під час кожної ітерації draw, коли є певна кількість або отримано спеціальний код.

    Обсяг даних, доступних у буфері. Доступний спосіб

    Щоб дізнатися, чи надійшли дані буфера ряд, метод available повертає кількість байтів, які вже були збережені в цьому буфера. У будь-якому випадку операції читання можуть повертати спеціальне значення (наприклад, -1 o null) під час спроби завантажити дані з буфера серія, коли порожня.

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

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

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

    Читання символів із послідовного порту. Метод readChar

    Метод readChar es подібний a read але він повертає значення у форматі char замість a int. Як внутрішньо, char en ОбробкаJava) зберігаються з двома байтами, значенням, вибраним для повернення під час читання readChar по буфера порожня серія 0xFFFF o -1.

    Завантажте текстовий рядок. Методи readString і readStringUntil.

    Метод readString повертає об'єкт String формується з усіх даних, наявних у буфера серії на момент консультації з нею.

    Метод readString створює текстовий рядок, припускаючи, що байти, отримані послідовним портом, мають формат ASCII тому цей метод читання не можна використовувати для інших кодувань.

    Якщо йдеться про читання буфера серія с readString якщо порожній, повертається значення null.

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

    Метод readStringUntil Принесіть назад, поверніть null коли в буфера ряд не знаходить коду, зазначеного в переданому йому аргументі (один байт).

    У наступному коді для 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 для друку тлумачаться неправильно.

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

    Щоб вирішити цю проблему, можна завантажити набори символів (набір) і визначте новий об’єкт String примусово представляти його за допомогою кодування UTF-8 як показано в наступному прикладі коду.

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

    Прочитайте останні отримані дані. Методи last і lastChar.

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

    Керування послідовним буфером

    Незважаючи на те, що методи, які ми бачили досі, є ідеально функціональними, вони не завжди є найкращим способом використання доступу до послідовного порту. Для завантаження даних їм необхідно періодично перевіряти статус буфера і прочитайте дані, наявні в повторюваній частині коду. Загалом ефективнішим способом є читання даних лише тоді, коли ви знаєте, що вони доступні.

    Прочитайте послідовний порт, коли дані отримані. Серійна подія.

    Щоб отримати доступ до буфера serial, коли дані отримані, подію Serial можна використовувати, керуючи нею через визначення методу serialEvent. Цей метод використовує послідовний порт, який його запускає, як аргумент.

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

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

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

    Замість встановлення виклику методу serialEvent для певної кількості даних у буфера, за допомогою методу bufferUntil ви можете налаштувати зберігання даних до отримання спеціального значення, а потім викликати подію Serial. Параметр, який передається в цей метод, це a int який представляє значення, створене викликом serialEvent.

    Видаліть дані, що зберігаються в буфері. Чіткий метод.

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

    Типова програма обробки для читання даних через послідовний порт

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

    Імпорт бібліотеки Serial

    Визначити протокол даних (роздільники)

    Визначити об’єкт класу Serial

    Створіть екземпляр об’єкта класу Serial, вказавши використаний послідовний порт

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

    Реалізуйте обробник для події Serial

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

    Обумовіть отримані дані

    Завершити послідовний зв'язок

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

    графіка з обробкою даних, отриманих через послідовний порт

    Щоб не загубитися в решті програми і зосередити увагу на послідовному зв'язку з Обробка, виділені рядки коду, які відповідають попереднім операціям.

    Дати коментар

    Можливо, ви пропустили