Arduino:Примеры/TwoPortReceive: различия между версиями
Нет описания правки |
Нет описания правки |
||
Строка 121: | Строка 121: | ||
<references /> | <references /> | ||
{{Навигационная таблица/Портал/Arduino}} | |||
[[Категория:Пример]] | [[Категория:Пример]] | ||
[[Категория:Примеры]] | [[Категория:Примеры]] | ||
[[Категория:Пример программирования Arduino]] | [[Категория:Пример программирования Arduino]] | ||
[[Категория:Примеры программирования Arduino]] | [[Категория:Примеры программирования Arduino]] |
Текущая версия от 12:38, 8 июля 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Получение данных по двум виртуальным портам[1]
Платы Arduino имеют встроенную поддержку для последовательной передачи данных (на 0-ом и 1-ом контактах), но что если вам нужно больше последовательных портов? Как раз для этого случая была разработана библиотека SoftwareSerial, которая позволяет организовать последовательную передачу данных через другие цифровые контакты – при помощи ПО, которое копирует функционал «намертво» запрограммированных линий RX и TX. Эта библиотека может оказаться крайне полезна, когда вам надо настроить последовательную передачу данных сразу с двумя девайсами, либо с одним, но так, чтобы один из последовательных портов был отведен под отладку.
В примере ниже цифровые контакты 2 и 4 на Arduino используются в качестве виртуальных RX-линий для последовательной передачи данных. Контакты 3 и 5 будут выступать в качестве виртуальных TX-линий. Arduino будет прослушивать один виртуальный порт (portOne), пока он не прекратит передавать данные, после чего начнет прослушивать второй виртуальный порт (portTwo).
Необходимое оборудование
- Arduino Board;
Цепь
Для этого примера цепи строить не нужно. Только убедитесь, что Arduino подключена к компьютеру через USB, чтобы иметь возможность запустить последовательную коммуникацию.
Код
/*
Тест c передачей данных посредством Software Serial (вариация 2)
Получает данные по двум виртуальным портам, отправляет по аппаратному.
Для «прослушки» виртуального порта вызываем функцию port.listen().
В данном примере используется два последовательных виртуальных порта,
поэтому прослушиваться они будут по очереди при помощи функции
listen(). Для подобного переключения обычно используется так
называемое «логическое время» – вроде завершения сеанса передачи
данных или когда буфер будет пуст. В этом примере порты переключаются,
когда на текущем порте считывать будет больше нечего.
Цепь:
Нужны два девайса, поддерживающих последовательную передачу данных.
* TX первого подключен к 10-ому цифровому контакту, RX – к 11-ему
* TX второго подключен к 8-ому цифровому контакту, RX – к 9-ому
Примечание:
Не все контакты Mega и Mega 2560 поддерживают «перепрошивку»,
поэтому для RX можно использовать только эти:
10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69
Также не все контакты Leonardo поддерживают «перепрошивку»,
поэтому для RX можно использовать только эти:
8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
Создан 18 апреля 2011,
модифицирован 25 мая 2012 Томом Иго (Tom Igoe),
основан на примере «twoPortRXExample» Микала Харта (Mikal Hart).
Этот код не защищен авторским правом.
*/
#include <SoftwareSerial.h>
// Виртуальный порт #1: TX – 10-ый цифровой контакт, RX – 11-ый цифровой контакт
SoftwareSerial portOne(10,11);
// Виртуальный порт #1: TX – 8-ой цифровой контакт, RX – 9-ый цифровой контакт.
// Если используете плату Mega, то у нее 8-ой и 9-ый контакты
// для этих целей работать не будут. Воспользуйтесь другими.
SoftwareSerial portTwo(8,9);
void setup()
{
// Запускаем последовательную передачу данных и ждем открытия порта:
Serial.begin(9600);
while (!Serial) {
; // ждем подключения последовательного порта (нужно только для Leonardo)
}
// Запускаем оба виртуальных последовательных порта:
portOne.begin(9600);
portTwo.begin(9600);
}
void loop()
{
// По умолчанию первым начнет прослушиваться порт,
// который был инициализирован последним.
// Если вам нужно начать с определенного порта, укажите его:
portOne.listen();
Serial.println("Data from port one:"); // "Данные с первого порта:"
// Пока данные идут, считываем их, а затем
// отправляем обратно на аппаратный последовательный порт:
while (portOne.available() > 0) {
char inByte = portOne.read();
Serial.write(inByte);
}
// Делаем пустую линию, чтобы разделить данные, пришедшие по разным портам:
Serial.println();
// Теперь прослушиваем второй порт:
portTwo.listen();
// Пока данные идут, считываем их, а затем
// отправляем обратно на аппаратный последовательный порт:
Serial.println("Data from port two:"); // "Данные со второго порта:"
while (portTwo.available() > 0) {
char inByte = portTwo.read();
Serial.write(inByte);
}
// Делаем пустую линию, чтобы разделить данные, пришедшие по разным портам:
Serial.println();
}
См.также
- The Software Serial Library
- MultiSerialMega: use two of the serial ports available on the Arduino Mega.
- Serial Call Response: send multiple vairables using a call-and-response (handshaking) method.
- Serial Call Response ASCII: send multiple variables using a call-and-response (handshaking) method, and ASCII-encode the values before sending.
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino