##背景描述##

基于zigbee的温室大棚

一个协调器连接电脑,并接收多个zigbee终端发过来的数据

   ##目的:

1.编写上位机(MFC)

2.想把串口接收到的多个传感器的数据分别在不同的编辑框输出

   解决方案:

1.发送过来的数据打包(必须)

*详情可以百度&谷歌

2.MFC串口控件缓冲区必须设定一个数值(触发OnComm函数)

*关键代码如下:

m_ctrlComm.SetSettings("115200,n,8,1");//打开软件时端口设置默认为波特率9115200,无校验位,8位数据,1位停止位   
m_ctrlComm.SetInputMode(1); 
//1:表示以二进制方式检取数据 
m_ctrlComm.SetRThreshold(12); 
//参数12表示每当串口接收缓冲区中有12个字符时将引发一个接收数据的OnComm事件 
m_ctrlComm.SetInputLen(12);//设置当前接收区数据长度为12 
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据

注:我这里设置的是 12 ,是和我发过来的数据包的字节大小是一直的。

3.直接上我的OnComm() 函数:

int o;
void CSmart_ZIGBEE_FLYDlg::OnComm() 
{      
      VARIANT variant_inp;//定义一个VARIANT类对象
   COleSafeArray safearray_inp;//定义一个COleSafeArray对象
   LONG len,k; 
 o++;
 BYTE rxdata[1024]; //设置BYTE数组 AN 8—intterthat is not signed.
 CString strtemp;

//每次清屏

if(o>30)     //定量清除 编辑框数据
{   
        m_strRXData = _T("");
m_strRXData2= _T("");
        m_strRXData3 = _T("");
   m_strRXData4= _T("");
m_strRXData5 = _T("");  
o=0;
}
     
 if (m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有数据 
 {
 //OnSave();
 ///以下你可以根据自己的通信协议加入处理代码  
 variant_inp=m_ctrlComm.GetInput();//读缓冲区   
 safearray_inp=variant_inp;    //VARIANT型变量转换为ColeSafeArray型变量 
 len=safearray_inp.GetOneDimSize(); //读取到的缓存区数据的长度  //得到有效数据长度
          
 for(k=0;k<len;k++)
 {   
 safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组  
 } 
       
  int h;
 
 for(k=0;k<1;k++)//将数组转换为Cstring型变量    
  {   
    BYTE bt=*(char*)(rxdata+k);//字符型首先取得(rxdata+k),它是一个BYTE型的指针,
//然后强制转换为char型,然后逆向引用求出其中的内容
                 
                 
            strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放  
       
               

//备注:我一共有四个终端同时向协调器发送数据,

//每个终端的数据都进行了打包,然后设置一个标志位

//通过判别标志位,来进行调用不同的 编辑框进行输出
   if(strtemp =='#')//温度
{
  h=0;
 
//continue;
}
else
    if (strtemp =='@')//光强
{
h=1;
//continue;
}
else
if (strtemp =='*')//湿度
{
h=2;
//continue;

else
    if (strtemp =='$')// co2二氧化碳
{
h=3;
//continue;
}
else
if(strtemp =='&')// 烟雾
{
h=4;
//continue;
}

switch(h)
{

case 0:
{

for(k=1;k<len;k++)//将数组转换为Cstring型变量    
    {    
 
 BYTE bt=*(char*)(rxdata+k);//字符型首先取得(rxdata+k),它是一个BYTE型的指针,
//然后强制转换为char型,然后逆向引用求出其中的内容
                 
            strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放  
            m_strRXData+=strtemp;
               
 }OnSave();//这是我数据保存函数(也是保存到不同的文本的)
 break;
}
             case 1:
{   
                   for(k=1;k<len;k++)//将数组转换为Cstring型变量    
    {   
 BYTE bt=*(char*)(rxdata+k);//字符型首先取得(rxdata+k),它是一个BYTE型的指针,
//然后强制转换为char型,然后逆向引用求出其中的内容

strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放  
            m_strRXData2+=strtemp;
  } OnSave_1();
  break;
}
              case 2: 
 {  
 
                   for(k=1;k<len;k++)//将数组转换为Cstring型变量    
    {   
      BYTE bt=*(char*)(rxdata+k);//字符型首先取得(rxdata+k),它是一个BYTE型的指针,
//然后强制转换为char型,然后逆向引用求出其中的内容

strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放  
               m_strRXData3+=strtemp;
  } OnSave2();
  break;
 }
case 3: 
 {   
                   for(k=1;k<len;k++)//将数组转换为Cstring型变量    
    {   
     BYTE bt=*(char*)(rxdata+k);//字符型首先取得(rxdata+k),它是一个BYTE型的指针,
//然后强制转换为char型,然后逆向引用求出其中的内容

strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放  
             m_strRXData4+=strtemp;
  }OnSave3();
  break;
 }
 case 4: 
 {   
                   for(k=1;k<len;k++)//将数组转换为Cstring型变量    
    {   
       BYTE bt=*(char*)(rxdata+k);//字符型首先取得(rxdata+k),它是一个BYTE型的指针,
//然后强制转换为char型,然后逆向引用求出其中的内容

strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放  
               m_strRXData5+=strtemp;
  } OnSave4();
  break;
 }
}
}
 }
          UpdateData(FALSE);//更新编辑框内容(主要是接收编辑框中的  
 
      
}

这样就可以实现多个编辑框输出了

图示:

【C++ MFC开发】串口通信之多个编辑框输出相关推荐

  1. 基于VC++开发串口通信的方法

    串行通信中的关键是串行通信设备的初始化.数据的发送和接收及其实现方式. 在Dos环境下,用户可以直接对通信设备编程,可以通过查询中断的方式使用通信设备.但是Windows不提倡应用程序直接控制硬件,而 ...

  2. 【转载】MFC实现串口通信编程nbsp;-nbsp;yu…

    MFC实现串口通信编程 vc++.c#专题     2009-10-08 22:32 在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题.计算机和单片机(如MCS-51)都具 ...

  3. C#上位机开发串口通信编程——倒计时器开发

    C#上位机开发串口通信编程--倒计时器开发 一.介绍 这是我按照B站上的一个上位机开发视频教程开发的倒计时器开发,本来只有开始计时功能,没有停止计时功能,停止计时功能后面我自己添加了. 视频网址:C# ...

  4. 用VC开发串口通信dll控件

    VC串口通信技术网<VC串口上位机编程方法简介>介绍了串口编程的常见方法,其中就有使用串口dll控件的方法,dll是一种动态链接库,使用起来非常方便. 本文利用VC编程工具,对Window ...

  5. MFC COM 串口通信

    最近最单片机时需要用RS232串口通信,PC端用MFC开发,现记录下关键代码,便于自己以后学习 PC端程序 步骤: 打开MFC,新建对话框工程 在窗体上右键插入ACTIVEX,选择Microsoft ...

  6. 嵌入式开发—串口通信

    文章目录 1 概述 1.1 串口通信是什么 1.2 波特率 1.3 串口通信的用途 2 串口收发 2.1 波特率发生器 2.2 收发FIFO 2.3 DMA 3 串口收发程序设计 3.1 串口发送数据 ...

  7. C#上位机开发串口通信

    一.创建一个Winform窗体,制作一个5s定时器 using System; using System.Windows.Forms;namespace 计时器 {public partial cla ...

  8. linux下QT开发串口通信助手

    串口通信的应用十分广泛,所以在QT下编写一个串口通信程序就显得尤为重要.下面将一步一步叙述开发过程: 1.下载第三方QT串口类,免积分 http://download.csdn.net/detail/ ...

  9. python开发串口通信界面_python串口编程实例

    Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议. Python具有丰富和强大的库.它常被昵称为胶水语言,能够把用其 ...

最新文章

  1. 【每日一算法】二叉树的最大深度
  2. Grails 1.2参考文档速读(15):验证
  3. MXNet学习:试用卷积-训练CIFAR-10数据集
  4. vue2.0路由之编程式导航
  5. 这几个技巧让你做出让导师眼前一亮的答辩 PPT
  6. 【Java多线程编程】选号程序
  7. MySQL高级 - 应用优化
  8. Hive更换TEZ引擎
  9. Binary Search二分法搜索C++程序
  10. Java线程池 / Executor / Callable / Future
  11. php pop3,php使用smtp,pop3协议收发邮件代码
  12. 范型编程系列二(非原创)
  13. 矩阵转置相关公式_线性代数入门——矩阵的转置运算及对称矩阵的概念
  14. java实现打字母小游戏
  15. VUE打印 每页顶部添加一个二维码
  16. LY系列之约会大作战 (10分)
  17. 关于left与offsetLeft的区别
  18. ECG分析:基于深度学习的ECG心律失常分类入门(2)
  19. 解决海信智能电视不能安装U盘上的安装包的问题
  20. 写了一个网站:12小时福利区

热门文章

  1. Java计算两个时间的小时差
  2. python股票交易编程最好的书_向大家介绍我的新书:《基于股票大数据分析的Python入门实战》...
  3. POJ1845 Sumdiv 递归
  4. 软件工程工程伦理案例分析_案例工具及其范围| 软件工程
  5. [从零学习汇编语言] - BX寄存器与loop指令
  6. 【csdn涨粉秘籍】亲身体验从一年才涨80粉到20天涨粉800多,规则内设置,一个步骤助你快速涨粉
  7. Three.js 实时更新几何体的方法
  8. 学富五车的你,敢迎战Python开发的成语接龙游戏吗?
  9. Tranformer模型与Softmax函数
  10. 问渠那得清如许,唯有源头活水来