Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/SimpleWatchdog

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

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


Простой сторожевой таймер[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. }

См.также

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

  1. github.com - SimpleWatchdog.ino