• Jueves 14 de Noviembre de 2024, 23:24

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - Zakro

Páginas: [1]
1
C/C++ / Leer de teclado
« en: Lunes 28 de Febrero de 2011, 18:10 »
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.  

2
C/C++ / Problema con SerialPort.h
« en: Viernes 18 de Febrero de 2011, 14:00 »
Hola, estoy haciendo un pequeño programa para comunicarme a través del puerto serie en Ubuntu. El problema es que aunque hago un include de SerialPort.h parece que el compilador no lo encuentra.

Ejecuto: g++ PruebaPuerto.cpp y la salida del compilador es:

/tmp/cc8wej22.o: In function `main':
PruebaPuerto.cpp:(.text+0x7b): undefined reference to `SerialPort::SerialPort(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
PruebaPuerto.cpp:(.text+0xdf): undefined reference to `SerialPort::Open(SerialPort::BaudRate, SerialPort::CharacterSize, SerialPort::Parity, SerialPort::StopBits, SerialPort::FlowControl)'
PruebaPuerto.cpp:(.text+0xf3): undefined reference to `SerialPort::~SerialPort()'
PruebaPuerto.cpp:(.text+0x209): undefined reference to `SerialPort::Write(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
PruebaPuerto.cpp:(.text+0x241): undefined reference to `SerialPort::Read(std::vector<unsigned char, std::allocator<unsigned char> >&, unsigned int, unsigned int)'
PruebaPuerto.cpp:(.text+0x348): undefined reference to `SerialPort::Close()'
PruebaPuerto.cpp:(.text+0x395): undefined reference to `SerialPort::~SerialPort()'
PruebaPuerto.cpp:(.text+0x3ab): undefined reference to `SerialPort::~SerialPort()'
collect2: ld returned 1 exit status

El código del programa es:

Código: C++
  1. #include <iostream>
  2. #include <SerialPort.h>
  3.  
  4. using namespace std;
  5.  
  6. string entrada = "";
  7.  
  8. int main(int argc, char **argv)
  9. {
  10.     if (argc<2) {
  11.             cerr << "Falta el puerto serie a abrir" << endl;
  12.             return 1;
  13.     }
  14.     SerialPort puerto(argv[1]);
  15.     try {
  16.         puerto.Open(SerialPort::BAUD_115200,
  17.                 SerialPort::CHAR_SIZE_8,
  18.                 SerialPort::PARITY_NONE,
  19.                 SerialPort::STOP_BITS_1,
  20.                 SerialPort::FLOW_CONTROL_NONE);
  21.     }
  22.     catch (SerialPort::OpenFailed E) {
  23.         cerr << "Error abriendo el puerto" << endl;
  24.         return 1;
  25.     }
  26.     cout << "Escribe lo que quieres enviar" << endl;
  27.     getline(cin,entrada);
  28.     puerto.Write(entrada);
  29.     SerialPort::DataBuffer buf;
  30.     try {
  31.             puerto.Read(buf,entrada.size(),500);
  32.     }
  33.     catch (SerialPort::ReadTimeout E) {
  34.         cout << "TIMEOUT!";
  35.         return 1;
  36.     }
  37.     for(int i=0; i < buf.size(); i++){
  38.         cout << buf[i];
  39.     }
  40.     cout << endl;
  41.     puerto.Close();
  42. }
  43.  

¿Alguna idea de qué puede ser?

Páginas: [1]