我已经搜索了一段时间,但没有找到任何方法来获取键盘的输入键,以便在程序中使用它们...
上下文:我开始使用机器人技术和C ++,我只是想命令电动机。这个想法是“如果我按下向上箭头,电动机转动,如果我按下向下箭头,电动机停止”,就是这样,不需要验证诸如此类的东西...
我通过VNC(由我的真实计算机控制)使用raspbian,并且实际代码在终端中执行。
我将在后面看到,使其变得更加复杂。
我浏览了20页或更多页面,但没有发现任何有用的信息……难道没有一种简单的方法来完成看上去如此有用的事情吗?
有人谈到了conio库,但是显然它已经过时了,curses / ncurses取代了它,但是我没有找到/有任何可用的方法...http://www.cplusplus.com/forum/general/74211/
Create a function to check for key press in unix using ncurses
Capture characters from standard input without waiting for enter to be pressed
而且,这显然是C代码,而不是C ++,我不太明白...How to detect key presses in a Linux C GUI program without prompting the user?
也许吧?但这对我来说没有任何意义(C ++初学者)How can I get the keyboard state in Linux?
这里他们说的是“ allegro”,但显然,它在PI 45上还不起作用...而且也不知道如何安装它http://www.cplusplus.com/forum/general/47357/
有人知道我可以复制粘贴的简单代码还是以任何方式?我很震惊,没有像Windows C ++编程那么简单的东西]
我的意思是类似“ Keyboard.GetKeyStates(Key)”
无论如何,我将继续我的研究,但请帮助!
编辑:
显然,库SDL(SDL2)可以帮助我做到这一点...我试图实现它,但没有得到任何结果...
这是我到目前为止所掌握的代码(基本上,我删除了这里没有用的大部分),基本上,这是来自Internet 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";
}
当我按照本教程“笨拙地”进行操作时,这应该可以工作,但是while循环永远不会输入为“ std :: cout <
但是,当编译完成时,我猜正确安装了SDL库,一切正常...
[执行代码时,它会写“ SDL初始化”,然后,什么都没有...按任何键都不会执行]]
我仍然不确定如何检查该库是否正确安装,但是当我在命令提示符下输入“ sudo apt-get install libsdl2-dev”时,它显示几行并显示“ 0升级,0新已安装,0删除而0未升级“
我已经搜索了一段时间,但没有找到任何方法来获取键盘的输入键,也无法在程序中使用它们...上下文:我正在研究机器人技术和C ++ ,而我只是...
如果您使用的是Linux,则应使用termios停止缓冲