Buenas, estoy haciendo un proyecto para la clase de programación en el que tenemos que enviar un fichero por el puerto de comunicaciones y que el robot haga los movimientos del fichero. El programa está hecho y funcionando pero hay un problema: la posición 0 y el servo 0 no se pueden mandar. Aquí adjunto el programa:
El programa consiste básicamente en coger de un fichero el servo y la posición, transformarlos de tipo integer a tipo char y enviarlo todo junto por el puerto de comunicaciones. Antes de esas dos variables hay que poner el byte de sincronización. Hasta ahí todo bien, pero a la hora de enviar un servo 0, que sería el que mueve el robot horizontalmente, <- ->, o incluso la posición 0, el programa transforma ese 0 a char y se lo envía, pero no hace nada. Si quiero enviarle las coordenadas servo 1, posición 127 quedaría del tipo : ☺⌂, primero el byte de sincronización, luego el servo en tipo char y luego la posición en tipo char. Me gustaría saber si existe alguna otra manera para enviarle el 0 al robot y que reaccione. Muchas gracias de antemano.
Código [Seleccionar]
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <windows.h>
#include "rs232.h"
#include <string.h>
#include <string>
#include <sstream>
using namespace std;
ifstream fichero;
int main(){
int servo, posicion,syncbyte = 255;
char s,ser,pos,pos2,pos3, p, sbyte = (char) syncbyte;
string nombre, auxiliar;
cout << "Introduce el nombre del fichero: ";
getline(cin, nombre);
fichero.open(nombre, ios::in);
if (fichero.is_open()){
while (!fichero.eof()){
getline(fichero, auxiliar);
ser = auxiliar[2];
servo = ser - '0';
if (servo >4){
servo = 3;
}
if (servo <0){
servo = 0;
}
pos = auxiliar[4];
pos2 = auxiliar[5];
pos3= auxiliar[6];
posicion = (pos - '0')*100 +(pos2 - '0')*10 + (pos3 - '0');
if (posicion <0){
posicion= 0;
}
if (posicion >255){
posicion = 254;
}
cout <<servo << "," <<posicion<<endl;
s = (char) servo;
p = (char) posicion;
ostringstream suma;
suma << sbyte << s << p;
string todo = suma.str();
//cout << todo<<endl;
const char* lavihen = todo.c_str();
RS232_OpenComport(0, 9600, "8N1");
RS232_cputs(0, lavihen);
RS232_CloseComport(0);
}
}else{
cout << "ERROR";
}
return 0;
}
El programa consiste básicamente en coger de un fichero el servo y la posición, transformarlos de tipo integer a tipo char y enviarlo todo junto por el puerto de comunicaciones. Antes de esas dos variables hay que poner el byte de sincronización. Hasta ahí todo bien, pero a la hora de enviar un servo 0, que sería el que mueve el robot horizontalmente, <- ->, o incluso la posición 0, el programa transforma ese 0 a char y se lo envía, pero no hace nada. Si quiero enviarle las coordenadas servo 1, posición 127 quedaría del tipo : ☺⌂, primero el byte de sincronización, luego el servo en tipo char y luego la posición en tipo char. Me gustaría saber si existe alguna otra manera para enviarle el 0 al robot y que reaccione. Muchas gracias de antemano.