首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

vc++MSComm控件接收数据并曲线实时显示,该如何处理

2013-11-26 
vc++MSComm控件接收数据并曲线实时显示void CSCommTestDlg::OnComm() {// TODO: Add your control notific

vc++MSComm控件接收数据并曲线实时显示

void CSCommTestDlg::OnComm() 
{
    // TODO: Add your control notification handler code here
    VARIANT m_input1;
COleSafeArray m_input2;
long length,i;
BYTE data[600];
CString str;
float d=0;

static int Count=0;
if(m_ctrlComm.GetCommEvent()==2)//接收缓冲区内有字符
{
m_input1=m_ctrlComm.GetInput();//读取缓冲区内的数据
m_input2=m_input1;//将VARIANT型变量转换为ColeSafeArray型变量
length=m_input2.GetOneDimSize();//确定数据长度
for(i=0;i<length;i++)
m_input2.GetElement(&i,data+i);//将数据转换为BYTE型数组
for(i=0;i<length;i++)//将数组转换为Cstring型变量
{
BYTE a=* (unsigned char *)(data+i);
BYTE b=* (unsigned char *)(data+(++i));
float c=((int)a+(int)b*256)*0.0625;
d+=c;
}
str.Format("%.1f",d);
m_strEditRXData=str;//将刚采集的数加到编辑框中
}
    UpdateData(FALSE); //更新编辑框内容

POINT temp[31];
for ( i=0;i<31;i++)
{
temp[i]=polyLine[i];
}
for ( i=1;i<31;i++)
{
polyLine[i].y=temp[i-1].y;
}
polyLine[0].y=290-8*d;
LinePoints++;
}
上面的接受数据能看懂,就是后面的画图程序,polyLine以及polyLine[i].y是什么意思,?
POINT temp[31];
for ( i=0;i<31;i++)
{
temp[i]=polyLine[i];
}
for ( i=1;i<31;i++)
{
polyLine[i].y=temp[i-1].y;
}
polyLine[0].y=290-8*d;
LinePoints++;
??
各位给我看看了,麻烦了。 MSComm VC++ 串口通信 曲线 MFC
[解决办法]
POINT  这是一"点"结构体, 里面有x,y成员.

polyLine[i].y=temp[i-1].y; 这个的意思就是把点temp[i-1]的y给polyLine[i]的y.
实际就是两个点数组在传值.


//把点数组polyLine的值全部给点数组temp
for ( i=0;i<31;i++)
{
temp[i]=polyLine[i];
}
//然后把y坐标值错位.
for ( i=1;i<31;i++)
{
polyLine[i].y=temp[i-1].y;
}

[解决办法]
你是医工方面的学生吧,我写过一个几乎一模一样的代码,无线串口通信。
从缓冲区读取数据,并且转化成数字,存入数组,然后使用MoveTo和LineTo来划线,我是这个思路。
我也遇到过坐标不对称的情况,我是专门写了个函数,将你说的向右向下的坐标转化成向右向上的坐标,也就是上下两个坐标互转。,看下图:P是你得到的点,P'是你转化后的点,你看看,p和p'是沿着矩形的中间那条线对称的,这样的p'对于楼主是容易求出的吧。就是这样一个坐标转化而已。
------------------------

[解决办法]
 .p(10,100)            
[解决办法]
       

[解决办法]
                       
[解决办法]


[解决办法]
                       
[解决办法]
 height = 200

[解决办法]
                       
[解决办法]


[解决办法]
 .p' (10,?)            
[解决办法]

-------------------------
        width = 300

所以楼主应该写一个函数:int ConvertCoord(int y); 将p的y值给这个函数,返回的值作为p'的y值,再去MoveTo和LineTo就行,因为软件是给别人写的,所以不在我这里,因此代码我就没有了。楼主还有啥我们一起讨论
[解决办法]
------------------------

[解决办法]
 .p(10,100)            
[解决办法]
       

[解决办法]
                       
[解决办法]


[解决办法]
                       
[解决办法]
 height = 200

[解决办法]
                       
[解决办法]


[解决办法]


 .p' (10,?)            
[解决办法]

-------------------------
        width = 300
[解决办法]
不知道为啥,这个矩形编辑的时候是个矩形,一提交咋长这幅模样了。楼主认识它是个矩形就好。
[解决办法]
坐标变换撒.至于怎么变,那就是数学问题了.
x轴对称再移动原点即可.

假设你想在屏幕坐标的, x0,y0处作为你想绘制的坐标的原点.
数学坐标计算出来是x1,y1,
那么在屏幕上应该绘制的点为: x = x1 + x0; y= -y1+y0

热点排行