Данная статья, скорее не урок, а демонстрация возможностей устройств, изученных нами ранее. Речь пойдет о том, как управлять громкостью в 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# доступны тут.




Добавить комментарий