QT и SDL. Подключение и использование джойстика.

Сегодня, как уже понятно из названия статьи, мы поговорим об использовании джойстиков, об их подключении и обработке приходящих с джойстика сигналов. Для чего это вообще надо? Ну вот, например, хочется нам собрать робота. А как им управлять? Вот как раз для этого можно прикрутить к компьютеру джойстик, написать небольшую программку, а затем передавать сигналы управления микроконтроллеру, установленному в нашем роботе. И это только одно применение, сразу пришедшее в голову ) Короче, штука полезная.

Использование джойстика


Итак, для работы с джойстиком мы будем использовать библиотеку SDL (Simple DirectMedia Layer). Помимо доступа к джойстику эта библиотека может помочь реализовать работу с графическими подсистемами и звуковыми устройствами. Но мы пока остановимся на подключении джойстика )

В качестве среды разработки мы, как и обычно, будем использовать QT Creator. И теперь, для начала, нам нужно скачать библиотеку SDL. Заходим вот сюда и в самом низу находим раздел Development Libraries. Нас интересует Win32 и Mingw32. Качаем!

Распаковываем куда-нибудь скачанный архив и можно переходить к написанию программы. НО! Для начала нужно зайти в архиве с библиотекой SDL в папку bin и скопировать оттуда файл SDL.dll. А запихать этот файл нужно в папку куда установлен QT Creator, вот по такому пути:

QtSDK/Desktop/Qt/4.8.1/mingw/bin

Готово!

Теперь создаем новый пустой проект. Мы уже почти готовы переходить к написанию программы, но еще надо немного подредактировать .pro файл созданного проекта, а именно, добавить строки:

INCLUDEPATH += C:/SDL-1.2.15/SDL-1.2.15/include/SDL
LIBS += -lSDL

Все приготовления завершены, давайте сваяем маленький примерчик, просто, чтобы убедиться, что все работает как надо. Подключим джойстик, у меня вот примерно такой:
Подключение джойстика
Сделаем так, чтобы приложение считывало данные о текущем положении «рычага» джойстика, ну и наглядно выводило эти данные.

// Подключаем SDL
#include 
// main определена и в SDL и в QT, поэтому #undef
#undef main
#include <QtCore/QDebug>
 
QT_USE_NAMESPACE
 
int main(int argc, char *argv[])
{
    // Переменная для нашего джойстика
    SDL_Joystick *joy;   
    SDL_Event event;
 
    // Инициализация SDL для использования джойстика
    SDL_Init(SDL_INIT_JOYSTICK);
    // Включаем
    SDL_JoystickEventState(SDL_ENABLE);
    // Открываем ;)
    joy = SDL_JoystickOpen(0);
 
    while(1)
    {
        // Примитивнейшая задержка
        unsigned int j = 0;
        for (j = 0; j < 60000; j++);
 
        SDL_PollEvent(&event);
 
        // Получаем значения, соответствующие смещению джойстика
        // по оси Х
        int xAxis = SDL_JoystickGetAxis(joy, 0);
        // по оси Y
        int yAxis = SDL_JoystickGetAxis(joy, 1);
 
        // Выводим
        qDebug() << xAxis << yAxis;
    }
}

В зависимости от положения «рычага» джойстика возвращаемые значения могут изменяться от -32768 до 32767 для каждой оси. Это и видим с помощью нашего приложения. При перемещении рычага видим как меняются в реальном времени значения, возвращаемые приложением )
Библиотека SDL
Вот так вот получилось кратко, но я надеюсь, информативно ) Немного разобрались с джойстиками, наверное, в будущем еще не раз к этому вернемся, а на сегодня это все, до новых встреч!

Понравилась статья? Поделись с друзьями!

QT и SDL. Подключение и использование джойстика.: 7 комментариев
  1. Добавил библиотеку, как описано в статье. Не помпилируется. Выдает ошибку «:-1: ошибка: cannot find -lSDL»

    • Попробуй файлы libSDL.dll.a, libSDL.la, libSDLmain.a из папки с SDL ( там они в папке lib) скопировать в QT/Desktop/Qt/4.8.1/mingw/lib

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *