Arduino:Примеры/SimpleWatchdog

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

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


Простой сторожевой таймер[1]

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

Код

// *** Простой сторожевой таймер ***

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

#include <CmdMessenger.h>  // CmdMessenger

// встроенный светодиод: 
const int ledPin = 13;

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

// Это список распознаваемых команд, и эти команды могут быть 
// и получаемыми, и отправляемыми. Чтобы получить команду, к этому 
// событию нужно привязать функцию внешнего вызова.
enum
{
    kIdentify,  // команда, используемая, во-первых, для определения 
                // устройства, к которому нужно подключиться, 
                // а во-вторых, для поддержания подключения, если к PC 
                // (через последовательную коммуникацию) подключено 
                // несколько устройств 
    kTurnLedOn, // команда, используемая для включения светодиода 
                // после установления соединения
};

void attachCommandCallbacks()
{
  // подключаем функции внешнего вызова:
  messenger.attach(onUnknownCommand);
  messenger.attach(kIdentify  , onIdentifyRequest);
  messenger.attach(kTurnLedOn , onTurnLedOn);
}

// ------------------  ФУНКЦИИ ВНЕШНЕГО ВЫЗОВА  -----------------------

// эта функция вызывается, когда к присланной команде не привязано никакой функции:
void onUnknownCommand() 
{
}

// функция внешнего вызова, отвечающая за запрос идентификации; она 
// является частью «рукопожатия» при автоматическом подключении:
void onIdentifyRequest()
{
  // здесь мы отсылаем обратно наш идентификатор – убедитесь, что он 
  // соответствует ID в коде C#; чтобы сохранить ID в PROGMEM, 
  // используйте макрос F(); для каждого устройства можно создать 
  // уникальный идентификатор:
  messenger.sendCmd(kIdentify, F("BFAF4176-766E-436A-ADF2-96133C02B03C"));
    
  // вы также можете определить самое первое устройство, на котором 
  // запущен правильный скетч и правильная версия этого скетча:
  //messenger.sendCmd(kIdentify, F("SimpleWatchdog__1_0_1"));
}

// функция внешнего вызова, выполняющая определенные действия:
void onTurnLedOn()
{
  // включаем светодиод (это происходит после подключения):
  digitalWrite(ledPin, HIGH);
}

// ------------------ ГЛАВНАЯ ЧАСТЬ СКЕТЧА ----------------------

// блок исходных операций:
void setup()
{
  // прослушиваем последовательное соединение на предмет сообщений 
  // от PC (115200 – это, как правило, максимальная скорость для 
  // последовательной коммуникации через USB):
  //Serial.begin(115200);
  
  // многие макетные платы с bluetooth (вроде HC-05/HC-06) по 
  // умолчанию работают на скорости 9600. Настройки, указанные ниже,
  // должны этому соответствовать:
  Serial.begin(9600);    
  
  // подключаем функции внешнего вызова, заданные пользователем:
  attachCommandCallbacks();
  
  // устанавливаем цифровой контакт в режим OUTPUT:
  pinMode(ledPin, OUTPUT);
  
  // убеждаемся, что после запуска или сброса светодиод будет выключен:
  digitalWrite(ledPin, LOW);
}

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

См.также

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