dwinForumAdmin 发表于 2022-4-26 13:12:35

【开源】COF案例分享:智能取暖器

——文档转载自电子发烧友

这次设计是用迪文屏+CH582来控制固态继电器控制家用取暖器恒温系统。CH582作为主控,接收迪文屏的开、关机以及预设温度值,同时通过AHT10来采集实时温度来控制固态继电器的导通与关闭。
1.DGUS开发
(1)制作迪文屏所需要的图片


(2)软件属性设置

   


2.编写CH582的主控程序,我这里只示例串口主要程序:
void task_uart0_rec(void){    int i , l;    IF (SerialStr0.RecvLen > 0) {      PRINT("RECV_LEN:%d",SerialStr0.RecvLen);      if (SerialStr0.RecvLen == (SerialStr0.RecvBuff+3) \                && SerialStr0.RecvBuff == 0x5A \                && SerialStr0.RecvBuff == 0xA5)      {         //接收到正确的数据            DMG85480.state = RECV_WAIT_EXPLAN;            DMG85480.data_len = SerialStr0.RecvBuff-3;
            DMG85480.commad = SerialStr0.RecvBuff;            PRINT("recv_CMMD:%X\n",DMG85480.commad);            DMG85480.address= (uint16_t)SerialStr0.RecvBuff<<8 | SerialStr0.RecvBuff;            PRINT("recv_ADDRS:%X\n",DMG85480.address);            i = SerialStr0.RecvBuff-3;            for (l = 0; l < i; ++l) {                DMG85480.data = SerialStr0.RecvBuff;            }            rev_explain();            DMG85480.DMG_ERROR = RECV_OK;      }      else {            DMG85480.DMG_ERROR = RECV_ERR;            SerialStr0.RecvLen = 0;//丢弃无效的包      }    }    SerialStr0.RecvLen = 0;}
/** 数据判断**/static voidrev_explain(void){    uint8_t send_data;    switch (DMG85480.commad) {      case WRIT_DMG_DATA:            if (DMG85480.address == SWITCH) {//如果是开关按键                if (DMG85480.data == 0x01) {//按下的是开键,转换到页面。                  PRINT("OPEN\n");                  Electric_Heater.work_state = OPEN;                  send_data = 0x5A;                  send_data = 0x01;                  send_data = 0x00;                  send_data = 0x01;                  DMG85480.state = IDEL;                  send_DMG(send_data, CHANG_PAGE, WRIT_DMG_CMD,4);                  //等待收到OK                  //设置开机模式                }                else if (DMG85480.data == 0x00) { //关断了                  //关闭电加热丝 切换到0号页面                  Electric_Heater.work_state = CLOSE;                  PRINT("CLOSE\n");                  send_data = 0x5A;                  send_data = 0x01;                  send_data = 0x00;                  send_data = 0x00;                  DMG85480.state = IDEL;                  send_DMG(send_data, CHANG_PAGE, WRIT_DMG_CMD,4);                }            }            else if (DMG85480.address == SET_TEMP) { //温度设定改变                //设置温度值                PRINT("CHANGE\n");                Electric_Heater.set_temp = DMG85480.data;                DMG85480.state = IDEL;            }      break;      case WRIT_DMG_CMD:            if (DMG85480.address == SEND_RECV_OK) {//返回写正确                  DMG85480.DMG_ERROR = SEND_OK;                  DMG85480.state = IDEL;
            }            break;      default:      break;    }}/** 发送给串口屏* 参数1:数据* 参数2:指令 0x80-0x83* 参数3:串口屏地址* 参数4:数据长度*/void send_DMG(uint8_t pdata[], uint16_t addr, uint8_t commd, uint8_t data_len){uint8_t commd_len;while(DMG85480.state != IDEL);SerialStr0.TxBuff = 0x5a;SerialStr0.TxBuff = 0xa5;SerialStr0.TxBuff = data_len + 3;//长度SerialStr0.TxBuff = commd;SerialStr0.TxBuff = (uint8_t)(addr>>8);SerialStr0.TxBuff = (uint8_t)addr;for (commd_len = 0; commd_len < data_len; ++commd_len) {      SerialStr0.TxBuff = pdata;}DMG85480.state = SEND_WAIT;UART0_SendString(SerialStr0.TxBuff, 6+data_len);DMG85480.state = IDEL;}
3.实物效果展示   
      




抖音视频:https://v.douyin.com/6uqhb9T/
快手视频:https://www.kuaishou.com/f/X5Dc3XhTPbEw2bg























lijian 发表于 2022-4-26 20:07:35

大佬可不可以分享一下源代码

MAMI 发表于 2022-7-22 19:09:23

could you please send the project files?
info@yurtelektronik.com.tr

fay 发表于 2022-7-23 19:07:40

MAMI 发表于 2022-7-22 19:09
could you please send the project files?

It has been sent to you
页: [1]
查看完整版本: 【开源】COF案例分享:智能取暖器