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