- 博客(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-18 16:09:47 842
原创 加热系统加入达温即停和保温功能
只开启一次加热功能, 下次开启加热,需用户手动确认。 我们前一节, 是通过控制io口, 直接控制加热的开关, 但是这太简单粗暴了, 如果只是那样, 和普通的家居电器,是没区别的, 我们想要更智能一点, 就是像咱们自己家的热水壶那样, 水烧滚了(水温达到100摄氏度), 就自动停止了.我们通过传入水温阈值和水温, 通过对比判断, 如果水温没达到阈值, 就开启加热, 如果水温达到阈值, 就关闭加热(注意,我们底层写的有判断开关加热的状态, 所以不会重复开关器件)水温达到, 关闭加热, 水温不到,加热保温。
2024-08-17 22:03:10 401
原创 饮水机功能构建指导思想以及最小试验
我们家庭有小宝宝的用户, 想要达到绝对的安全, 不让小孩子误触,造成烫伤 , 我们就不能直接放水,而是通过一系列检测措施, 只在真正安全的情况下放水, 比如, 放上杯子后, 用户按下开关,在童锁关闭的情况下, 我们才放水。优雅的控制加热和开水, 并且我们直接把此调用函数,放在while循环里面照样可以避免, 重复启动器件的老问题,因为我们在操作器件的时候, 加入了判断状态的控制。但是我们控制加热及其开关,还想要结合其他因素, 比如加热,想结合用户设置的水温阈值, 达温即停,并且用户可以远程控制加热的开关.
2024-08-16 20:23:26 1477
原创 stm32最小系统版烧录方法
① 点击锤子 ->Target-> Code Generation -> 选择version5。② 选择stLink烧录。
2024-08-16 16:48:01 212
原创 智能家居之自动加热与童锁饮水机构建思路
我们做饮水机, 并不做饮水机滤芯, 也不做饮水机的水龙头, 而是做饮水机的逻辑交互功能。因为饮水机涉及到的人机交互可能比较多, 适合我们进行研究思考, 为其他项目的开发提供经验。
2024-08-15 15:28:59 560
原创 jq8900-16p与stm32f103c8t6测试
本文从购买器件, 到连线步骤, 再到驱动的模块原理讲解, 后面根据不同的语音, 进行文字转语音步骤,全在资料导航里面. 本模块后面着重讲解, jq8900快速移植。
2024-08-13 22:27:03 1130
原创 语音模块文字转语音步骤
我们jq8900-16p里面存放的是mp3的音频, 这个音频, 可以使用文字转语音工具, 进行转换, 我们利用免费的工具。
2024-08-13 17:26:19 314
原创 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
原创 创建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
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人