Джереми Блум - Изучаем Arduino: инструметы и методы технического волшебства
- Название:Изучаем Arduino: инструметы и методы технического волшебства
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2015
- Город:Санкт-Петербург
- ISBN:978-5-9775-3585-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Джереми Блум - Изучаем Arduino: инструметы и методы технического волшебства краткое содержание
Для радиолюбителей
Изучаем Arduino: инструметы и методы технического волшебства - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Serial.println("%");
delay(1000);// Ожидание 1 сек перед получением новых данных
}
Вы также можете передавать различные "специальные" (или управляющие) символы, которые позволяют изменить форматирование последовательных данных при выводе на печать. Управляющий символ начинается с обратного слэша (\), за которым следует символ команды. Есть много специальных символов, но два из них представляют наибольший интерес: табуляция и переход на новую строку. Чтобы вставить символ табуляции, нужно добавить к строке управляющую последовательность \t. Символ перехода на новую строку вставляют, добавляя к строке \n.
Это особенно полезно, если вы хотите перейти на новую строку в начале передаваемой строки, а не в конце, как делает функция serial.println(). Если, по некоторым причинам, вы на самом деле хотите напечатать последовательность символов \n или \t в строке, это можно сделать с помощью последовательностей \\n или \\t, соответственно. Листинг 6.2 представляет собой модификацию листинга 6.1, но с использованием управляющих символов для отображения данных в табличной форме.
Листинг 6.2. Табличная разметка с использованием управляющих символов - pot_tabular.ino
// Табличная разметка с использованием управляющих символов
const int POT=0; // Подключение потенциометра к аналоговому входу A0
void setup()
{
Serial.begin(9600); // Инициализация последовательного порта на скорости 9600
}
void loop()
{
Serial.println("\nAnalog Pin\tRaw Value\tPercentage");
Serial.println("------------------------------------------");
- 127 -
for (int i = 0; i < 10; i++)
{
int val = analogRead(POT);//Чтение данных потенциометра
int per = map(val, 0, 1023, 0, 100);//Перевод в процентное значение
Serial.print("AO\t\t");
Serial.print(val);//Вывод аналогового значения
Serial.print("\t\t");
Serial.print(per);//Вывод процентного значения
Serial.println ( "%");
delay(1000);
//Ожидание 1 сек перед получением новых данных
}
}
При повороте движка потенциометра данные, выдаваемые в последовательный порт, должны выглядеть примерно так, как на рис. 6.7.

Рис. 6. 7. Скриншот терминала последовательного порта с данными в виде таблицы
Функции Serial.print() и Serial.println() позволяют вывести данные в конкретном формате. Есть опции для представления данных в различных форматах, включая шестнадцатеричный, восьмеричной и двоичный. По умолчанию принят деся
- 128 -
тичный формат ASCII. У функций Serial.print() и Serial.println() есть дополнительный второй параметр, который определяет формат выводимых данных.
В табл. 6.1 приведены примеры вывода одинаковых данных (число 23) в различных форматах и их отображения в мониторе последовательного порта.
Таблица 6.1. Тип последовательных данных
Формат |
Код |
Отображение данных |
Decimal |
Serial.println(23); |
23 |
Hexadecimal |
Serial.println(23,HEX); |
17 |
Octal |
Serial.println(23,0CT); |
27 |
Binary |
Serial.println(23,BIN); |
00010111 |
Что хорошего в общении с Arduino, если разговор идет только в одном направлении? Теперь, когда мы разобрались, как Arduino посьшает данные на компьютер, давайте попробуем это сделать. Вы, наверное, заметили, что в окне монитора последовательного порта Arduino IDE сверху есть поле ввода текста, а снизу - раскрывающееся меню (рис. 6.8).

Рис. 6.8. Скриншот терминала последовательного порта с полем ввода текста и выбранной опцией конца строки в раскрывающемся меню
Во-первых, убедитесь, что в раскрывающемся списке выбран пункт Newline. Опция в выпадающем меню определяет, что добавляется к вашим командам при отправке их в Arduino. Примеры в следующих разделах предполагают, что вы выбрали пункт Newline, который только добавляет \n в конец ваших данных, посьшаемых из поля ввода текста в верхней части окна монитора последовательного порта.
- 129 -
В отличие от некоторых других терминальных программ, монитор последовательного порта Arduino IDE при нажатии клавиши или кнопки Отправить посылает всю командную строку. Другие последовательные терминалы, например Putty (www.exploringarduino.com), посылают символы сразу после их ввода.
Запустив монитор последовательного порта Arduino IDE, вы можете вручную отправлять команды в Arduino. Далее рассмотрим, как отправлять последовательности символов и как создать простой графический интерфейс для отправки команд.
У последовательного порта Arduino есть буфер. Другими словами, вы можете отправить несколько байт данных сразу, и Arduino поставит их в очередь и обработает их в том порядке, как задумано в вашей программе. Скорость передачи данных не особенно критична, а вот отправка слишком большого объема данных может вызвать переполнение буфера и потерю информации.
Проще всего заставить плату Arduino реагировать на все, что передано. Для этого плата Arduino должна запоминать, а затем выводить каждый полученный символ.
Чтобы сделать это, потреб ую тся две новые функции:
• Serial.available() - возвращает число символов (или байтов), которые на даый момент сохранены во входном последовательном буфере Arduino. Каждый раз, когда это число отлично от нуля, символ считывается и отправляется обратно на компьютер;
• serial. read() - читает и возвращает следующий символ, который находится в буфере.
Обратите внимание, что каждый вызов к функции Serial. read() возвратит из буфера только один байт, поэтому вы должны повторять эту функцию, пока serial. available() возвращает ненулевое значение. Каждый раз, когда Функция serial. read() получает байт, буфер очищается, и можно принимать следующий байт. Теперь можно загрузить программу из листинга 6.3 на плату Arduino.
Листинг 6.3. Эхо последовательного порта - 'echo.ino
// Эхо каждого символа
char data;
// Текущий входящий символ
void setup()
{
Serial.begin(9600); // Инициализация последовательного порта на скорости 9600
}
- 130 -
void loop()
{
// Вывод только при получении данных
if (Serial.available() > 0)
{
data = Serial.read(); // Чтение байта из буфера
Serial.print(data);// Вывод в последовательный порт
}
}
Запустите монитор последовательного порта и напечатайте что-нибудь в поле ввода текста. Как только вы нажмете кнопку Отправить, все, что вы набрали, вернется назад в компьютер и отобразится в окне монитора последовательного порта. Поскольку в меню выбрана опция Newline, для каждой команды добавляется символ перевода строки (\n), следовательно, каждый ответ отображается с новой строки.
Читать дальшеИнтервал:
Закладка: