• Jueves 14 de Noviembre de 2024, 17:04

Autor Tema:  Leer de teclado  (Leído 1659 veces)

Zakro

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Leer de teclado
« en: Lunes 28 de Febrero de 2011, 18:10 »
0
Hola, tengo un pequeño problema: estoy haciendo un programa que se comunica con el puerto serie; para ello envía una instrucción que se le introduce por teclado. El caso es que cuando llega a la lectura de teclado pasa una de estas dos cosas:

1- Si no hay nada en el puerto serie, lee de teclado con normalidad.
2- Si tengo conectado al puerto serie ( en este caso es un sensor de posicion, que manda datos continuamente), se salta la linea en la que tiene que leer por teclado y el programa termina.

Mi impresión es que está leyendo del puerto serie en vez de por teclado; pero uso "cin" que si no estoy equivocado lee por teclado,¿no?

Código: C++
  1. #include <iostream>
  2. #include <SerialPort.h>
  3. #include <unistd.h>
  4.  
  5. //g++ -lserial -o pruebaPuerto pruebaPuerto.cpp
  6.  
  7. using namespace std;
  8.  
  9. string entrada;
  10.  
  11. int main(int argc, char **argv)
  12. {
  13.     //Error si param < 2
  14.     if (argc<2) {
  15.             cerr << "Falta el puerto serie a abrir" << endl;
  16.             return 1;
  17.     }
  18.     //Se crea el puerto serie
  19.     SerialPort puerto(argv[1]);
  20.     try {
  21.         //Se abre el puerto
  22.         puerto.Open(SerialPort::BAUD_115200,
  23.                 SerialPort::CHAR_SIZE_8,
  24.                 SerialPort::PARITY_NONE,
  25.                 SerialPort::STOP_BITS_1,
  26.                 SerialPort::FLOW_CONTROL_NONE);
  27.     }
  28.     //Error al abrir el puerto
  29.     catch (SerialPort::OpenFailed E) {
  30.         cerr << "Error abriendo el puerto" << endl;
  31.         return 1;
  32.     }
  33.     //Se lee por pantalla el parametro a enviar
  34.     cout << "Puerto abierto con éxito" << endl;
  35.     cout << "Escribe lo que quieres enviar" << endl;
  36.     cin >> entrada;
  37.     //Se manda el parametro por el puerto
  38.     puerto.Write(entrada);
  39.     puerto.Close;
  40. }
  41.  

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Leer de teclado
« Respuesta #1 en: Martes 1 de Marzo de 2011, 16:03 »
0
cin lee de la entrada estándar definida por el SO, no del teclado (aunque normalmente y por defecto el teclado es la entrada estándar), y puede ser modificada para apuntar a cualquier flujo de datos. Lo mismo pasa con cout.

Zakro

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Leer de teclado
« Respuesta #2 en: Martes 1 de Marzo de 2011, 21:17 »
0
¿Entonces tengo que hacer algo para que lea de teclado? Porque no estoy cambiando el comportamiento por defecto en ningún lado,¿no?

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Leer de teclado
« Respuesta #3 en: Miércoles 2 de Marzo de 2011, 00:00 »
0
Debería leer del teclado. ¿Lo has depurado a ver?