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

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

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


Управление функциями 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 }

См.также

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