自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(223)
  • 收藏
  • 关注

原创 操作系统的同步互斥

同步互斥是操作系统, 协调进程之间动作和相互关系的一种机制• 背景:在这里头呢, 我们先通过生活中的例子, 先来说明同步互斥到底是个什么样的问题,我们有一些什么样的方法来解决它• 临界区然后是在计算机系统当中, 我们给出三类不同的做法,我们下边会一一来介绍它。

2024-09-20 10:10:35 738

原创 十字链表代码打卡

(M):(N)) //矩阵行列较大者。printf(“行 = %d 列 = %d\n”, mh->row, mh->col);//向右和向下的指针。= q) //输出一行非零元素。//十字链表类型定义。#define M 3 //矩阵行。#define N 3 //矩阵列。printf(“a的十字链表:\n”);

2024-09-10 17:55:39 261

原创 大学生如何不带电脑去机房与屏幕被控解决方案

计算机专业的同学, 应该都有感触, 上计算机实验课, 机房有电脑, 但是有时候没网, 或者需要传输数据, 或者是需要把实验软件带回去自己操作, 所以必须带着自己的笔记本电脑, 但是电脑太重, 并且确实没必要带电脑.

2024-09-04 19:49:16 850

原创 换工作环境后, 开发环境速更步骤

右键网卡, 按照文档, 全一致, 配置, 使用网线网线,两个 路由器, 直接拉过来然后退而求其次的, 黑猫白猫, 抓到老鼠就是好猫, 先来操作前两种方案。

2024-09-02 14:18:45 379

原创 OLED预警系统与按键菜单交互代码实操

OLED顾名思义就是一个屏幕, 我们让一个屏幕在特定的时间, 显示特定的画面, 就是我们所需要的, 因为这里是涉及到环境预警,所以需要加入一个应急接管页面的选项, 所以我们要把按键直接操作画面, 变成按键操作完, 我们根据优先级判断之后, 才能确定要显示的是哪个画面.

2024-09-01 00:10:04 923

原创 饮水机加入Onenet联网代码实操

在上一讲, 我们已经分析了 饮水机各个功能的调试方法, 并且确定了需要调试的变量, 这次我们就进行Onenet的代码实操, 加入联网工程代码, 主要是走个流程.我们加入联网, 主要是把这些变量,上传到服务器, 让我们可视化的实时的观察单片机的内部变量状态。把变量上传到服务器实时观察, 就取代了oled在屏幕上, 观察变量同时我们要修改其中的变量, 所以我们就要在服务器下发修改变量的值, 然后单片机拆包解析后, 赋予本地变量。服务器下发指令, 就代替了, 调试时候的赋予变量和按键赋值, 更具有灵活性。

2024-08-27 18:53:11 683

原创 饮水机复杂交互功能联网调试

饮水机我们从最开始的放水和加热, 逐渐拓展到保温功能, 童锁功能, 红外检测功能, 对于这些复杂的交互功能, 我们如果通过按键进行调试, 会极大的增加我们的开发时间和成本, 如果我们频繁的进行烧录, 则如果涉及到一些中间变量, 则无法进行调试.大家会想到串口, 串口也是可以的, 但是串口发送接受, 太频繁的话, 则会眼花缭乱, 如果我们能够成为上帝, 在程序运行的时候修改并查看变量, 之间的交互状态, 则会方便我们的开发.

2024-08-26 22:04:29 936

原创 饮水机开水前加入童锁判断

本博客修改完的代码工程:https://wwyz.lanzoul.com/iKHks286941g1.定义童锁变量与结构体2.定义童锁变量3.在out_water.h, 包含定义童锁与红外变量的文件4.在out_water.c里面, 出水函数里, 加入童锁判断, 如果锁住, 则不开水调试方法烧录工程, 然后触发 PA5处的按键或红外 , 我们通过修改初始化的童锁, 观看PA7处的小灯是否可以亮, 童锁加入底层, 进一步保证安全性. 后续我们联网调控童锁, 并且开关童锁的时候, 加入更多的 界面

2024-08-22 23:34:26 169

原创 利用已有队列按键, 构造菜单交互

纵览整个OLED 按键菜单交互, 我们收集了按键, 那这些按键, 是如何控制页面切换的呢?我们其实可以充当OLED页面管理员, 当报警的时候, 立即切换页面. 但是当我们在正常模式下, 我们按下了不同类型的按键, 那应该如何去构建交互模型的呢?

2024-08-22 16:40:21 1048

原创 预警系统OLED挑选模式

我们预警系统对于界面的需求, 也很简单, 在普通模式下, 可以显示家居信息, 通过按键交互可以, 显示其他界面. 在预警系统警报的时候, 可以应急显示特定的预警界面. 当警报解除的时候,可以自动回到之前的界面.

2024-08-21 16:58:59 759

原创 利用队列收集单双击和长按按键

当我们仅仅通过在while循环里面进行判断按键类型的标志位, 然后进行操作的时候, 我们的最小例程很小, 所以能够实时的检测到按键,从而触发实验现象.假如我们此时进入了一个事件处理函数呢?并且这个这个函数的操作是不可被打断的, 如果此时我们重复按下多次按键, 标志位只能存放一个数值, 等事件处理完, 我们再处理的时候, 只能处理最后一次按下的按键类型.最常见的就是, 我们使用遥控器, 我们连着按下了多个下箭头, 因为电视太卡, 导致只向下一次, 会极大影响操作体验.

2024-08-20 20:16:25 1428

原创 OLED整体刷新到结合switch刷新方式演变

OLED刷新模式, 其实很简单, 就和prinf输出一样, 只是我们这里利用OLED来输出我们所需要的东西了。至于OLED单独整体刷新, 还是利用switch刷新, 都是形而上学, 形的东西, 至于底层, 江协科技大佬已经帮我整理好了, 我们是站在巨人的肩膀上呦。

2024-08-20 17:53:28 701

原创 OLED文字取模步骤

1.打开取模软件, 点击模式, 选择字符模式2.点击选项,自定义格式,选择 C513.删掉行前缀和行后缀的大括号4.点击确定, 在这里输入文字, 就可以显示了5.然后点击生成字模,鼠标选中复制这些6.这样,我们取模的字就成功了7.接着去黏贴到OLED的配置字库函数就可以了。

2024-08-20 12:19:44 319

原创 按键收集单击,双击和长按

在我们生活中, 按键是必不可少的, 不同的电器, 有不同的按键, 但是按键总有不够用的时候, 那么给与一个按键赋予不同的功能,就必不可少了. 一个按键可以通过按下的时间长短和频次, 来定义其类型。一次按键收集, 都是在一个按键收集周期的, 比如500毫秒内, 我要收集一个按键类型, 在500毫秒内,按键按下一次按键, 那么到达500毫秒后, 我们就宣布答案, 此次按键是单击。同理, 在500毫秒内, 如果我们按下了, 两次按键,那么就是双击, 以此类推。那长按呢?

2024-08-19 20:36:46 736

原创 按键收集模型代码快速复制

【代码】按键收集模型代码快速复制。

2024-08-19 20:12:26 274

原创 放水功能加入红外检测

一切为了安全, 我们本可以直接通过按键放水的, 但是我们此时, 还是为了安全, 所以加入了红外检测杯子后, 才能按下按键开水和设置童锁锁住后不能放水。

2024-08-18 16:09:47 842

原创 测试饮水机红外可用性临时代码

首先新建 infrared 文件夹, 添加两个文件 infrared_cup.h和infrared_cup.c。

2024-08-18 13:57:47 282

原创 加热系统加入达温即停和保温功能

只开启一次加热功能, 下次开启加热,需用户手动确认。​ 我们前一节, 是通过控制io口, 直接控制加热的开关, 但是这太简单粗暴了, 如果只是那样, 和普通的家居电器,是没区别的, 我们想要更智能一点, 就是像咱们自己家的热水壶那样, 水烧滚了(水温达到100摄氏度), 就自动停止了.我们通过传入水温阈值和水温, 通过对比判断, 如果水温没达到阈值, 就开启加热, 如果水温达到阈值, 就关闭加热(注意,我们底层写的有判断开关加热的状态, 所以不会重复开关器件)水温达到, 关闭加热, 水温不到,加热保温。

2024-08-17 22:03:10 401

原创 饮水机功能构建指导思想以及最小试验

我们家庭有小宝宝的用户, 想要达到绝对的安全, 不让小孩子误触,造成烫伤 , 我们就不能直接放水,而是通过一系列检测措施, 只在真正安全的情况下放水, 比如, 放上杯子后, 用户按下开关,在童锁关闭的情况下, 我们才放水。优雅的控制加热和开水, 并且我们直接把此调用函数,放在while循环里面照样可以避免, 重复启动器件的老问题,因为我们在操作器件的时候, 加入了判断状态的控制。但是我们控制加热及其开关,还想要结合其他因素, 比如加热,想结合用户设置的水温阈值, 达温即停,并且用户可以远程控制加热的开关.

2024-08-16 20:23:26 1477

原创 加热和开水解耦代码索引:

666

2024-08-16 19:55:20 196

原创 stm32最小系统版烧录方法

① 点击锤子 ->Target-> Code Generation -> 选择version5。② 选择stLink烧录。

2024-08-16 16:48:01 212

原创 智能家居之自动加热与童锁饮水机构建思路

我们做饮水机, 并不做饮水机滤芯, 也不做饮水机的水龙头, 而是做饮水机的逻辑交互功能。因为饮水机涉及到的人机交互可能比较多, 适合我们进行研究思考, 为其他项目的开发提供经验。

2024-08-15 15:28:59 560

原创 语音播报加入预警系统

我们前一章, 已经把jq8900-16p模块, 单独进行了测试, 可以通过发送命令, 让模块播报设定好的声音。

2024-08-14 18:34:32 1013

原创 jq8900-16p与stm32f103c8t6测试

本文从购买器件, 到连线步骤, 再到驱动的模块原理讲解, 后面根据不同的语音, 进行文字转语音步骤,全在资料导航里面. 本模块后面着重讲解, jq8900快速移植。

2024-08-13 22:27:03 1130

原创 jq8900-16p代码索引

【代码】jq8900-16p代码索引。

2024-08-13 20:38:44 249

原创 语音模块文字转语音步骤

我们jq8900-16p里面存放的是mp3的音频, 这个音频, 可以使用文字转语音工具, 进行转换, 我们利用免费的工具。

2024-08-13 17:26:19 314

原创 JQ8900-16P与stm32最小板连线图

接线图和原理讲解_哔哩哔哩_bilibili

2024-08-13 16:36:46 334

原创 fun状态上传,并可手动控制

续上一节, 我们把fun像小灯一样, 加入了预警工程, 但是我们fun其实还有其他用处, 比如我们人工手动开风扇, 排风, 所以我们需要把fun的状态上传, 然后也可以通过服务器手动控制fun的打开.我们其实就告诉系统, 这次是人工开启的, 你不要关闭风扇, 就可以了. 所以我们在服务器下发fun开启的时候, 赋予一个管理员变量, 当fun底层, 判断管理员变量开启的时候, 就不去关风扇.(6)所以, 为了当管理员权限开启的时候, fun不把风扇关掉, 我们在关闭风扇的底层函数里面, 添加 hand!

2024-08-12 11:02:19 835

原创 电机外设加入应急联网预警工程

(11)下面就是见证奇迹的时候了, 我们记得在fun里面, 把开fun设置转速里面, 把Speed加入进入, 同时我们也可以把转速显示在Oled上, 还有预警信息返回的模式, 也显示出来, 通过结合服务器阈值判断, 从而调试项目.(6)通过观察电机解耦工程, 看看, 还需要包含哪些头文件, 只包含fun.h就可以, 因为我们是预警系统, 自动开启风扇,无需人工了, 后续我们再加入key。(12)再次编译还是出错, 说明我们需要清理一下工程, 然后重新编译, 我们通过 使用江协科技的bat文件,

2024-08-10 23:05:03 1157

原创 清理keil5工程 工作空间

(2)ctrl+s保存, 然后更改文件名为 keilkill.bat(查看,显示文件后缀名)(1)在工程内新建 text文件, 然后把下面代码复制进去。(3)然后在工程目录里面双击,

2024-08-10 22:24:08 267

原创 stm32f103c8t6与TB6612FNG解耦测试

忽略底层,只做上层, 所以前面全部照搬步骤,重在调试大致步骤:(1)创建基本工程(2)创建电机驱动文件夹(3)PWM原理(4)电机转动控制(5)OLED转速显示(6)引入oled库文件(7)OLED显示转速文件工程代码:电机驱动接线原理图步骤:stlink连线:最小例程插线方法。

2024-08-09 22:33:00 1407

原创 TB6612FNG电机驱动连线图

电机索引图

2024-08-09 21:11:30 279

原创 TB6612FNG电机驱动代码

【代码】TB6612FNG电机驱动代码。

2024-08-07 23:03:05 306

原创 创建stm32f103c8t6基本工程

(16)这样我们就可以让程序知道我们创建的文件夹在哪里了, 所以我们后续新建工程, 都这样创建的. 我们从第(9)步开始, 命名不一样,创建的文件不一样罢了.(12)点击user, 然后add, 找到 Source_code , 进入user文件夹, 然后选择all files, 这样就可以自己直接新建文件了。(4)找到我们桌面的刚才新建的文件夹,文件名 , 起自己的工程名字的,不要用空格 , 然后点击保存。(15) 点击 Source_code 里面的 User , 然后选择文件夹。

2024-08-07 22:41:48 371

原创 温湿度阈值联网控制

我们不管使用哪种协议, 哪种解决方案, 我们就目前的情况来看, 我们刚开始是使用 手动修改temp_th和 humi_th的方式, 来实现温湿度阈值的控制.但是对于投入到实际使用的话, 我们还需要使用更方便的联网控制, 所以我们首先利用Onenet的解决方案.

2024-08-06 20:43:31 868

原创 Onenet服务器创建产品和设备

(8)创建了产品的这两个功能, 然后保存, 去根据这个产品, 创建设备。(7)创建产品属性:产品开发->设置物模型->添加自定义功能节点。(3)设备秘钥:(设备管理->设备->详情->设备秘钥)(1)浏览器搜索 Onenet, 或者打开这个网址。温度阈值: (注意标识符是 temp_th)(2)登录注册, 密码特殊符号是 @(1)产品id:EeFC4dZQBP。(3)进入此网址, 设备管理页面。(4)点击产品开发,创建产品。(6)设备接入等信息。根据上传变量进行填写。(2)设备名称:d1。

2024-08-06 18:23:57 468

原创 传入预警信息, 应急处理

定义 deal_mode 变量, 代表我们预警判断后, 应该处于哪种模式分析相关变量:传入了温度,湿度,以及相关阈值,我们通过判断,和之前预演的情况,进行对应的处理。① 先注释 我们之前的代码② 我们虽然没有写好那个预警判断函数, 但是我们先传入数据, 后面根据这些数据进行构建, 这些是没问题的,来跟我走③ 我们先一切从简, 去main.c函数里面定义子函数,等后面我们器件越来越多的时候, 我们再去把他们择出来构建子文件.先在main函数之前声明一下 预警检测函数。

2024-08-06 12:36:31 704

原创 预警器件控制思考

当读取到环境信息与环境阈值的时候, 我们预警系统就要根据这些信息做出判断,是否要启动器件。最简单的就是, 举温度temp的例子, temp(温度)与temp_th(阈值), 通过判断, 得出是否要启动器件.如果在一段时间内, 一直是环境异常, 我们那只需要启动一次器件就可以了, 按照上面的方法, 就会一直重复启动器件. 所以我们在启动器件前, 需要判断一下, 器件的状态, 如果要切换状态的话, 那么我们就操作硬件.

2024-08-02 20:43:06 660

原创 快速索引alarm添加

(6) 在左侧就可以看到alarm文件夹了, 然后我们此时要把这个文件夹加入到环境变量里面, 小锤子-> c/c++ -> 包含文件夹路径。添加预警alarm 文件夹和 temp_led.c , temp_led.h , humi_led.c, humi_led.h。(7)然后一路ok就可以了, 我们接着打开左侧的alarm, 我们去编辑文件。(1)点击品字, 添加alarm, 然后增加文件, 点进Source文件夹。(4)空白处, 右键, 然后新建text文件, 重命名。

2024-08-02 08:15:31 394

原创 最小例程上加OLED显示

参考文档:https://www.cs.montana.edu/courses/spring2009/425/dslectures/Bresenham.pdf。参考文档:https://www.cs.montana.edu/courses/spring2009/425/dslectures/Bresenham.pdf。参考链接:https://blog.csdn.net/myf_666/article/details/128167392。//将小数乘到整数,同时四舍五入,避免显示误差。

2024-08-01 14:22:05 270

打字的那些事儿(光标的快速移动)

脚本实现光标快速移动

2022-12-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除