Данная статья, скорее не урок, а демонстрация возможностей устройств, изученных нами ранее. Речь пойдет о том, как управлять громкостью в Windows 7 (для Xp не актуально) при помощи энкодера, обрабатываемого AVR микроконтроллером.
Нам понадобятся знания из уроков про энкодер и передачу данных по UART. Код обработки энкодера взят из предыдущего урока. Выкинуто все, что касается lcd и добавлена обработка передачи данных по UART. Структурная схема выглядит так:
// USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x33; while (1) { if (upState >= 4) { Vol++; upState = 0; putchar('1'); putchar('\n'); } if (downState >= 4) { Vol--; downState = 0; putchar('0'); putchar('\n'); } }; } |
Из кода видно, что с каждым щелчком энкодера передается 2 символа. Если нужно увеличить громкость передается ‘1’, если уменьшить ‘0’ и признак окончания строки ‘\n’. Окончание строки передается, чтобы со стороны компьютера понимать, что передача строки закончена. Передача данных осуществляется преобразователем UART-USB на микросхеме FTDI, о которой я писал ранее.
Все самое сложное было в написании программы со стороны компьютера. Писал, как обычно, в Visual Studio на C#. С самого начала не везло с примерами. Дело в том, что для Xp рабочих примеров много, для Windows 7 все обстояло немного сложнее.
В конце концов проблема решилась. Долгие поиски привели меня к проекту под названием «Vista Core Audio API Master Volume Control», который представляет собой готовый регулятор звука. Дело осталось за малым, добавил в форму возможность приема данных по UART и все готово.
Результат:
Размышления привели меня к мыслям о различных вариациях. Например, регулировать можно не энкодером, а кнопками. Регулировать можно что угодно, в том числе запуск программ. Можно сделать некое подобие обыкновенной клавиатуры — передавать по UART данные, а прогой имитировать нажатие клавиш. Таким образом, простор для фантазий безграничен.
Проект для Atmega8 доступен здесь, исходники для VS2010 C# доступны тут.
Добавить комментарий