迪文科技论坛

 找回密码
 立即注册
搜索
查看: 884|回复: 3

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

[复制链接]

574

主题

169

回帖

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12353
发表于 2022-4-26 13:12:35 | 显示全部楼层 |阅读模式
——文档转载自电子发烧友

这次设计是用迪文屏+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[2]+3) \
                && SerialStr0.RecvBuff[0] == 0x5A \
                && SerialStr0.RecvBuff[1] == 0xA5)
        {
           //接收到正确的数据
            DMG85480.state = RECV_WAIT_EXPLAN;
            DMG85480.data_len = SerialStr0.RecvBuff[2]-3;

            DMG85480.commad = SerialStr0.RecvBuff[3];
            PRINT("recv_CMMD:%X\n",DMG85480.commad);
            DMG85480.address  = (uint16_t)SerialStr0.RecvBuff[4]<<8 | SerialStr0.RecvBuff[5];
            PRINT("recv_ADDRS:%X\n",DMG85480.address);
            i = SerialStr0.RecvBuff[2]-3;
            for (l = 0; l < i; ++l) {
                DMG85480.data[l] = SerialStr0.RecvBuff[l+6];
            }
            rev_explain();
            DMG85480.DMG_ERROR = RECV_OK;
        }
        else {
            DMG85480.DMG_ERROR = RECV_ERR;
            SerialStr0.RecvLen = 0;//丢弃无效的包
        }
    }
    SerialStr0.RecvLen = 0;
}

/*
* 数据判断
*
*/
static void  rev_explain(void)
{
    uint8_t send_data[10];
    switch (DMG85480.commad) {
        case WRIT_DMG_DATA:
            if (DMG85480.address == SWITCH) {//如果是开关按键
                if (DMG85480.data[2] == 0x01) {//按下的是开键,转换到页面。
                    PRINT("OPEN\n");
                    Electric_Heater.work_state = OPEN;
                    send_data[0] = 0x5A;
                    send_data[1] = 0x01;
                    send_data[2] = 0x00;
                    send_data[3] = 0x01;
                    DMG85480.state = IDEL;
                    send_DMG(send_data, CHANG_PAGE, WRIT_DMG_CMD,4);
                    //等待收到OK
                    //设置开机模式
                }
                else if (DMG85480.data[2] == 0x00) { //关断了
                    //关闭电加热丝 切换到0号页面
                    Electric_Heater.work_state = CLOSE;
                    PRINT("CLOSE\n");
                    send_data[0] = 0x5A;
                    send_data[1] = 0x01;
                    send_data[2] = 0x00;
                    send_data[3] = 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[2];
                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[0] = 0x5a;
  SerialStr0.TxBuff[1] = 0xa5;
  SerialStr0.TxBuff[2] = data_len + 3;//长度
  SerialStr0.TxBuff[3] = commd;
  SerialStr0.TxBuff[4] = (uint8_t)(addr>>8);
  SerialStr0.TxBuff[5] = (uint8_t)addr;
  for (commd_len = 0; commd_len < data_len; ++commd_len) {
      SerialStr0.TxBuff[6+commd_len] = pdata[commd_len];
  }
  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























本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

5

主题

11

回帖

118

积分

注册会员

Rank: 2

积分
118
发表于 2022-4-26 20:07:35 | 显示全部楼层
大佬可不可以分享一下源代码
回复

使用道具 举报

0

主题

5

回帖

63

积分

注册会员

Rank: 2

积分
63
发表于 2022-7-22 19:09:23 | 显示全部楼层
could you please send the project files?
info@yurtelektronik.com.tr
回复

使用道具 举报

0

主题

932

回帖

6368

积分

论坛元老

Rank: 8Rank: 8

积分
6368
发表于 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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-1-14 21:18 , Processed in 0.065831 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表