Arduino:Примеры/SimpleMessageSystem example 1
Перейти к навигации
Перейти к поиску
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин (Cubewriter) Контакты:</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 }
См.также
Внешние ссылки