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

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

• использование второго микроконтроллера в качестве адаптера позволило при подключении передавать в компьютер идентификатор производителя и код продукта. Ранее при подключении платы Arduino к компьютеру она определялась

- 123 -

как последовательное устройство. Плата Arduino с адаптером 8U2 и 16U2 определяется компьютером как устройство Arduino;

вспомогательный микроконтроллер можно перепрограммировать ( он работает на прошивке LUF А, которая эмулирует конвертер USB), следовательно, есть возможность изменить прошивку, чтобы плата Arduino определялась, например, как джойстик, клавиатура или MIDI-устройство. При замене прошивки плату Arduino придется программировать через программатор, например AVR ISP MKII.

Вот список плат Arduino со вспомогательным микроконтроллером для преобразования USB в последовательный порт:

• Arduino Uno;

• Arduino Mega 2560;

• Arduino Mega ADK (на основе 2560);

• Arduino Due (эту плату можно запрограммировать непосредственно).

6.4. Платы Arduino с микроконтроллером, снабженным встроенным интерфейсом USB

Плата Arduino Leonardo была первой платой, имеющей только одну микросхему, выполняющую функции и программируемого пользователем микроконтроллера, и интерфейса USB. На плате Arduino Leonardo (и ее клонах) установлен микроконтроллер 32U4, поддерживающий прямую передачу через USB. Это дает несколько преимуществ.

Во-первых, уменьшается стоимость платы, потому что на ней меньше компонентов и короче программа первоначальной загрузки платы. Во-вторых, плата способна эмулировать не только последовательный порт, но и другие устройства (такие как клавиатура, мышь или джойстик). В-третьих, обычный порт USART на ATmega не мультиплексирован с выводами интерфейса USB, поэтому возможен параллельный обмен данными как с главным компьютером, так и с внешним последовательным устройством (таким как модуль GPS).

Вот список плат Arduino, снабженных микроконтроллером со встроенным интерфейсом USB:

• Arduino Due ( ее также можно запрограммировать через вспомогательный микроконтроллер);

• LilyPad Arduino USB;

• Arduino Esplora;

• Arduino Leonardo;

• Arduino Micro.

- 124 -

6.5. Платы Arduino с возможностями USB-хоста


Некоторые платы Arduino обладают возможностями USB-хоста, что позволяет подсоединить к ним традиционные USB-устройства (клавиатуры, мыши, телефоны на базе Android). Естественно, для поддержки этих устройств потребуются дополнительные драйверы. Например, нельзя просто так соединить веб-камеру с Arduino Due и сразу же ожидать получения фотографий. Arduino Due поддерживает класс USB Host, что позволяет подключить к USB-порту клавиатуру или мышь. Arduino Mega ADK поддерживает протокол Android Open Accessory Protocol (АОА), что упрощает обмен данными между Arduino и устройством на базе Android. Прежде всего, это нужно для управления вводом-выводом Arduino из приложения, работающего на устройствах на базе Android.

Возможности USB-хоста поддерживают две платы: Arduino Due и Arduino Mega ADK (на основе Mega 2560).

6.6. Опрос Arduino с компьютера

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

6.6.1. Пример вывода данных

Для вывода данных в терминал существуют три функции:

• Serial.begin (baud_rate);

• Serial.print ( "Message");

• Serial.println ("Message"),

где baud_rate и message- переменные, задаваемые пользователем.

Как вы уже знаете, функция Serial. begin() вызывается один раз в начале программы в setup(), чтобы настроить последовательный порт для связи. После этого можно вызвать функции Serial.print() и serial.println() для передачи данных в последовательный порт. Единственное различие между ними состоит в том, что функция serial.println() добавляет символ перевода в конце строки. Чтобы поэкспериментировать с этими функциями, соберем простую схему, подключив потенциометр к контакту A0 платы Arduino, как показано на рис. 6.6.

После подключения потенциометра загрузите простую программу, приведенную в листинге 6.1, которая выводит показания потенциометра в виде абсолютного значения и в процентах.


Рис. 6.6. Схема подключения потенциометра

Листинг 6.1. Тестовая программа ввода значений потенциомтре в последовательный порт - pot.ino

// Тестовая программа вывода значений потенциометра в последовательный порт

const int POT=0; // Подключение потенциометра к аналоговому входу A0


void setup()

{

Serial.begin(9600); // Инициализация последовательного порта на скорости 9600

}

- 126 -

void loop()

{

int val = analogRead(POT);// Чтение данных с потенциометра

int per = map(val, 0, 1023, 0, 100);// Перевод в процентное значение

Serial.print("Analog Reading: ");

Serial.print(val);// Вывод аналогового значения

Serial.print(" Percentage: ");

Serial.print(per);// Вывод значения в процентах

Serial.println("%");

delay(1000);// Ожидание 1 сек перед получением новых данных