Ведомый и ведущий

Пусть одна плата будет отправлять каждые 500мс какие-то данные второй плате. Вторая плата будет их принимать и сигнализировать об этом изменением состояния штатного светодиода на контакте №13 (то есть мигать).

В этой задаче первая плата будет называться ведущей, или по-английски master. А вторая ведомой — то есть slave.

Программа ведущего

Для этого мы используем две функции встроенного объекта Serial:

Serial.begin(9600); // инициализирует UART со скоростью 9600 бод
Serial.write(128); // отправляет в UART один байт данных, например, число 128

Полностью программа ведущего будет выглядеть так.

void setup() {
    Serial.begin(9600); // инициализируем UART со скоростью 9600 бод
}

void loop() {
    Serial.write(1); // отправляем в UART число 1
    delay(500); // ждём 500мс
}

Программа ведомого

Для чтения одного байта данных вызываем функцию read и присваиваем её результат переменной v:

byte v = Serial.read(); // считывает 1 байт из буфера UART

Также нам понадобится функция available(), которая возвращает количество байт принятые узлом UART. Таким образом, мы будем менять состояние светодиода только если в порт что-то пришло.

byte ledPin = 13;
byte ledState = 0;
byte v;

void setup() {
    Serial.begin(9600);
    pinMode( ledPin, OUTPUT );
}

void loop() {
    if( Serial.available() ){
        v = Serial.read(); // считываем один байт из UART
        digitalWrite( ledPin, ledState ); // включаем/выключаем светодиод
        ledState = !ledState; // меняем значение ledState
    }
}

Загружаем программы на платы и подаем питание. Ведомая плата должна начать мигать светодиодом.

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

В следующем примере попробуем передать что-то более полезное, чем просто число 1.

0

Изменено:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.