菜单

出厂Demo外设部分(第二页贴磁)

下载

1 串口

1.1 公共页新建串口

1.2 串口接收回调函数

1.3 发送逻辑

通过变量获取输入框的输入值 转换后通过串口发送出去

cpp 复制代码
string InputMessage;
vm->getChar("输入临时变量1", InputMessage);
if(!InputMessage.empty()){
  vector<uint8_t> cmd(InputMessage.begin() , InputMessage.end());
  Wcmn* cmnPage = (Wcmn*) hmiApp->cWnd;
  cmnPage->wMCom1->writeData(cmd);
}else{
  pm->getMessageBox("输入值不能为空")->show();
}

1.4 接受逻辑

串口接收到的值转换后通过变量显示在UI控件上

cpp 复制代码
int HEX;
vector<uint8_t> pData;
wMCom2->readData(pData, 0);
vm->getInt("是否启用HEX", HEX);
string message = string(pData.begin(), pData.end());
string Hexmessage = StringUtil::charsToString(pData.data(), pData.size());
if(HEX){
  vm->setChar("16进制字符串显示变量2", Hexmessage);
}else{
  vm->setChar("16进制字符串显示变量2", message);
}

2 Socket(包含头文件)

2.1Socket客户端

2.1.1 客户端数据结构

2.1.2 客户端接受逻辑

思路:连接成功后 异步循环接受数据

2.2 Socket服务器

思路:双异步 一个异步接受客户端数据 一个异步等待新的客户端连接

2.2.1 服务端数据结构

3 IO控制

3.1 初始化使能输入输出

out输出 in输入

cpp 复制代码
GPIO::setup((uint8_t)48);
GPIO::setup((uint8_t)47);
GPIO::setup((uint8_t)90);
GPIO::setup((uint8_t)86);
GPIO::setup((uint8_t)14);
GPIO::setup((uint8_t)11);
GPIO::setup((uint8_t)1);
GPIO::setup((uint8_t)0);
GPIO::setDirection(48, "out");
GPIO::setDirection(47, "out");
GPIO::setDirection(90, "out");
GPIO::setDirection(86, "out");
GPIO::setDirection(14, "out");
GPIO::setDirection(11, "out");
GPIO::setDirection(1, "out");
GPIO::setDirection(0, "out");

3.2 读取逻辑

定时器循环扫描IO状态通过变量传递控件

cpp 复制代码
vm->setInt("变量_1", GPIO::getValue(48));
vm->setInt("变量_2", GPIO::getValue(47));
vm->setInt("变量_3", GPIO::getValue(90));
vm->setInt("变量_4", GPIO::getValue(86));
vm->setInt("变量_5", GPIO::getValue(14));
vm->setInt("变量_6", GPIO::getValue(11));
vm->setInt("变量_7", GPIO::getValue(1));
vm->setInt("变量_8", GPIO::getValue(0));

3.3 控制逻辑

读取IO状态后取反

cpp 复制代码
	GPIO::setValue(14, !GPIO::getValue(14));

4 IIC读取

打开IIC设备 确定数据寄存器 发送IIC数据 读取温湿度

cpp 复制代码
#ifdef __arm__
  int i;
  unsigned char writebuf[3] = {0xAC, 0x33, 0x00};
  unsigned char readbuf[7];
  
  int fd = open(DEFAULT_I2C_BUS, O_RDWR);
  
  if (fd < 0)
  {
      printf("open failed/n");
  }
  
  while (1)
  {
    memset(readbuf, 0, sizeof(readbuf));
    i2c_write(fd, AHT20_DEVICE_ADDR, writebuf, 3);
    usleep(100 * 1000); // 休眠一秒
    i2c_read(fd, AHT20_DEVICE_ADDR, readbuf, 7);
    show_data(readbuf);
    usleep(2000 * 1000); // 休眠一秒
  }
#endif
上一个
出厂Demo控件部分(第一页贴磁)
下一个
出厂Demo采样视频部分(第三页贴磁)
最近修改: 2025-09-25Powered by