#include <iostream>
#include <Windows.h>
#include <fstream>
#include <time.h>
using namespace std;
HANDLE hCom;//定义串口句柄
OVERLAPPED m_ov;//当串口异步通信时,返回NULL
COMSTAT comstat;//使用此结构体中的“cbInQue”变量,此变量为串口每次发送的数据的字节数
bool openport()
{
//打开串口
hCom=CreateFile("\\\\.\\COM15",//要打开的串口号
GENERIC_READ|GENERIC_WRITE,//允许对串口进行读写操作
0,//串口不支持共享
NULL,//无安全属性
OPEN_EXISTING,//打开已存在的设备
FILE_FLAG_OVERLAPPED,//异步通信方式
NULL);//通讯设备不能用模板打开
if(hCom == INVALID_HANDLE_VALUE)
{
CloseHandle(hCom);
return false;
}
else
return true;
}
int setupdcb(int rate_arg)
{
DCB dcb;
int rate = rate_arg;
memset(&dcb,0,sizeof(dcb));
dcb.DCBlength = sizeof(dcb);
/*----------- Serial Port Config ----------*/
dcb.BaudRate = rate;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.ByteSize = 8;
dcb.fOutxCtsFlow = 0;
dcb.fOutxDsrFlow = 0;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity= 0;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fOutX = 0;
dcb.fInX = 0;
/*----------- misc parameters ------------*/
dcb.fErrorChar = 0;
dcb.fBinary = 1;
dcb.fNull = 0;
dcb.fAbortOnError = 0;
dcb.XonLim = 2;
dcb.XoffLim = 4;
dcb.XonChar = 0x13;
dcb.XoffChar = 0x19;
dcb.EvtChar = 0;
return 1;
}
//定义读写超时
int setuptimeout(DWORD ReadInterval,//以毫秒为单位指定通信线上两个字符到达之间的最大时间
DWORD ReadTotalMultiplier,//以毫秒为单位指定一个乘数,用以计算读操作的总限时时间
DWORD ReadTotalconstant,//为零,指出读操作要立即返回已接收到的字符,即使未收到字符,读操作也要返回
DWORD WriteTotalMultiplier,//以毫秒为单位指定一个乘数,用以计算写操作的总限时时间
DWORD WriteTotalconstant)//为零,指出写操作要立即返回已接收到的字符,即使未收到字符,读操作也要返回
{
COMMTIMEOUTS timeouts;//定义超时参数结构体
timeouts.ReadIntervalTimeout =ReadInterval;
timeouts.ReadTotalTimeoutConstant =ReadTotalconstant;
timeouts.ReadTotalTimeoutMultiplier =ReadTotalMultiplier;
timeouts.WriteTotalTimeoutConstant =WriteTotalconstant;
timeouts.WriteTotalTimeoutMultiplier=WriteTotalMultiplier;
return 1;
}
void ReceiveChar(unsigned char ReadBuff[],DWORD m_nToRead)
{
BOOL bRead =TRUE;
BOOL bResult =TRUE;
DWORD dwError =0;
DWORD BytesRead =0;
time_t LocalTime;
LocalTime =time(NULL);
cout<<"测试时间:"<<ctime(&LocalTime)<<endl;
ofstream fout;
fout.open("c:\\writefile.txt",ios_base::app|ios_base::out);
fout<<"------------------------This is just a experiment!---------------------------"<<endl;
fout<<"---------------------血压单位:mmHg;心率单位:次/分钟-----------------------"<<endl;
fout<<"测试时间:"<<ctime(&LocalTime)<<endl;
for( ; ; )
{
bResult = ClearCommError(hCom,&dwError,&comstat);
// 在使用ReadFile 函数进行读操作前,应先使用ClearCommError函数清除错误
if (comstat.cbInQue == 0)//COMSTAT结构返回串口状态消息,cbInQue的值代表输入缓冲区的字节数
continue;
m_nToRead = comstat.cbInQue;
bResult = ReadFile(hCom,ReadBuff,m_nToRead,&BytesRead,&m_ov);
//memcpy(copy,ReadBuff,m_nToRead);
switch(m_nToRead)
{
case(7):
{
fout<<"正在测量中,血压瞬时值(mmHg):"<<(int)ReadBuff[4]<<endl;
//fout.close();
cout<<"正在测量中,血压瞬时值(mmHg):"<<(int)ReadBuff[4]<<endl;
break;
}
case(8):
{
fout<<"测量完成(结果仅指示测试者当前身体状况)——高压:"<<(int)ReadBuff[3]<<";低压:"<<(int)ReadBuff[4]<<";心率:"<<(int)ReadBuff[5]<<endl;
//fout.close();
cout<<"测量完成(结果仅指示测试者当前身体状况)——高压:"<<(int)ReadBuff[3]<<";低压:"<<(int)ReadBuff[4]<<";心率:"<<(int)ReadBuff[5]<<endl;
break;
}
default:
{
break;
}
}
}
fout.close();
}
void WriteChar(unsigned char WriteBuffer[6],DWORD m_nToSend)
{
BOOL bWrite = TRUE;
BOOL bResult = TRUE;
DWORD BytesSent = 0;
if (bWrite)
{
m_ov.Offset = 0;
m_ov.OffsetHigh = 0;
bResult = WriteFile(hCom,//串口的句柄
WriteBuffer,// 即以该指针的值为首地址的nNumberOfBytesToWrite
//个字节的数据将要写入串口的发送数据缓冲区
m_nToSend,//要写入的数据的字节数
&BytesSent,//指向一个DWORD数值,该数值返回实际写入的字节数
&m_ov);
}
}
void main()
{
unsigned char OrderToSendToBegain[6] = {0xFD,0xFD,0xFA,0x05,0x0D,0x0A};
unsigned char OrderToSendToEnd[6] = {0xFD,0xFD,0xFE,0x06,0X0D,0x0A};
unsigned char ReadBuff[7];
bool open;
for(int i = 0;i<7;i++)
{
ReadBuff[i] = 0x00;
}
open = openport();
if(open)
cout<<"open port success!"<<endl;
if(setupdcb(9600))
cout<<"setupDCB success!"<<endl;
if(setuptimeout(0,0,0,0,0))
cout<<"settimeout success!"<<endl;
SetCommMask( hCom, EV_RXCHAR|EV_TXEMPTY );//设置串口事件
SetupComm( hCom, 4096,4096); //设置读写缓冲区大小
PurgeComm(hCom, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);
WriteChar(OrderToSendToBegain,6);
cout<<"received data:"<<endl;
ReceiveChar(ReadBuff,7);
WriteChar(OrderToSendToEnd,6);
}
没有合适的资源?快使用搜索试试~ 我知道了~
WIN_API编程:从蓝牙借口读16进制数据并转成10进制写入TXT文件
共47个文件
tlog:25个
manifest:3个
pdb:2个
3星 · 超过75%的资源 需积分: 9 37 下载量 40 浏览量
2014-04-16
16:11:42
上传
评论 1
收藏 17.79MB ZIP 举报
温馨提示
WIN_API编程:从蓝牙借口读16进制数据并转成10进制写入TXT文件
资源推荐
资源详情
资源评论
收起资源包目录
BlueTooth-interface.zip (47个子文件)
BlueTooth-interface
BlueTooth-interface.sdf 26.46MB
BlueTooth-interface.sln 924B
BlueTooth-interface.suo 19KB
BlueTooth-interface
BlueTooth-interface.cpp 5KB
BlueTooth-interface.vcxproj 4KB
Debug
vc100.idb 915KB
BlueTooth-interface.obj 212KB
CL.write.1.tlog 1KB
link.36704.write.1.tlog 2B
link.6728.write.1.tlog 2B
CL.read.1.tlog 38KB
mt.read.1.tlog 1KB
rc.write.1.tlog 550B
link.4020.write.1.tlog 2B
BlueTooth-interface.vcxprojResolveAssemblyReference.cache 707B
rc.read.1.tlog 542B
BlueTooth-interface.exe.intermediate.manifest 381B
BlueTooth-interface.lastbuildstate 107B
link.5888.write.1.tlog 2B
mt.command.1.tlog 1KB
cl.command.1.tlog 2KB
link.36704.read.1.tlog 2B
link.7756.write.1.tlog 2B
BlueTooth-interface.write.1.tlog 0B
BlueTooth-interface.log 3KB
link.write.1.tlog 2KB
link.8088.read.1.tlog 2B
link.8088.write.1.tlog 2B
BlueTooth-interface_manifest.rc 228B
BlueTooth-interface.exe.embed.manifest 2B
link.command.1.tlog 3KB
rc.command.1.tlog 852B
link.read.1.tlog 6KB
link.5888.read.1.tlog 2B
link.4020.read.1.tlog 2B
mt.write.1.tlog 518B
link.6728.read.1.tlog 2B
BlueTooth-interface.exe.embed.manifest.res 68B
link.7756.read.1.tlog 2B
vc100.pdb 324KB
BlueTooth-interface.vcxproj.filters 981B
BlueTooth-interface.vcxproj.user 143B
ipch
bluetooth-interface-b7af5a9b
bluetooth-interface-68bec640.ipch 44.13MB
Debug
BlueTooth-interface.exe 83KB
BlueTooth-interface.pdb 1.02MB
BlueTooth-interface.ilk 630KB
BlueTooth-interface.exe.manifest 406B
共 47 条
- 1
资源评论
- 小旭同学A00002015-01-15这是串口啊,是另外加的蓝牙模块吧
- cqcchw2014-04-29和蓝牙无关,串口数据收发而已
wqy_1992
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功