Устроен джойстик крайне просто - его ручка связана с двумя потенциометрами (при отклонении ручки сопротивление потенциометров изменяется). Каждый потенциометр соединен с конденсатором, при этом время зарядки конденсатора обратно пропорционально сопротивлению потенциометра. Как только заряд конденсатора достигает заданной пороговой величины, в порту джойстика выставляется соответствующий бит.

Обычно с джойстиком связан порт 20 lh, который в состоянии поддерживать два джойстика одновременно. Рассмотрим роль каждого бита.

Бит

Его значение

Бит

Его значение

Джойстик А ось X

Джойстик А кнопка 1

Джойстик А ось Y

5 .

Джойстик А кнопка 2

Джойстик В ось X

Джойстик В кнопка 1

Джойстик В ось Y

Джойстик В кнопка 2

Биты 0-3 служат для определения координат джойстика, биты 4-7 - для чтения состояния кнопок.

При нажатой кнопке соответствующий бит принимает значение 0, при отпущенной - значение 1. Для чтения позиции джойстика в его порт записывают 0 и находят время до выставления 1 в нужном разряде порта. Так как время обычно измеряют числом итераций цикла, то соответствующее значение будет различным для компьютеров с разным быстродействием. Поэтому программа перед первым использованием джойстика должна произвести его калибровку, т. е. определить, какие значения соответствуют крайним положениям рукоятки джойстика, и затем нормировать все снимаемые с джойстика значения.

Для проверки наличия джойстика в цикле опрашивается в течение определенного времени порт джойстика. Если при этом значения всех битов равны нулю, то можно с уверенностью считать, что джойстик к компьютеру не подключен.

Помимо непосредственного опрашивания порта и определения времени для установления координат джойстика можно использовать BIOS.

Ниже приводятся файлы для работы с джойстиком и пример его использования.

® // File joystick.h
#ifndef __JOYSTICK_ #define _JOYSTICK_
#define JOYPORT 0x201 //joystick port
#define BUTTON_1_A 0x10 //joystick A, button 1
#define BUTTON_2_A 0x20 // joystick A, button 2

⇐ Предыдущая| |Следующая ⇒