Изучаем 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.
Для вывода данных в терминал существуют три функции:
• 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 сек перед получением новых данных