Джереми Блум - Изучаем Arduino: инструметы и методы технического волшебства
- Название:Изучаем Arduino: инструметы и методы технического волшебства
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2015
- Город:Санкт-Петербург
- ISBN:978-5-9775-3585-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Джереми Блум - Изучаем Arduino: инструметы и методы технического волшебства краткое содержание
Для радиолюбителей
Изучаем Arduino: инструметы и методы технического волшебства - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
В этом примере реализованы две новые функции для эмулятора клавиатуры:
Keyboard.press() И Keyboard.releaseAll(). Запуск Keyboard.press() эквивалентен удержанию клавиши нажатой. Если вы хотите сэмулировать нажатие клавиш и , запустите Keyboard.press() для каждой клавиши. Выдержав паузу, вызовите функцию Keyboard. releaseAll(), чтобы завершить нажатие комбинации клавиш. Список специальных клавиш можно найти на сайте http://arduino.cc/en/Reference/KeyboardModifiers.
С помощью двухкоординатного джойстика и нескольких кнопок можно превратить плату Arduino Leonardo в мышь. Джойстик будет перемещать курсор мыши, а кнопки будут выполнять функции левой, средней и правой кнопок мыши. Как и для клавиатуры, в языке Arduino есть много встроенных функций, позволяющих реализовать функциональность мыши.
Сначала соберите схему с джойстиком и кнопками, как показано на рис. 6.17. Не забывайте, что кнопки нужно снабдить подтягивающими резисторами. Джойстик подключается к аналоговым выводам 0 и 1. Джойстики содержат два потенциометра, присоединенные к рукоятке. При перемещении рукоятки джойстика в направлении х меняется сопротивление одного из потенциометров, в направлении у другого.
На рис. 6.17 изображен джойстик SparkFun, но подойдет любой (в демонстрациоом видеоклипе показан джойстик Parallax). В зависимости от типа джойстика, возможно, потребуется скорректировать диапазон значений функцией map() или поменять х и у в коде программы.
Собрав схему, можно загрузить программу на плату Leonardo. Скопируйте и запустите код листинга 6.1 1 и поуправляйте курсором с помощью джойстика и кнопок; курсор на экране компьютера должен реагировать соответствующим образом.
- 149 -

Рис. 6.17. Схема мыши на основе джойстика и платы Leonardo
Листинг 6.11. Программа управления курсором мыши для Leonardo - mouse.ino
// Создаем мышь !
const int LEFT_BUTTON=4;//Вход для левой кнопки мыши
const int MIDDLE_BUTTON=3;//Вход ДЛЯ средней кнопки мыши
const int RIGHT_BUTTON =2;//Вход для правой кнопки мыши
const int X_AXIS=0;//Аналоговый вход для оси х джойстика
const int Y_AXIS=1;//Аналоговый вход для оси у джойстика
void setup()
{
- 150 -
Mouse.begin();
}
void loop()
{
int xVal=readJoystick(X_AXIS);//Получить отклонение джойстика по оси х
int yVal = readJoystick(Y_AXIS);//Получить отклонение джойстика по оси у
Mouse.move(xVal, yVal, 0);//Перемещаем мышь
readButton(LEFT_BUTTON, MOUSE_LEFT);// Чтение состояния левой кнопки
readButton(MIDDLE_BUTTON, MOUSE_MIDDLE);//Чтение состояния средней кнопки
readButton(RIGHT_BUTTON, MOUSE_RIGHT); //Чтение состояния правой кнопки
delay(5);
}
int readJoystick(int axis)// Чтение значения джойстика, масштабирование
{
int val = analogRead(axis);
// Чтение аналогового значения
val = map(val, 0, 1023, -10, 10); // Масштабирование значения
if (val <= 2 && val >= -2)
// Убрать дрейф мыши
return 0;
else// Вернуть значение
return val;
}
// Чтение состояния кнопок и отправка команд мыши
void readButton(int pin, char mouseCommand)
{
// Если кнопка нажата, эмулируем нажатие, если она еще не быпа нажата
if (digitalRead(pin) == HIGH)
{
if ( ! Mouse.isPressed (mouseCommand) )
{
Mouse.press(mouseCommand);
}
}
// Отпустить нажатие мыши
else
{
if (Mouse.isPressed(mouseCommand))
- 151 -
{
Mouse.release(mouseCommand);
}
}
}
Это, безусловно, один из наиболее сложных примеров из всех, рассмотренных до сих пор. Подробно разберем его, чтобы понять новые функции и ход выполнения программы.
В начале программы определены контакты для подключения кнопок и джойстика, в функции setup() подключена библиотека эмулятора мыши. В цикле loop() непрерывно опрашиваются контакты джойстика и выдаются значения для движения курсора мыши. Контакты кнопок также проверяются и при нажатии кнопки сигнал передается в компьютер.
Функция readJoystick() считывает и масштабирует значения от джойстика. По каждой координате джойстик выдает ряд значений от 0 до 1024, полученных от АЦП.
Но курсор мыши перемещается по относительным координатам и передача Mouse.move() нулевого значения соответствует отсутствию движения по этой оси.
Передача положительного значения для оси х будет перемещать курсор мыши вправо, а отрицательного - влево. Чем больше величина, тем дальше будет перемещаться курсор. Таким образом, в функции readJoystick() значения от 0 до 1023 масштабируем к диапазону от -10 до 10.
Для устранения дрейфа предусмотрен небольшой запас в районе нуля, где курсор мыши должен быть неподвижен. Это связано с тем, что во время нахождения рукоятки джойстика в среднем положении фактическое значение может колебаться вокруг 512. Мы должны быть уверены, что при отпускании джойстика курсор мыши не будет двигаться самопроизвольно. Значения х и у передаются функции mouse.move(), что приводит к перемещению курсора на экране. Третий аргумент функции mouse.move() определяет движение колеса прокрутки.
Функция readButton() служит для определения состояния каждой из трех кнопок.
Функция определяет текущее состояние мыши с помощью команды mouse.isPressed() и опрашивает мышь через функции Mouse.press() и Mouse.release().
ПРИМЕЧАНИЕ
Демонстрационный видеоклип эмулятора мыши для управления компьютером с помощью джойстика можно посмотреть на странице http://www.exploringarduino.com/content/ch6.
Резюме
• Как подключить плату Arduino к компьютеру через USB-преобразователь последовательного порта.
- 152 -
• Как осуществляется преобразование USB-интерфейса в последовательный порт на различных платах Arduino.
• Как можно отправлять данные с Arduino в компьютер через USB-интерфейс.
• Как форматировать отправляемые данные с помощью специальных символов.
• Что последовательные данные передаются в виде символа, который можно преобразовать в целые числа различными способами.
• Как отправлять данные в виде списков с разделителями-запятыми и преобразовывать их в команды с помощью встроенных функций.
• Как можно передать данные из Arduino внешнему приложению на языке Processing.
• Что можно отправлять данные из Processing-приложения на периферийные устройства, подключенные к Arduino.
• Что плата Arduino Leonardo может эмулировать клавиатуру и мышь.
Глава 7. Сдвиговые регистры
Для повторения примеров главы вам понадобятся следующие детали:
• плата Arduino Uno;
• USB-кабель А - В (для Uno );
• 8 красных светодиодов;
• 3 желтых светодиода;
• 5 зеленых светодиодов;
• 8 резисторов номиналом 220 Ом;
• сдвиговый регистр SN74HC595N в DIP-корпусе;
• инфракрасный датчик расстояния GP2YOA41 SKOF с кабелем;
• перемычки;
• макетная плата.
На странице http://www.exploringarduino.com/content/ch7 можно загрузить программный код, видеоуроки и другие материалы для данной главы. Кроме того, листинги примеров можно скачать со страницы www.wiley.com/go/exploringarduino в разделе Downloads.
Читать дальшеИнтервал:
Закладка: