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

Arduino:Примеры/Receive

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

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

Контакты:

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


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

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

Код

  1. // *** Получение команд ***
  2.  
  3. // Этот пример показывает, как сделать на компьютере переключатель
  4. // светодиода, встроенного в Arduino.
  5. //
  6. // Он демонстрирует, как:
  7. // - определять команды
  8. // - настраивать последовательное соединение
  9. // - получать команды с аргументом от PC  
  10.  
  11. #include <CmdMessenger.h>  // CmdMessenger
  12.  
  13. // переменные для мигания светодиодом:
  14. bool ledState                   = 0;   // текущее состояние светодиода
  15. const int kBlinkLed             = 13;  // контакт для встроенного светодиода
  16.  
  17. // привязываем экземпляр класса CmdMessenger к последовательному порту:
  18. CmdMessenger cmdMessenger = CmdMessenger(Serial);
  19.  
  20. // Мы можем задать суммарно до 50 команд, включая и принимаемые, и
  21. // отправляемые, и первые четыре команды, которые задаются по
  22. // умолчанию и необходимы для устранения общих ошибок. Если вам
  23. // недостает слотов для сообщений, просто увеличьте значение
  24. // MAXCALLBACKS в CMdMessenger.h
  25. //
  26. // Это список распознаваемых команд, и все эти команды могут быть
  27. // отправлены. Команды, к которым привязаны функции внешнего вызова, // могут быть приняты.
  28. //
  29. // Этот список должен находиться в скетчах по обе стороны соединения,
  30. // причем стороны могут либо отправлять, либо получать команды, либо
  31. // то и другое вместе.
  32.  
  33. // Команды:
  34. enum
  35. {
  36.   kSetLed, // команда, запрашивающая переключение светодиода в определенное состояние
  37. };
  38.  
  39. // функции внешнего вызова, определяющие, при получении каких команд нам нужно начинать действовать:
  40. void attachCommandCallbacks()
  41. {
  42.   cmdMessenger.attach(kSetLed, OnSetLed);
  43. }
  44.  
  45. // функция внешнего вызова, включающая/выключающая светодиод:
  46. void OnSetLed()
  47. {
  48.   // считываем присланный аргумент, интерпретируем строку как boolean:
  49.   ledState = cmdMessenger.readBoolArg();
  50.   // задаем состояние светодиода:
  51.   digitalWrite(kBlinkLed, ledState?HIGH:LOW);
  52. }
  53.  
  54. // блок исходных операций:
  55. void setup()
  56. {
  57.   // прослушиваем последовательное соединение на предмет сообщений
  58.   // от PC; максимальная скорость на Arduino Uno и Mega (c AT8u2 USB)
  59.   // составляет «115200»; для платы Arduino Duemilanove (и других с
  60.   // FTDI Serial) используйте скорость «57600»:
  61.   Serial.begin(115200);
  62.  
  63.   // добавляем к каждой команде символ новой строки:
  64.   cmdMessenger.printLfCr();  
  65.  
  66.   // подключаем функции внешнего вызова, заданные пользователем:
  67.   attachCommandCallbacks();
  68.  
  69.   // режим работы светодиода выставляем на OUTPUT:
  70.   pinMode(kBlinkLed, OUTPUT);
  71. }
  72.  
  73. // блок повторяющихся операций:
  74. void loop()
  75. {
  76.   // обрабатываем данные, пришедшие по последовательному соединению,
  77.   // и выполняем функции внешнего вызова:
  78.   cmdMessenger.feedinSerialData();
  79. }

См.также

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

  1. github.com - Receive.ino