КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Урок 26.1 Соединяем две arduino по шине UART

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

В этом уроке мы научимся соединять две Arduino по аппаратной шине UART.

Преимущества:

  • Простота реализации.
  • Дуплексная связь, обе Arduino могут одновременно передавать данные друг другу.

Недостатки:

  • Нет возможности «залить» скетч, при наличии устройств на аппаратной шине UART.
  • Реализуется соединение только двух устройств (при отсутствии доп. модулей).

Нам понадобится:

Для реализации проекта нам необходимо установить библиотеки:

  • Библиотека iarduino_KB (для подключения матричных клавиатур).
  • Библиотека LiquidCrystal_I2C_V112 (для подключения дисплеев LCD1602 по шине I2C).

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki - Установка библиотек в Arduino IDE.

Видео:

Схема подключения:

Подключение LCD дисплея осуществляется к аппаратным выводам шины I2C.
Клавиатура подключается к любым цифровым выводам, в примере используются выводы 2-9.
Соединение двух arduino осуществляется по шине UART:

Arduino 1 Arduino 2
TX (transmit - передать) RX (receive - получить)
RX (receive - получить) TX (transmit - передать)
GND (ground - земля) GND (ground - земля)

Схема соединения двух Arduino Uno по шине UART

Код программы:

// Подключаем библиотеки:
#include <Wire.h>                            // подключаем библиотеку для работы с шиной I2C
#include <LiquidCrystal_I2C.h>               // подключаем библиотеку для работы с LCD дисплеем
#include <iarduino_KB.h>                     // подключаем библиотеку для работы с матричной клавиатурой
// Объявляем переменные и константы:
LiquidCrystal_I2C lcd(0x27,16,2);            // объявляем переменную для работы с LCD дисплеем, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2)
iarduino_KB       KB(9,8,7,6,5,4,3,2);       // объявляем переменную для работы с матричной клавиатурой, указывая номера aeduino подключенные к шлейфу клавиатуры, начиная с первого вывода шлейфа
void setup(){
  Serial.begin(9600);                        // открываем последовательный порт на скорости 9600 бод
  KB.begin(KB1);                             // инициируем клавиатуру (KB1 - эастичная матричная клавиатура 4х4)
  lcd.init();                                // инициируем LCD дисплей
  lcd.backlight();                           // включаем подсветку LCD дисплея
  lcd.setCursor(0, 0);                       // устанавливаем курсор в позицию: столбец 0, строка 0
  lcd.print("iArduino.ru");                  // выводим текст "iArduino.ru"
  lcd.setCursor(0, 1);                       // устанавливаем курсор в позицию: столбец 0, строка 1
  lcd.print("Received data:");               // выводим текст "Received data:"
}
void loop(){
  if(KB.check(KEY_DOWN)){                    // если нажимается кнопка (KEY_DOWN - нажимается, KEY_UP - отпускается, KEY_PRESS - удерживается), то ...
    Serial.print(KB.getChar);                // отправляем символ кнопки в последовательный порт (для вывода цифры кнопки используйте KB.getNum )
  }
  if(Serial.available()>0){                  // если в последовательном порту есть данные для чтения, то ...
    lcd.setCursor(15, 1);                    // устанавливаем курсор в позицию: столбец 15, строка 1
    lcd.print(char(Serial.read()));          // выводим байт данных в виде символа, из последовательного порта на LCD дисплей
  }
}

Скачать

Настройка параметров шины UART:

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

Настройка шины осуществляется вызовом функции begin() класса Serial, с передачей ей до двух аргументов. Первый аргумент устанавливает частоту передачи данных (в примере 9600 бод), второй (необязательный) аргумент устанавливает количество битов, наличие проверки на четность/нечетность, длину стопового бита (по умолчанию SERIAL_8N1).

Допустимые значения второго аргумента функции begin() класса Serial:

  • SERIAL_5N1
  • SERIAL_6N1
  • SERIAL_7N1
  • SERIAL_8N1
  • SERIAL_5N2
  • SERIAL_6N2
  • SERIAL_7N2
  • SERIAL_8N2
  • SERIAL_5E1
  • SERIAL_6E1
  • SERIAL_7E1
  • SERIAL_8E1
  • SERIAL_5E2
  • SERIAL_6E2
  • SERIAL_7E2
  • SERIAL_8E2
  • SERIAL_5O1
  • SERIAL_6O1
  • SERIAL_7O1
  • SERIAL_8O1
  • SERIAL_5O2
  • SERIAL_6O2
  • SERIAL_7O2
  • SERIAL_8O2

Значения отличаются последними тремя символами, которые означают следующее:

  • Первая цифра: указывает количество бит в минимальной посылке (от 5 до 8).
  • Буква N/E/O: E-проверка четности, O-проверка нечетности, N-без проверки.
  • Последняя цифра: указывает длину стопового бита (1 или 2 битовых интервала)

Таким образом значение по умолчанию SERIAL_8N1 означает, что в минимальной посылке 8 бит (без учёта стартового и стопового битов), данные передаются без проверки на чётность/нечётность, длина стопового бита равна 1 битовому интервалу.

Настройки шины UART обеих arduino должны быть идентичны!

Ссылки:




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями