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

Arduino:Примеры/SimpleMessageSystem example 1

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

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

Контакты:

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


Управление функциями Arduino при помощи сообщений

Этот пример показывает, как посредством библиотеки SimpleMessageSystem отправлять на Arduino текстовые команды, с их помощью управляя считыванием и записью значений на контакты Arduino. Отправка команд осуществляется при помощи патча-напарника Processing, установленного на компьютере.

Код

  1. /*
  2.  ---- Пример для SimpleMessageSystem номер 1 ----
  3.  Управление функциями Arduino при помощи сообщений
  4.  
  5.  Список сообщений, которые можно передать Arduino:
  6.  
  7.  r a -> прочесть значения на аналоговых контактах
  8.  r d -> прочесть значения на цифровых контактах
  9.  w d [контакт] [значение] -> записать значение на цифровой контакт
  10.  w a [контакт] [значение] -> записать значение на аналоговый контакт
  11.  
  12.  
  13.  Создан Томасом Оулле Фредериксом (Thomas Ouellet Fredericks),
  14.  модифицирован Алехандре Куэсси (Alexandre Quessy)
  15.  
  16.  */
  17.  
  18. // подключаем библиотеку SimpleMessageSystem,
  19. // ЕСЛИ ИСПОЛЬЗУЕМ WIRING, ЭТУ СТРОЧКУ НУЖНО УДАЛИТЬ:
  20. #include <SimpleMessageSystem.h>
  21.  
  22. void setup()
  23. {
  24.  
  25.   // команда ниже инициирует последовательную коммуникацию
  26.   // на скорости 9600 бод; имейте в виду, что это ОЧЕНЬ МЕДЛЕННО,
  27.   // поэтому, в зависимости от ситуации, эту скорость имеет смысл
  28.   // увеличить; если коммуникация осуществляется через USB, скорость
  29.   // можно поднять до 115200 бод, что в 12 раз быстрее:
  30.   Serial.begin(9600); // скорость 9600 выставлена для совместимости, ПОМЕНЯЙТЕ!
  31.  
  32.  
  33. }
  34.  
  35. void loop()
  36. {
  37.  
  38.   if (messageBuild() > 0) { // проверяем, завершено ли сообщение и стираем все предыдущие сообщения
  39.     switch (messageGetChar()) { // извлекаем первое слово (в виде символа)
  40.     case 'r': // считываем контакты (аналоговые или цифровые)
  41.       readpins(); // вызываем функцию считывания
  42.       break; // прерываем исполнение оператора switch
  43.     case 'w': // записываем на контакты
  44.       writepin(); // вызываем функцию записи
  45.     }
  46.  
  47.   }
  48.  
  49. }
  50.  
  51. void readpins(){ // пользовательская функция для считывания значений с контактов (аналоговых или цифровых)
  52.  
  53.   switch (messageGetChar()) { // извлекаем следующее слово (в виде символа)
  54.  
  55.     case 'd': // считываем цифровые контакты
  56.  
  57.     messageSendChar('d');  // отправляем обратно считанное слово
  58.     for (char i=2;i<14;i++) {
  59.       messageSendInt(digitalRead(i)); // считываем значения с контактов 2-13
  60.     }
  61.     messageEnd(); // завершаем сообщение, которое хотим отправить
  62.     break; // прерываем исполнение оператора switch
  63.  
  64.   case 'a': // считываем аналоговые контакты
  65.  
  66.     messageSendChar('a');  // отправляем обратно считанное слово
  67.     for (char i=0;i<6;i++) {
  68.       messageSendInt(analogRead(i)); // считываем значения с контактов 0-5
  69.     }
  70.     messageEnd(); // завершаем сообщение, которое хотим отправить
  71.  
  72.   }
  73.  
  74. }
  75.  
  76. void writepin() { // пользовательская функция для записи значений на контакты (аналоговые или цифровые)
  77.  
  78.   int pin;
  79.   int state;
  80.  
  81.   switch (messageGetChar()) { // извлекаем следующее слово (в виде символа)
  82.  
  83.     case 'a' : // делаем запись на аналоговый контакт
  84.  
  85.     pin = messageGetInt(); // извлекаем следующее слово (в виде целого числа) и сохраняем его в переменную pin
  86.     state = messageGetInt(); // извлекаем следующее слово (в виде целого числа) и сохраняем его в переменную state
  87.     pinMode(pin, OUTPUT); // выставляем состояние контакта на OUTPUT
  88.     analogWrite(pin, state); // задаем ШИМ контакта
  89.     break;  // прерываем исполнение оператора switch
  90.  
  91.  
  92.     // делаем запись на цифровой контакт
  93.   case 'd' :
  94.  
  95.     pin = messageGetInt();  // извлекаем следующее слово (в виде целого числа) и сохраняем его в переменную pin
  96.     state = messageGetInt();  // извлекаем следующее слово (в виде целого числа) и сохраняем его в переменную state
  97.     pinMode(pin,OUTPUT);  // выставляем состояние контакта на OUTPUT
  98.     digitalWrite(pin,state);  // задаем контакту значение HIGH (1) или LOW (0)
  99.    
  100.  
  101.   }
  102.  
  103. }

См.также

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