Библиотека SoftwareSerial

В Ардуино реализована аппаратная поддержка интерфейса последовательной передачи данных через выводы 0 и 1 (которые также используются для связи с компьютером посредством USB). Аппаратная работа с последовательным интерфейсом осуществляется с помощью встроенного в микроконтроллер специального устройства, называемого приемопередатчиком Он позволяет микроконтроллеру Atmega обрабатывать поступающие данные даже во время работы над другими задачами.

Библиотека SoftwareSerial позволяет реализовать последовательный интерфейс на любых цифровых выводах Ардуино с помощью программных средств, дублирующих функциональность UART (отсюда и название "SoftwareSerial"). Библиотека позволяет программно создавать несколько последовательных портов, работающих на скорости до 115200 бод. Для устройств, работающих с инвертированным сигналом, в библиотеке предусмотрен соответствующий параметр, включающий инвертирование.

Начиная с версии 1.0, SoftwareSerial основывается на библиотеке NewSoftSerial автора Mikal Hart.

Ограничения

Среди известных ограничений библиотеки SoftwareSerial можно перечислить следующие:

  • При использовании нескольких последовательных портов, в каждый момент времени только один из них может получать данные.
  • На платах Arduino Mega и Mega2560 некоторые выводы не поддерживают прерывания, возникающие при изменении уровня сигнала. В силу этого, на данных платах в качестве вывода RX могут использоваться только следующие выводы: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
  • На Arduino Leonardo некоторые выводы не поддерживают прерывания, возникающие при изменении уровня сигнала. Поэтому, на этой плате в качестве вывода RX могут использоваться только следующие выводы: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

Пример

/*

Программа тестирования последовательных портов, создаваемых с помощью

библиотеки SoftwareSerial

Данные, получаемые аппаратным портом, отправляются на программный порт.

Данные, получаемые программным портом, отправляются на аппаратный порт.

Схема:

* RX - цифровой вывод 10 (необходимо соединить с выводом TX другого устройства)

* TX - цифровой вывод 11 (необходимо соединить с выводом RX другого устройства)

Примечания:

На платах Arduino Mega и Mega2560 некоторые выводы не поддерживают прерывания,

возникающие при изменении уровня сигнала. Поэтому, на данных платах в качестве

вывода RX могут использоваться только следующие выводы: 10, 11, 12, 13, 14, 15, 50,

51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).

На Arduino Leonardo некоторые выводы не поддерживают прерывания, возникающие при

изменении уровня сигнала. Поэтому, на этой плате в качестве вывода RX могут

использоваться только следующие выводы: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

дата создания не известна

модифицировано 25 мая 2012

Автор: Tom Igoe

на основе примера Mikal Hart

Данный код открыт для использования.

*/

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()

{

// Инициализируем последовательный интерфейс и ждем открытия порта:

Serial.begin(57600);

while (!Serial) {

; // ожидаем подключения к последовательному порту. Необходимо только для Leonardo

}

Serial.println("Goodnight moon!");

// устанавливаем скорость передачи данных для последовательного порта, созданного

// библиотекой SoftwareSerial

mySerial.begin(4800);

mySerial.println("Hello, world?");

}

void loop() // выполняется циклически

{

if (mySerial.available())

Serial.write(mySerial.read());

if (Serial.available())

mySerial.write(Serial.read());

}

Рекомендуем:

int

Побитовый свдиг влево (<<), побитовый сдвиг вправо (>>)

digitalWrite()

Константы

digitalRead()

setBitOrder()

transfer()

setDataMode()

SPI на Arduino Due

setClockDivider()

analogReference(type)

Wire

SPI

attachInterrupt()

pinMode()

EEPROM

 

Вверх