Я долго искал, и мне не удалось найти какой-либо способ получить клавиши ввода моей клавиатуры, чтобы использовать их в моей программе ...
Context: I ' Я начинаю с робототехники и C ++, и я просто хотел бы командовать мотором. Идея состоит в том, что «если я нажимаю стрелку вверх, двигатель вращается, если я нажимаю стрелку вниз, двигатель останавливается» и все, не нужно проверять что-то или что-то в этом роде ...
I Я с Rasbian, через VN C (управление с моего реального компьютера), и фактический код выполняется в терминале.
Я посмотрю позже, чтобы сделать это более сложным.
Я просмотрел 20 и более страниц и не нашел ничего полезного ... Разве нет простого способа сделать что-то, что кажется настолько полезным?
Некоторые говорили о библиотеке conio, но, видимо, она устарела curses / ncurses занял свое место, но я не смог найти / заставить что-то работать ... http://www.cplusplus.com/forum/general/74211/
Создать функцию для проверки нажатия клавиш в unix с помощью ncurses
Захватывать символы со стандартного ввода без ожидания нажатия клавиши ввода
Это, очевидно, код C, а не C ++, Более того, я не очень понимаю, что ... Как обнаруживать нажатия клавиш в программе Linux C GUI без запроса пользователя?
Это, может быть? Но это не имеет смысла для меня (новичок в C ++) Как я могу получить состояние клавиатуры в Linux?
здесь они говорят о "allegro", но, видимо, это не так пока не работаю на PI 45 ... и не знаю, как его установить в любом случае http://www.cplusplus.com/forum/general/47357/
Кто-нибудь знает простой маленький код, который я могу скопировать, чтобы сделать это, или как? Я очень шокирован, что у меня нет ничего похожего на windows C ++ программирование, где это кажется таким простым
Я имею в виду что-то вроде "Keyboard.GetKeyStates (Key)"
Я продолжу свой В любом случае, но, пожалуйста, помогите!
РЕДАКТИРОВАТЬ:
Очевидно, библиотека SDL (SDL2) может помочь мне сделать это ... Я пытался реализовать это, это не дает никакого результата ...
Вот код, который я получил до сих пор (я удалил большую часть, которая здесь бесполезна), по сути, это копия прошлого из inte rnet Официальная веб-страница SDL:
#include <iostream>
#include <wiringPi.h> //Raspberry pi GPIO Library
#include <cstdio>
#include <csignal>
#include <ctime>
#include <chrono> //library for counting time
#include <thread> //for "this thread sleep"
#include <SDL2/SDL.h> //for getting the keyboard buttons events
bool RUNNING = true; // global flag used to exit from the main loop
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
GPIO Pins definition
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
int SPser = 13, SPclk = 19, SPrclk = 26; //Define the output pins used
int Optocoupler = 17; //define the input pins used
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SDL definition
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
//void PrintKeyInfo( SDL_KeyboardEvent *key );
//void PrintModifiers( SDLMod mod );
//SOME CODE
// Callback handler if CTRL-C signal is detected
void my_handler(int s) {
std::cout << "Detected CTRL-C signal no. " << s << '\n';
RUNNING = false;
}
//###################################################################################
int main(int argc, char *args[]) {
// Initialize wiringPi and allow the use of BCM pin numbering
wiringPiSetupGpio();
//Initialize SDL
if (SDL_Init(SDL_INIT_EVENTS) != 0) {
SDL_Log("Unable to initialize SDL: %s", SDL_GetError());
return 1;
}
else
{
SDL_Log("SDL initialized");
}
SDL_Event event;
// Register a callback function to be called if the user presses CTRL-C
std::signal(SIGINT, my_handler);
while(RUNNING)
{
while( SDL_PollEvent( &event ) )
{
std::cout << "SDL While \n" << '\n';
//When the user presses a key
switch( event.type )
{
case SDL_KEYDOWN:
std::cout << "Key press detected \n" << '\n';
//printf( "Key press detected\n" );
break;
case SDL_KEYUP:
std::cout << "Key release detected \n" << '\n';
//printf( "Key release detected\n" );
break;
default:
break;
}
}
//std::cout << "Works??" << '\n';
/*for( i = 0; i <= 15; i++ )
{
//std::cout << "data input i =" << i << '\n';
if (i==0){
//std::cout << "if array " << i << '\n';
DataArr[i]=1;
DataArr[15]=0;
}
else{
j=i-1;
DataArr[j]=0;
DataArr[i]=1;
//std::cout << "in else i" << i << " and j " << j << '\n';
}
SendData(DataArr);
}*/
}
std::cout << "Program ended ...\n";
}
Поскольку я следовал "тупому" руководству, это должно работать, но пока l oop никогда не вводится как "std :: cout <<" SDL While \ n "<< '\ n';" никогда не показывается ... </p>
Но, как это удается для компиляции, я думаю, библиотека SDL была установлена правильно и все работает ...
При выполнении кода он пишет "SDL инициализирован ", тогда ничего ... нажатие клавиш ничего не делает
Я все еще не уверен, как проверить, правильно ли установлена библиотека, но когда я набираю в командной строке de" sudo apt-get install libsdl2- dev ", он показывает несколько строк и говорит" 0 обновлено, 0 вновь установлено, 0 удалено и 0 не обновлено "