Arduino:Примеры/SimpleWatchdog

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

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


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

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

Код

  1 // *** Простой сторожевой таймер ***
  2 
  3 // Этот пример показывает, как настроить автоматическое соединение 
  4 // между PC и Arduino.
  5 //
  6 // Он демонстрирует, как: 
  7 // - отвечать за запрос подключения от PC
  8 // - использовать идентификатор для «рукопожатия»
  9 
 10 #include <CmdMessenger.h>  // CmdMessenger
 11 
 12 // встроенный светодиод: 
 13 const int ledPin = 13;
 14 
 15 // привязываем экземпляр класса CmdMessenger к последовательному порту:
 16 CmdMessenger messenger(Serial);
 17 
 18 // Это список распознаваемых команд, и эти команды могут быть 
 19 // и получаемыми, и отправляемыми. Чтобы получить команду, к этому 
 20 // событию нужно привязать функцию внешнего вызова.
 21 enum
 22 {
 23     kIdentify,  // команда, используемая, во-первых, для определения 
 24                 // устройства, к которому нужно подключиться, 
 25                 // а во-вторых, для поддержания подключения, если к PC 
 26                 // (через последовательную коммуникацию) подключено 
 27                 // несколько устройств 
 28     kTurnLedOn, // команда, используемая для включения светодиода 
 29                 // после установления соединения
 30 };
 31 
 32 void attachCommandCallbacks()
 33 {
 34   // подключаем функции внешнего вызова:
 35   messenger.attach(onUnknownCommand);
 36   messenger.attach(kIdentify  , onIdentifyRequest);
 37   messenger.attach(kTurnLedOn , onTurnLedOn);
 38 }
 39 
 40 // ------------------  ФУНКЦИИ ВНЕШНЕГО ВЫЗОВА  -----------------------
 41 
 42 // эта функция вызывается, когда к присланной команде не привязано никакой функции:
 43 void onUnknownCommand() 
 44 {
 45 }
 46 
 47 // функция внешнего вызова, отвечающая за запрос идентификации; она 
 48 // является частью «рукопожатия» при автоматическом подключении:
 49 void onIdentifyRequest()
 50 {
 51   // здесь мы отсылаем обратно наш идентификатор – убедитесь, что он 
 52   // соответствует ID в коде C#; чтобы сохранить ID в PROGMEM, 
 53   // используйте макрос F(); для каждого устройства можно создать 
 54   // уникальный идентификатор:
 55   messenger.sendCmd(kIdentify, F("BFAF4176-766E-436A-ADF2-96133C02B03C"));
 56     
 57   // вы также можете определить самое первое устройство, на котором 
 58   // запущен правильный скетч и правильная версия этого скетча:
 59   //messenger.sendCmd(kIdentify, F("SimpleWatchdog__1_0_1"));
 60 }
 61 
 62 // функция внешнего вызова, выполняющая определенные действия:
 63 void onTurnLedOn()
 64 {
 65   // включаем светодиод (это происходит после подключения):
 66   digitalWrite(ledPin, HIGH);
 67 }
 68 
 69 // ------------------ ГЛАВНАЯ ЧАСТЬ СКЕТЧА ----------------------
 70 
 71 // блок исходных операций:
 72 void setup()
 73 {
 74   // прослушиваем последовательное соединение на предмет сообщений 
 75   // от PC (115200 – это, как правило, максимальная скорость для 
 76   // последовательной коммуникации через USB):
 77   //Serial.begin(115200);
 78   
 79   // многие макетные платы с bluetooth (вроде HC-05/HC-06) по 
 80   // умолчанию работают на скорости 9600. Настройки, указанные ниже,
 81   // должны этому соответствовать:
 82   Serial.begin(9600);    
 83   
 84   // подключаем функции внешнего вызова, заданные пользователем:
 85   attachCommandCallbacks();
 86   
 87   // устанавливаем цифровой контакт в режим OUTPUT:
 88   pinMode(ledPin, OUTPUT);
 89   
 90   // убеждаемся, что после запуска или сброса светодиод будет выключен:
 91   digitalWrite(ledPin, LOW);
 92 }
 93 
 94 // блок повторяющихся операций:
 95 void loop()
 96 {
 97   // обрабатываем данные, пришедшие по последовательному соединению,
 98   // и выполняем функции внешнего вызова:
 99     messenger.feedinSerialData();
100 }

См.также

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