前言

上一篇文章  涂鸦智能暖风机软件实现之利用B3950实现温度采集功能已经实现了暖风机的温度采集功能,本文将实现暖风机的基本外设驱动,例如驱动继电器开关实现档位调节、驱动摇头电机、驱动蜂鸣器等。

一、智能暖风机的整体功能设定

  • 智能暖风机设定功能如下:
功能 说明
开关

触摸按键:1个

按键控制,app控制

控制暖风机开关。

目前开发的开启有三种方式:

1.App面板控制

2:按键控制

3:定时控制

模式

触摸按键:1个

按键控制,app控制

1:风扇功能:只吹风,不制热。

2:1档加热:风扇+加热1

3:2档加热:风扇+加热2(档位更高)

定时

触摸按键:1个

按键控制,app控制

倒计时默认枚举值有cancel, 1h, 2h, 3h, 4h, 5h, 6h,7h, 8h。

倒计时功能针对暖风机开关。

app暖风机倒计时剩余时间。

灯光

触摸按键:1个

按键控制,app控制

4种照明模式: 1 rgb1 2 rgb2 3 rgb3 4 rgb4

设温

触摸按键:1个

按键控制,app控制

温度设置区间为15-40℃,客户可以自行设定温度。

温度显示

硬件:断码显示

按键控制,app控制

只是在设定的时候显示

设备上和当前温度显示复用,app单独显示

设备:温度设定时,显示设定温度,误操作3秒后显示当前室温

摇头

触摸按键:1个

按键可控制,app可控制。

开/关

待机记忆

按键,app,主动操作开关键关机为待机状态。

再开启后恢复上一次设置:

温度设置:上一次设置

温度显示:当前环境温度

灯光模式:上一次设置

设备定时关:默认关闭

app定时关:默认关闭。

app定时开:上一次设置。

断电记忆

断电后为断电状态,再上电恢复上一次设置:

开关状态:默认关

温度设置:上一次设置

温度显示:当前环境温度

灯光模式:上一次设置

设备定时关:默认关闭

app定时关:默认关闭。

app定时开:上一次设置。

二、驱动继电器控制暖风机工作档位

1.驱动原理图

驱动电路如下图,LIN和HIN分别是低加热档和高加热档的控制引脚,控制引脚电平拉高后对应的输出引脚LOUT和HOUT就会输出高电平驱动继电器开启,从而开启低档位或高档位的加热管。

2.软件方案设定

上一篇文章我们实现了温度采集功能,现在我们在此基础上进行开发。

  • 所用的SOC引脚图如下:

  • 驱动方案设定

HIN : P20   |P20引脚为高加热档控制引脚
LIN : P22   |P22引脚为低加热档控制引脚
本方案中HIN 和 LIN引脚不能同时拉高

将控制引脚配置为推挽输出模式,初始化为拉低状态,可以根据传入的函数传参执行引脚拉高和拉低,实现控制继电器功能。下面我们开始编写控制程序。

3.程序实现

由于模块化编程思想便于代码的扩展和管理。我们单独创建一个gpio_control.c文件以及其头文件,主要内容是控制IO引脚的代码。

  • gpio_control.h内容:
#ifndef __GPIO_CONTROL_H__
#define __GPIO_CONTROL_H__#ifdef __cplusplusextern "C" {
#endif
/*============================ INCLUDES ======================================*/#include "tuya_pin.h"
#include "tuya_hal_system.h"/*============================ MACROS ========================================*/
#define relay_leve1 22 // 低加热档控制引脚
#define relay_leve2 20 // 高加热档控制引脚
#define mode0   0   //工作模式1 只吹风不加热
#define mode1   1   //工作模式2 吹风 + 加热1档
#define mode2   2   //工作模式3 吹风 + 加热2档
/*============================ MACROFIED FUNCTIONS ===========================*/
void relay_set(int level);
void relay_init();
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif
  • gpio_control.c内容:
#include "gpio_control.h"
//Relay control pin initialization
void relay_init()
{tuya_pin_init(relay_leve1, TUYA_PIN_MODE_OUT_PP_LOW);tuya_pin_init(relay_leve2, TUYA_PIN_MODE_OUT_PP_LOW);
}
//Heating mode setting
void relay_set(int level)
{switch (level){case mode0:{tuya_pin_write(relay_leve1, TUYA_PIN_LOW);tuya_pin_write(relay_leve2, TUYA_PIN_LOW);}break;case mode1:{tuya_pin_write(relay_leve1, TUYA_PIN_HIGH);tuya_pin_write(relay_leve2, TUYA_PIN_LOW);}break;case mode2:{tuya_pin_write(relay_leve1, TUYA_PIN_LOW);tuya_pin_write(relay_leve2, TUYA_PIN_HIGH);}break;default:break;}}

上述代码实现了暖风机两档加热的控制,relay_init()函数放在工程的初始化函数calorifier_init()中初始化,之后使用relay_set(int level)即可调整暖风机的加热模式。

三、驱动暖风机的风扇电机和摇头电机


1.驱动原理图
 

驱动电路如下图,FAN_IN和SW_IN分别是风扇电机和摇头电机的控制引脚,控制引脚电平拉高后对应的输出引脚FAN_OUT和SW_OUT就会输出高电平驱动继电器开启,从而开启风扇电机和摇头电机,实现暖风机的吹风功能和摇头功能。

2.软件方案设定

  • 所用的SOC引脚图如下:

  • 驱动方案设定

SW_IN  : P14   |摇头电机控制引脚
FAN_IN : P16   |风扇电机控制引脚
高电平有效

将控制引脚配置为推挽输出模式,初始化为拉低状态,可以根据传入的函数传参执行引脚拉高和拉低,实现电机控制。下面我们开始编写控制程序。

3.程序实现

我们在gpio_control.c和其头文件中添加代码,内容如下:

#define fan_motor   16
#define shake_motor 14void motor_init();//电机控制引脚初始化
void fan_motor_set(IN    BOOL_T bONOFF);
void shake_motor_set(IN     BOOL_T bONOFF);
void motor_init()
{tuya_pin_init(fan_motor, TUYA_PIN_MODE_OUT_PP_LOW);tuya_pin_init(shake_motor, TUYA_PIN_MODE_OUT_PP_LOW);
}void fan_motor_set(IN    BOOL_T bONOFF)
{if(bONOFF == TRUE){tuya_pin_write(fan_motor, TUYA_PIN_HIGH);}else{tuya_pin_write(fan_motor, TUYA_PIN_LOW);}}void shake_motor_set(IN     BOOL_T bONOFF)
{if(bONOFF == TRUE){tuya_pin_write(shake_motor, TUYA_PIN_HIGH);}else{tuya_pin_write(shake_motor, TUYA_PIN_LOW);}}

上述代码实现了暖风机的风扇电机和摇头电机的控制,motor_init()函数放在工程的初始化函数calorifier_init()中初始化,之后使用fan_motor_set()和shake_motor_set()函数即可控制风扇电机和摇头电机的开启。

四、驱动蜂鸣器

1.驱动原理图

驱动电路如下图,蜂鸣器在暖风机中用作按键提示音,也是GPIO控制,本方案中选用的是有源蜂鸣器,图中Buzzer引脚输出为高电平时,蜂鸣器工作。

2.软件方案设定

Buzzer  : P28   |蜂鸣器控制引脚
高电平有效

将控制引脚配置为推挽输出模式,初始化为拉低状态,可以根据传入的函数传参执行引脚拉高和拉低,实现蜂鸣器控制。下面我们开始编写控制程序。

3.程序实现

我们在gpio_control.c和其头文件中添加代码,内容如下:

#define buzzer_pin  28
void buzzer_set(IN     BOOL_T bONOFF);
void buzzer_init()
{tuya_pin_init(buzzer_pin, TUYA_PIN_MODE_OUT_PP_LOW);
}
void buzzer_set(IN     BOOL_T bONOFF)
{if(bONOFF == TRUE){tuya_pin_write(buzzer_pin, TUYA_PIN_HIGH);}else{tuya_pin_write(buzzer_pin, TUYA_PIN_LOW);}
}

由于按键提示音不需要很长的时间,故使用定时器开启蜂鸣器,响100ms后关闭蜂鸣器。

void timer1_init(void)
{timer1 = (tuya_timer_t *)tuya_driver_find(TUYA_DRV_TIMER, TUYA_TIMER1);//The timer uses cycle modeTUYA_TIMER_CFG(timer1, TUYA_TIMER_MODE_PERIOD, tuya_timer1_cb, NULL);tuya_timer_init(timer1);//Start the timer, 1ms is a counting cycletuya_timer_start(timer1, 1000);buzzer_set(1);
}
void tuya_timer1_cb(void *arg)
{static uint32_t s_tick;if (s_tick++ >= 100) {s_tick = 0;tuya_timer_stop(timer1);buzzer_set(0);}
}

上述代码实现了蜂鸣器的控制,buzzer_init()函数放在工程的初始化函数calorifier_init()中初始化,之后使用timer1_init函数即可实现按键提示音功能。

技术支持

您可以通过以下方法获得涂鸦的支持:

  • 涂鸦开发者中心;http://developer.Tuya.com
  • 涂鸦帮助中心:http://support.tuya.com/help
  • 涂鸦技术支持中心:https://service.console.tuya.com

智能暖风机——4.暖风机外设驱动实现相关推荐

  1. 2018-2019-1 20165318 20165322 20165326 实验四 外设驱动程序设计

    实验四 外设驱动程序设计 实验内容 任务一 任务二 问题及解决方法 参考链接 实验内容 任务一 学习资源中全课中的"hqyj.嵌入式Linux应用程序开发标准教程.pdf"中的第十 ...

  2. Linux主机驱动与外设驱动分离思想

    - by 宋宝华(Barry Song) 1主机.外设驱动分离的意义 在Linux设备驱动框架的设计中,除了有分层设计实现以外,还有分隔的思想.举一个简单的例子,假设我们要通过SPI总线访问某外设,在 ...

  3. 计算机连接外设的端口驱动,将 KMDF 外设驱动程序连接到串行端口

    将 KMDF 外设驱动程序连接到串行端口 04/20/2017 本文内容 SerCx2 管理的串行端口上的外围设备的 KMDF 驱动程序需要某些硬件资源来运行设备. 这些资源包含驱动程序打开串行端口逻 ...

  4. 2017-2018-1 20155327 实验四 外设驱动程序设计

    2017-2018-1 20155327 实验四 外设驱动程序设计 题目一 学习资源中全课中的"hqyj.嵌入式Linux应用程序开发标准教程.pdf"中的第十一章 提交康奈尔笔记 ...

  5. location驱动包_Zynq SDK 驱动探求(三):论一个外设驱动的全部身家·Xilinx SDK 驱动源码结构...

    Processor is ready. Configure programable logic. 在新专栏 Rapid TCP/IP on Zynq 中,将围绕 Xilinx Zynq 系列芯片,从 ...

  6. 信息安全系统设计基础实验四:外设驱动程序设计 20145222黄亚奇 20145213祁玮

    北京电子科技学院(BESTI) 实 验 报 告 封 面 课程:信息安全系统设计基础 班级:1452 姓名: 黄亚奇 祁玮 学号: 20145222 20145213 成绩: 指导教师:娄嘉鹏 实验日期 ...

  7. spi 外设驱动(spi_driver)

    spi驱动模型和i2c的类似,都按照主机外设分离来设计的.但我觉得比i2c的要简明好多. 上文配置的spi驱动最外层是platform总线然后是spi总线然后是字符设备. spi驱动模型分为 spi主 ...

  8. i2c--ioctl--主机控制器驱动(i2c_adapter)--外设驱动(i2c_driver)

    updating... i2c驱动目录 [root@localhost i2c]# pwd /opt/FriendlyArm/mini2440/linux-2.6.32.2/drivers/i2c [ ...

  9. 2018-2019-1 20165211 实验四 外设驱动程序设计

    2018-2019-1 20165211 实验四 外设驱动程序设计 任务一 1.实验要求 学习资源中全课中的"hqyj.嵌入式Linux应用程序开发标准教程.pdf"中的第十一章 ...

  10. (67)SPI外设驱动接收驱动(六)(第14天)

    (67)SPI外设驱动接收驱动(六)(第14天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)SPI外设驱动接收驱动(六)(第14天) 5)技术交流 6)参考资 ...

最新文章

  1. Linux那些事儿 之 戏说USB(18)设备的生命线(一)
  2. Thymeleaf——使用模板动态生成JavaScript脚本文件
  3. 分享平时工作中那些给力的shell命令
  4. python elementtree乱码_python ElementTree
  5. 《统一沟通-微软-实战》-6-部署-7-部署移动功能-1
  6. 模块化实现(好处,原因)
  7. json规范,平时不注意的特殊符号
  8. mysql purge进程_MySQL数据库之Purge死锁问题解析
  9. element ui级联选择器添加必填验证
  10. 2011年国庆发布:(cppblog)C++博客十八罗汉造像
  11. 【NVMe2.0b 8】NVMe 队列仲裁机制
  12. 阿玛机器人_豪华日本声优阵容,《战斗天赋解析系统》让你耳朵怀孕!
  13. java精确小数位数的几种方法
  14. 无法识别的usb跟这台计算机,【实战成功】无法识别的USB设备:跟这台计算机连接的一个USB设备运行不正常,WINDOWS无法识别...
  15. keil里的debug项里没有 proteus vsm 51解决方案
  16. 1998年11月11日,马化腾和同学张志东正式注册——腾讯
  17. 知乎搜索关键字爬取相关图片
  18. 字节小组长无意得知手下有35K,自己却只有28K;谷歌推出Go版Android 11;Deepin v20正式发布!...
  19. 点餐系统后台服务器部署,Java后台——点餐小程序在服务器上运行点餐系统供别人访问...
  20. 如何使用条件格式在 Excel 中隔行加底纹

热门文章

  1. 【学习笔记】Android Fragments
  2. 服务器关机 正在注销,Win7系统关机一直卡在正在注销如何解决
  3. Spring Data Jpa 复合主键
  4. 三种T检验的详细区分
  5. splitter将winform窗体分为三列
  6. linux任务调度crontab和at
  7. DUC HDC 笔记
  8. 下一代Windows命名为Win 11?微软的下一步要来了
  9. 百度、太一云、趣链、星合、达令共议什么是真区块链【区块链打假】
  10. 太一硅谷实验室合伙人杨虎成:区块链草莽时代进入倒计时,马太效应开始显现...