Arduino:Примеры/Receive

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Получение команд[1]

Этот пример демонстрирует, как сделать PC-переключатель светодиода, встроенного в плату Arduino.

Код

// *** Получение команд ***

// Этот пример показывает, как сделать на компьютере переключатель
// светодиода, встроенного в Arduino.
//
// Он демонстрирует, как:
// - определять команды
// - настраивать последовательное соединение
// - получать команды с аргументом от PC  

#include <CmdMessenger.h>  // CmdMessenger

// переменные для мигания светодиодом: 
bool ledState                   = 0;   // текущее состояние светодиода
const int kBlinkLed             = 13;  // контакт для встроенного светодиода

// привязываем экземпляр класса CmdMessenger к последовательному порту:
CmdMessenger cmdMessenger = CmdMessenger(Serial);

// Мы можем задать суммарно до 50 команд, включая и принимаемые, и
// отправляемые, и первые четыре команды, которые задаются по 
// умолчанию и необходимы для устранения общих ошибок. Если вам 
// недостает слотов для сообщений, просто увеличьте значение
// MAXCALLBACKS в CMdMessenger.h
//
// Это список распознаваемых команд, и все эти команды могут быть
// отправлены. Команды, к которым привязаны функции внешнего вызова, // могут быть приняты.
//
// Этот список должен находиться в скетчах по обе стороны соединения,
// причем стороны могут либо отправлять, либо получать команды, либо 
// то и другое вместе.

// Команды:
enum
{
  kSetLed, // команда, запрашивающая переключение светодиода в определенное состояние
};

// функции внешнего вызова, определяющие, при получении каких команд нам нужно начинать действовать: 
void attachCommandCallbacks()
{
  cmdMessenger.attach(kSetLed, OnSetLed);
}

// функция внешнего вызова, включающая/выключающая светодиод:
void OnSetLed()
{
  // считываем присланный аргумент, интерпретируем строку как boolean: 
  ledState = cmdMessenger.readBoolArg();
  // задаем состояние светодиода:
  digitalWrite(kBlinkLed, ledState?HIGH:LOW);
}

// блок исходных операций:
void setup() 
{
  // прослушиваем последовательное соединение на предмет сообщений 
  // от PC; максимальная скорость на Arduino Uno и Mega (c AT8u2 USB)
  // составляет «115200»; для платы Arduino Duemilanove (и других с 
  // FTDI Serial) используйте скорость «57600»:
  Serial.begin(115200); 

  // добавляем к каждой команде символ новой строки:
  cmdMessenger.printLfCr();   

  // подключаем функции внешнего вызова, заданные пользователем: 
  attachCommandCallbacks();

  // режим работы светодиода выставляем на OUTPUT:
  pinMode(kBlinkLed, OUTPUT);
}

// блок повторяющихся операций:
void loop() 
{
  // обрабатываем данные, пришедшие по последовательному соединению,
  // и выполняем функции внешнего вызова:
  cmdMessenger.feedinSerialData();
}

См.также

Внешние ссылки