Salve a tutti
sto cercando di inviare dei dati via seriale, da un programma c++ ad un arduino, inizialmente avevo in mente di inviare un valore (ad esempio 50) in questo formato
A50A50Q
ma dopo aver visto quel che riceveva dall'altra parte ho pensato di semplificare la stringa a
50Q
Ma niente da fare ottengo valori che fanno paura
Pc :50Q 50Q 50Q 50Q ->Arduino: 50Q 50QQ 5QQQQ}?"½
insomma una sfilza di simboli deliranti... mi hanno consigliato di usare questo codice per il protocollo di trasmissione:
void Serialout(double v)
{
int fd; // File descriptor for the port
fd = open(PORT, O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
perror("open_port: Unable to open /dev/ttyUSB0 - ");
}
else
{
std::ostringstream oss;
//oss <<"A"<< (int)v <<"A"<< (int)v << "Q";
oss << (int)v << "Q";
fcntl(fd, F_SETFL, 0);
printf(" ho inviato %s ", oss.str().c_str() );
//int n = write(fd,&v,3);
int n = write(fd,oss.str().c_str(),4);
if (n < 0)
fputs("write() of 9 bytes failed!\n", stderr);
}
struct termios options; // Get the current options for the port...
tcgetattr(fd, &options); // Set the baud rates to 19200...
cfsetispeed(&options, BAUDRATE);
cfsetospeed(&options, BAUDRATE); // Enable the receiver and set local mode...
options.c_cflag |= (CLOCAL | CREAD); // Set the new options for the port...
tcsetattr(fd, TCSANOW, &options);
close(fd);
}
Sapreste consigliarmi un alternativa a
td::ostringstream oss;
oss << (int)v << "Q";
fcntl(fd, F_SETFL, 0);
int n = write(fd,oss.str().c_str(),4);
perché credo proprio che il problema sia qui...