c++ - usar - Cómo detener el bucle usando la entrada de caracteres sin detener el bucle
como usar stop en arduino (1)
Esta pregunta ya tiene una respuesta aquí:
- C entrada de teclado sin bloqueo 10 respuestas
Buen día,
Estoy tratando de crear un programa que obtenga datos de orientación de los sensores y luego los use en un algoritmo de control PID para crear las señales de PWM correspondientes. Me gustaría poder detener el programa presionando Enter. Intenté usar la llave de espera de opencv (); sin embargo, no acepta mis entradas de teclado. También probé cin.get (); pero hace una pausa en mi ciclo lo que crea un problema. Mi pwm no se actualiza una vez que el quadcopter cambia de orientación. Intenté investigar otros métodos, pero no pude hacer que funcionaran. Aquí hay una muestra de mi código usando los dos métodos mencionados anteriormente.
Usando cin.get ():
using namespace std;
int main(void){
while(1){
/* get orientation data */
/* output corresponding pwm */
//Press enter to stop loop
if(cin.get() == ''/n''){
/* Stop Pwm */
break;
}
}
return 0;
}
Usando waitKey ();
using namespace std;
using namespace cv;
int main(void){
while(1){
/* get orientation data */
/* output corresponding pwm */
//Press ESC to stop loop
int key = waitKey(33){
if(key == 27){
/* Stop Pwm */
break;
}
}
return 0;
}
Necesita una forma de consultar el estado actual del teclado, que C ++ no proporciona de forma nativa. En el pasado, he usado SDL para esta cosa exacta. Me gusta SDL porque es de naturaleza simplista, y está escrito completamente en C. Hay un ejemplo en la wiki de SDL que demuestra la detección del estado del teclado que le permite detectar si un botón se mantiene presionado.
Editar: SDL se puede poner en un Raspbian Pi. Encontré una configuración de ejemplo aquí