Изучаем Arduino: инструметы и методы технического волшебства - [31]

Шрифт
Интервал

}

6.6.2. Использование специальных символов

Вы также можете передавать различные "специальные" (или управляющие) символы, которые позволяют изменить форматирование последовательных данных при выводе на печать. Управляющий символ начинается с обратного слэша (\), за которым следует символ команды. Есть много специальных символов, но два из них представляют наибольший интерес: табуляция и переход на новую строку. Чтобы вставить символ табуляции, нужно добавить к строке управляющую последовательность \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. Скриншот терминала последовательного порта с данными в виде таблицы

6.6.3. Изменение представлений типа данных

Функции 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


6.6.4. Общение с Arduino

Что хорошего в общении с Arduino, если разговор идет только в одном направлении? Теперь, когда мы разобрались, как Arduino посьшает данные на компьютер, давайте попробуем это сделать. Вы, наверное, заметили, что в окне монитора последовательного порта Arduino IDE сверху есть поле ввода текста, а снизу - раскрывающееся меню (рис. 6.8).

Рис. 6.8. Скриншот терминала последовательного порта с полем ввода текста и выбранной опцией конца строки в раскрывающемся меню

Во-первых, убедитесь, что в раскрывающемся списке выбран пункт Newline. Опция в выпадающем меню определяет, что добавляется к вашим командам при отправке их в Arduino. Примеры в следующих разделах предполагают, что вы выбрали пункт Newline, который только добавляет \n в конец ваших данных, посьшаемых из поля ввода текста в верхней части окна монитора последовательного порта.

- 129 -

В отличие от некоторых других терминальных программ, монитор последовательного порта Arduino IDE при нажатии клавиши или кнопки Отправить посылает всю командную строку. Другие последовательные терминалы, например Putty (www.exploringarduino.com), посылают символы сразу после их ввода.

6.6.5. Чтение информации из компьютера или другого последовательного устройства

Запустив монитор последовательного порта Arduino IDE, вы можете вручную отправлять команды в Arduino. Далее рассмотрим, как отправлять последовательности символов и как создать простой графический интерфейс для отправки команд.

У последовательного порта Arduino есть буфер. Другими словами, вы можете отправить несколько байт данных сразу, и Arduino поставит их в очередь и обработает их в том порядке, как задумано в вашей программе. Скорость передачи данных не особенно критична, а вот отправка слишком большого объема данных может вызвать переполнение буфера и потерю информации.

Плата Arduino в качестве транслятора данных

Проще всего заставить плату Arduino реагировать на все, что передано. Для этого плата Arduino должна запоминать, а затем выводить каждый полученный символ.

Чтобы сделать это, потреб ую тся две новые функции:

• Serial.available() - возвращает число символов (или байтов), которые на даый момент сохранены во входном последовательном буфере Arduino. Каждый раз, когда это число отлично от нуля, символ считывается и отправляется обратно на компьютер;