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

Материал из Онлайн справочника
Версия от 12:37, 8 июля 2023; EducationBot (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

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


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

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

Код

/* 
 ---- Пример для SimpleMessageSystem номер 1 ----
 Управление функциями Arduino при помощи сообщений
 
 Список сообщений, которые можно передать Arduino:

 r a -> прочесть значения на аналоговых контактах
 r d -> прочесть значения на цифровых контактах
 w d [контакт] [значение] -> записать значение на цифровой контакт 
 w a [контакт] [значение] -> записать значение на аналоговый контакт
 
 
 Создан Томасом Оулле Фредериксом (Thomas Ouellet Fredericks),
 модифицирован Алехандре Куэсси (Alexandre Quessy)
 
 */

// подключаем библиотеку SimpleMessageSystem,
// ЕСЛИ ИСПОЛЬЗУЕМ WIRING, ЭТУ СТРОЧКУ НУЖНО УДАЛИТЬ:
#include <SimpleMessageSystem.h> 

void setup()
{
  
  // команда ниже инициирует последовательную коммуникацию
  // на скорости 9600 бод; имейте в виду, что это ОЧЕНЬ МЕДЛЕННО, 
  // поэтому, в зависимости от ситуации, эту скорость имеет смысл 
  // увеличить; если коммуникация осуществляется через USB, скорость
  // можно поднять до 115200 бод, что в 12 раз быстрее:
  Serial.begin(9600); // скорость 9600 выставлена для совместимости, ПОМЕНЯЙТЕ!


}

void loop()
{

  if (messageBuild() > 0) { // проверяем, завершено ли сообщение и стираем все предыдущие сообщения
    switch (messageGetChar()) { // извлекаем первое слово (в виде символа)
    case 'r': // считываем контакты (аналоговые или цифровые)
      readpins(); // вызываем функцию считывания
      break; // прерываем исполнение оператора switch
    case 'w': // записываем на контакты
      writepin(); // вызываем функцию записи
    }

  }

}

void readpins(){ // пользовательская функция для считывания значений с контактов (аналоговых или цифровых)

  switch (messageGetChar()) { // извлекаем следующее слово (в виде символа)

    case 'd': // считываем цифровые контакты

    messageSendChar('d');  // отправляем обратно считанное слово
    for (char i=2;i<14;i++) {
      messageSendInt(digitalRead(i)); // считываем значения с контактов 2-13
    }
    messageEnd(); // завершаем сообщение, которое хотим отправить
    break; // прерываем исполнение оператора switch

  case 'a': // считываем аналоговые контакты

    messageSendChar('a');  // отправляем обратно считанное слово
    for (char i=0;i<6;i++) {
      messageSendInt(analogRead(i)); // считываем значения с контактов 0-5
    }
    messageEnd(); // завершаем сообщение, которое хотим отправить

  }

}

void writepin() { // пользовательская функция для записи значений на контакты (аналоговые или цифровые)

  int pin;
  int state;

  switch (messageGetChar()) { // извлекаем следующее слово (в виде символа)

    case 'a' : // делаем запись на аналоговый контакт

    pin = messageGetInt(); // извлекаем следующее слово (в виде целого числа) и сохраняем его в переменную pin
    state = messageGetInt(); // извлекаем следующее слово (в виде целого числа) и сохраняем его в переменную state
    pinMode(pin, OUTPUT); // выставляем состояние контакта на OUTPUT
    analogWrite(pin, state); // задаем ШИМ контакта 
    break;  // прерываем исполнение оператора switch


    // делаем запись на цифровой контакт
  case 'd' : 

    pin = messageGetInt();  // извлекаем следующее слово (в виде целого числа) и сохраняем его в переменную pin 
    state = messageGetInt();  // извлекаем следующее слово (в виде целого числа) и сохраняем его в переменную state
    pinMode(pin,OUTPUT);  // выставляем состояние контакта на OUTPUT
    digitalWrite(pin,state);  // задаем контакту значение HIGH (1) или LOW (0)
    

  }

}

См.также

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