Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
A ver si alguien me puede ayudar a volcar un dato de tipo float por puerto Serie.
He encontrado que la comunicación en C es parecido a la escritura de ficheros, y el código más o menos
#include <stdio>
#include <winsock2>
#include "bluetooth/Include/ws2bth.h"
#include "bluetooth/Include/BluetoothAPIs.h"
#include "math.h"
#include <windows>
#include "bluetooth/Include/bthdef.h"
//#pragma comment(lib, "irprops.lib")
HANDLE m_hComm;
void main(){
m_hComm=CreateFile("COM5",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(m_hComm==(HANDLE)-1){printf("errorn");}
DCB dcb;
dcb.DCBlength=sizeof(DCB);
GetCommState(m_hComm,&dcb);
dcb.BaudRate=CBR_9600;
dcb.ByteSize=8;
dcb.Parity=EVENPARITY;
dcb.fParity=TRUE;
dcb.StopBits=ONESTOPBIT;
dcb.fBinary=TRUE;
SetCommState(m_hComm,&dcb);
unsigned char buffer[512];
int datoi=1;
unsigned long enviat=0,enviando=0,leidos=5;
while(1){
WriteFile(m_hComm,&datoi,leidos-enviat,&enviando,NULL);
}
}
Puedes pasar tu valor numérico tipo float a char digito por digito incluido el punto decimal. Para que se pueda entender debes de crear un protocolo donde el receptor sepa cuando empieza el tren de bytes de dígitos y cuando terminan. Como la comunicación es por medio de buffer (largo determinado de bytes), el que recibe debe de identificar una clave (puede ser una palabra=ejemplo: INI) y sabrá que después de esta siguen los valores de cada digito incluido el punto decimal hasta que aparezca la palabra de cierre (ejemplo: FIN).
La verdad es que lo que estoy haciendo (tratando más bien) escapa bastante a mis conocimientos por tanto... a ver si alguien sabe hacerlo exactamente:
Para comunicar con el Lego NXT por bluetooth he configurado el bluetooth de mi PC como un puerto Serie Virtual, y con otro programa bien hecho (que he cogido de este foro, creo que de Heli) he volcado datos por el serie sin problema...pero el Lego no me los recibe.
Le he echado horas y horas, he intentado de todo pero sin ningún exito. Lo único que he recibido en el Lego es un "0" que no sé de donde sale, puede que del inicio o fin de conexión, pero nada más.
El trozo de código que muestras es bastante incompleto, no cierras el handle m_hComm. Ten en cuenta que Windows usa buffers y puede que no envíe la información hasta que no cierres el handle o no hagas un flush de los buffers...
Si continas con problemas publica el código tal cual lo tengas a ver si se ve el problema. También puedes cambiar COM5 por otro puerto no Bluetooth y ver lo que sale con otro ordenador...
Lo mejor es que primero utilices un puerto serie con un cable y lo conectes a otro ordenador con el hyperterminal bien configurado y cuando recivas lo que realmente kieres enviar entonces empezar las pruebas con el bluetooth. Sino nunca sabrás si te está fallando la configuración del puerto, el bluetooth, el envío,la recepción, etc.