基于STM32的热带鱼缸控制系统的设计
文章目录
- 一、热带鱼缸控制系统
- 1.题目要求
- 2.思路
- 3.电路仿真
- 3.1 未仿真
- 3.2 开始仿真,显示屏显示水温、浑浊度、光照强度等值
- 3.3 当水温低于阈值,开启加热并声光报警
- 3.4 当浑浊度高于阈值,开启自动换水并声光报警
- 3.5 当光照低于阈值,开启补光并声光报警
- 3.6 手动开启增氧和喂食
- 3.7 远程监控水温等数据,远程控制增氧喂食以及修改温度阈值等
- 4.仿真程序
- 4.1 程序说明
- 4.2 主程序
- 4.3 OLED显示程序
- 4.4 串口指令程序
- 二、总结
一、热带鱼缸控制系统
1.题目要求
部件:
主控:STM32
显示:OLED
温度:防水型DS18B20
浑浊度:TSW-30
光照:光敏电阻
无线通信:蓝牙
继电器5(换水、加热、增氧、喂食、补光)
声光报警:蜂鸣器+LED
按键5
主要功能需求:
1、实时监测水温、水体浑浊度、光照强度,并显示在OLED屏幕上。
2、通过蓝牙模块将监测到的各项数据传输到手机APP,实现远程监控,同时可以通过手机进行远程控制。
3、水温、光照低于阈值或浑浊度高于阈值开启声光报警。当浑浊度超过阈值,自动开启换水;光照低于阈值,开启补光;水温低于阈值,开启加热。
4、通过按键可以开启增氧、喂食,以及修改温度、浑浊度和光照强度的阈值。
2.思路
主控是STM32,这里我们选择常用的STM32F103C8T6单片机
显示:OLED
显示的内容比较多1个界面可能不够显示,所以用多个界面,界面切换选择按键切换
温度:防水型DS18B20
浑浊度:TSW-30(proteus仿真没有该传感器,所以采用滑动变阻器模拟)
光照:光敏电阻
无线通信:蓝牙
继电器*5(换水、加热、增氧、喂食、补光)和 声光报警:蜂鸣器+LED
按键*5
通过按键手动开启/关闭增氧,手动开启/关闭喂食,这里两个按键
要修改温度,浑浊度,光照强度的阈值,一共3个阈值,选择用1个按键来切换选择的阈值,另外2个按键增大/减小阈值,这里三个按键。
3.电路仿真
3.1 未仿真
3.2 开始仿真,显示屏显示水温、浑浊度、光照强度等值
3.3 当水温低于阈值,开启加热并声光报警
3.4 当浑浊度高于阈值,开启自动换水并声光报警
3.5 当光照低于阈值,开启补光并声光报警
3.6 手动开启增氧和喂食
3.7 远程监控水温等数据,远程控制增氧喂食以及修改温度阈值等
远程监控水温,浑浊度,光照强度等数据
远程控制打开增氧,关闭增氧
远程控制打开喂食,关闭喂食
按下切换按键,切换为设置温度阈值界面,更改温度阈值为50
按下切换按键,切换为设置浑浊度阈值界面,更改温度阈值为66
按下切换按键,切换为设置光照阈值界面,更改温度阈值为80
4.仿真程序
4.1 程序说明
主控芯片:STM32F103C8
HSI:64MHZ
Systick: 1ms
浑浊度传感器:ADC(PA0)
光照传感器:LDR(PA2)
DS18B20温度传感器:DAT(PA4)
模拟蓝牙模块(Uart1):9600(PA9:tx1,PA10:rx1)
声光报警:BUZZER(PA15)
按键:
KEY1(PB0)
KEY2(PB1)
KEY3(PB2)
KEY2(PB3)
KEY5(PB4)
换水:RELAY1(PB6)
加热:RELAY2(PB7)
增氧:RELAY3(PB8)
喂食:RELAY4(PB9)
补光:RELAY5(PB10)
OLED显示屏:SCL(PB14),SDA(PB15)
串口协议
举例如发送*Temp50,即设置温度阈值位50度
*TempXX 设置温度阈值 XX取值为0-99
*MuddXX 设置浑浊度阈值 XX取值为0-99
*IlluXX 设置光照阈值 XX取值为0-99
*oxygX 开启/关闭增氧 X取值为0-1
*feedX 开启/关闭喂食 X取值为0-1
*Read 远程监控水温、水体浑浊度、光照强度等数据,
4.2 主程序
/* Includes ------------------------------------------------------------------*/
#include "Drv_UserSystem.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
/*** @brief main function.* @param none* @retval none*/
int main(void)
{UserSystemInit();//用户配置初始化 while (1){ if(stSysTime.flg._10ms + TEN_MILLISECOND < Time_millis()) //10ms{stSysTime.flg._10ms = Time_millis(); Key_Scan();//按键扫描 } if(stSysTime.flg._50ms + FIFTY_MILLISECOND < Time_millis()) //50ms{stSysTime.flg._50ms = Time_millis();ADC_Scan();//采集浑浊度和光照强度 } if(stSysTime.flg._100ms + BEST_MILLISECOND < Time_millis()) //100ms{stSysTime.flg._100ms = Time_millis(); DS18B20_Collect_data();//DS18B20采集温度数据 OLED_Handel();//OLED显示 Forewarning_Handel();//预警函数 Receive_data_Handel();//数据接收判断 IWDG_ReloadCounter();//清开门狗 } }
}
4.3 OLED显示程序
/******************************************************************************** 函数名:OLED_Handel* 描述 :OLED显示* 输入 :void* 输出 :void* 调用 :初始化* 备注 :100ms
*******************************************************************************/
void OLED_Handel(void)
{ if(ADC_Flag){ if(Threshold_switching == 0){OLED_Show_Character(1,1,0,16);//水OLED_Show_Character(1,2,1,16);//温 OLED_Show_Character(1,3,2,16);//: OLED_ShowNum(1,7,Temp_High,2); OLED_ShowString(1, 9, "."); OLED_ShowNum(1,10,Temp_Low,1); OLED_Show_Character(1,6,3,16);//°OLED_ShowString(1, 13, "C");OLED_Show_Character(2,1,4,16);//浑OLED_Show_Character(2,2,5,16);//度OLED_Show_Character(2,3,6,16);//度 OLED_Show_Character(2,4,2,16);//:OLED_ShowNum(2,9,ADC1_Value,2); OLED_ShowString(2, 11, "%"); OLED_Show_Character(3,1,7,16);//光OLED_Show_Character(3,2,8,16);//照OLED_Show_Character(3,3,9,16);//强OLED_Show_Character(3,4,10,16);//度 OLED_Show_Character(3,5,2,16);//: OLED_ShowNum(3,11,ADC2_Value,2); OLED_ShowString(3, 13, "%");}else if(Threshold_switching == 1){OLED_Show_Character(1,1,0,16);//水OLED_Show_Character(1,2,1,16);//温 OLED_Show_Character(1,3,11,16);//阈OLED_Show_Character(1,4,12,16);//值 OLED_Show_Character(1,5,2,16);//: OLED_ShowNum(1,11,Temp_Threshold,2); OLED_Show_Character(1,7,3,16);//°OLED_ShowString(1, 15, "C"); }else if(Threshold_switching == 2){OLED_Show_Character(1,1,4,16);//浑OLED_Show_Character(1,2,5,16);//度OLED_Show_Character(1,3,6,16);//度 OLED_Show_Character(1,4,11,16);//阈OLED_Show_Character(1,5,12,16);//值 OLED_Show_Character(1,6,2,16);//: OLED_ShowNum(1,13,ADC1_Threshold,2); OLED_ShowString(1, 15, "%"); } else if(Threshold_switching == 3){ OLED_Show_Character(1,1,7,16);//光OLED_Show_Character(1,2,8,16);//照 OLED_Show_Character(1,3,11,16);//阈OLED_Show_Character(1,4,12,16);//值 OLED_Show_Character(1,5,2,16);//: OLED_ShowNum(1,13,ADC2_Threshold,2); OLED_ShowString(1, 15, "%"); } }
}
4.4 串口指令程序
/******************************************************************************** 函数名:Send_Cmd1* 描述 :设置温度阈值* 输入 :void* 输出 :void* 调用 :需要时调用* 备注 :举例如发送*Temp50,即设置温度阈值位50度*******************************************************************************/
void Send_Cmd1(void)
{uint8_t i = 0; variable1 = (AsciiToHex(uart1_rx_buf[i+5])*10+AsciiToHex(uart1_rx_buf[i+6]));if(variable1 < 99){Temp_Threshold = variable1;printf("手机设置的温度阈值 = %d\r\n",Temp_Threshold); }else{printf("手机设置的温度阈值超出设置范围 \r\n"); }
}/******************************************************************************** 函数名:Send_Cmd2* 描述 :设置水体浑浊度阈值* 输入 :void* 输出 :void* 调用 :需要时调用* 备注 :*******************************************************************************/
void Send_Cmd2(void)
{uint8_t i = 0;variable2 = (AsciiToHex(uart1_rx_buf[i+5])*10+AsciiToHex(uart1_rx_buf[i+6]));if(variable2 < 99){ADC1_Threshold = variable2;printf("手机设置的水体浑浊度阈值 = %d\r\n",ADC1_Threshold); } else{printf("手机设置的水体浑浊度阈值超出设置范围 \r\n"); }
}/******************************************************************************** 函数名:Send_Cmd3* 描述 :设置光照阈值* 输入 :void* 输出 :void* 调用 :需要时调用* 备注 :*******************************************************************************/
void Send_Cmd3(void)
{uint8_t i = 0;variable3 = (AsciiToHex(uart1_rx_buf[i+5])*10+AsciiToHex(uart1_rx_buf[i+6]));if(variable3 < 99){ADC2_Threshold = variable3;printf("手机设置的光照阈值 = %d\r\n",ADC2_Threshold);} else{printf("手机设置的光照阈值超出设置范围 \r\n"); }
}/******************************************************************************** 函数名:Send_Cmd4* 描述 :开启/关闭增氧 * 输入 :void* 输出 :void* 调用 :需要时调用* 备注 :*******************************************************************************/
void Send_Cmd4(void)
{uint8_t i = 0;variable4 = AsciiToHex(uart1_rx_buf[i+5]);if(variable4 == 0){Relay3_Off(); printf("关闭增氧\r\n");} else if (variable4 == 1){Relay3_On(); printf("打开增氧 \r\n"); } else {printf("手机设置的供氧模式超出设置范围 \r\n"); }
}/******************************************************************************** 函数名:Send_Cmd5* 描述 :开启/关闭喂食* 输入 :void* 输出 :void* 调用 :需要时调用* 备注 :*******************************************************************************/
void Send_Cmd5(void)
{uint8_t i = 0;variable5 = AsciiToHex(uart1_rx_buf[i+5]);if(variable5 == 0){Relay4_Off(); printf("关闭喂食\r\n");} else if (variable5 == 1){Relay4_On(); printf("打开喂食 \r\n"); } else {printf("手机设置的喂食模式超出设置范围 \r\n"); }
}/******************************************************************************** Function : Receive_data_Handel* Description : 数据接收判断* Input : 无* Return : 无* Call : 100ms* Others :*******************************************************************************/
void Receive_data_Handel(void)
{uint8_t i = 0;if(uart1_rx_finsh){ for(i = 0;i< 20; i++){if(uart1_rx_buf[i] == '*') {switch(uart1_rx_buf[i+1]){case 'T':Send_Cmd1();break;//*TempXX case 'M':Send_Cmd2();break;//*MuddXXcase 'I':Send_Cmd3();break;//*IlluXX case 'o':Send_Cmd4();break;//*oxygX case 'f':Send_Cmd5();break;//*feedX case 'R':Printf_Task();break;//*Read default:break; } }}uart1_rx_finsh = 0; uart1_rx_count = 0;memset(uart1_rx_buf,0,RX_MAX_NUM); }
}/******************************************************************************** Function : Printf_Task* Description : 打印数据任务* Input : 无* Return : 无* Call : 1s* Others :*******************************************************************************/
void Printf_Task(void)
{if(ADC_Flag){ printf("水温=%d.%d 水体浑浊度=%d 光照强度=%d\r\n",Temp_High,Temp_Low,ADC1_Value,ADC2_Value); }
}
二、总结
今天主要讲了基于STM32的热带鱼缸控制系统的设计。
感谢你的观看!
相关文章:
基于STM32的热带鱼缸控制系统的设计
文章目录 一、热带鱼缸控制系统1.题目要求2.思路3.电路仿真3.1 未仿真3.2 开始仿真,显示屏显示水温、浑浊度、光照强度等值3.3 当水温低于阈值,开启加热并声光报警3.4 当浑浊度高于阈值,开启自动换水并声光报警3.5 当光照低于阈值,…...
unity学习7:unity的3D项目的基本操作: 坐标系
目录 学习参考 1 unity的坐标系 1.1 左手坐标系 1.2 左手坐标系和右手坐标系的区别 1.3 坐标系的原点(0,0,0) 2 坐标系下的具体xyz坐标 2.1 position这里的具体xyz坐标值 2.2 父坐标 2.3 世界坐标和相对坐标 2.3.1 世界坐标 2.3.2 相对坐标 2.4 父物体,…...
认识一下,轻量消息推送 Server-Sent Events
什么是 SSE(Server-Sent Events) Server-Sent Events(简称 SSE)是一种在浏览器中实现单向实时通信的技术。它允许服务器通过 HTTP 持久连接向客户端发送实时更新的数据流。这种通信模式非常适用于需要频繁向客户端推送数据的场景,例如股票行情更新、实时聊天通知、社交媒…...
Python爬虫入门指南:从零开始抓取数据
Python爬虫入门指南:从零开始抓取数据 引言 在大数据时代,数据是新的石油。而爬虫作为获取数据的重要手段,受到了越来越多的关注。Python作为一门强大的编程语言,其简洁易用的特性使得它成为爬虫开发的首选语言。本篇文章将带你…...
c++ vector 使用find查找指定元素方法
在 C 中,std::vector 是一个动态数组,用于存储同类型元素的序列。如果你想在 std::vector 中查找指定元素,可以使用 std::find 算法。std::find 是定义在 <algorithm> 头文件中的标准库函数。 以下是一个示例代码,展示了如…...
计算机组成原理——控制单元设计
组合逻辑设计...
特征点检测与匹配——MATLAB R2022b
特征点检测与匹配在计算机视觉中的作用至关重要,它为图像处理、物体识别、增强现实等领域提供了坚实的基础。 目录 Harris角点检测 SIFT(尺度不变特征变换) SURF(加速稳健特征) ORB(Oriented FAST and Rotated BRIEF) 总结 特征点检测与匹配是计算机视觉中的一项基…...
在 IntelliJ IDEA 中开发 GPT 自动补全插件
背景与目标 随着 AI 的发展,GitHub Copilot 等智能代码补全工具在开发者中获得了广泛的应用,极大地提高了编程效率。本篇文章将教你如何开发一个 IntelliJ IDEA 插件,使用 OpenAI 的 GPT API 来实现类似 Copilot 的代码自动补全功能。通过这…...
主键有多种设计
1. 自增ID id bigint NOT NULL AUTO_INCREMENT COMMENT 主键ID 优点: 简单直观自动生成递增有序,对索引友好 缺点: 可能暴露业务信息分布式系统下需要特殊处理合并数据时可能冲突 2. UUID/GUID id char(36) NOT NULL COMMENT 主键ID …...
SCT12A0,一款2.7V-14V Vin、30W全集成同步升压转换器
SCT12A0是一款高效率,全集成 13mΩ 高侧MOSFET和11mΩ低侧MOSFET的同步升压转换器,支持 2.7V 至 14V 输入电压范围,最高可达12A 开关电流。开关电流限可以通过外部电阻进行调节。 SCT12A0采用自适应恒定关断时间峰值电流控制以提供快速瞬态。…...
Python 数据结构揭秘:栈与队列
栈(Stack) 定义 栈是一种后进先出(Last In First Out, LIFO)的数据结构。它类似于一个容器,只能在一端进行插入和删除操作。栈有两个主要的操作:push(入栈)和 pop(出栈…...
3、蓝牙打印机按键 - GPIO输入控制
1、硬件 1.1、看原理图 初始高电平,按键按下导通处于低电平状态。 PB8号引脚。 1.2、看手册 a、看系统架构 GPIOB号端口有APB2总线控制 b、RCC使能 RCC->APB2ENR的第3位控制GPIOB使能。 c、GPIOB寄存器配置 浮空输入模式下,I/O的电平状态是不确定…...
LeetCode--复原IP地址(面试手撕算法高频题)
题目描述:有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.…...
050_小驰私房菜_MTK Camera debug, data rate 、mipi_pixel_rate 确认
mipi_pixel_rate = data rate * 4 / 10 (4 是表示4lane,10表示raw数据是10bit) mipi_pixel_rate 信息,我们可以通过 sentest命令打印看到: 下面的信息我们可以看到,mipi_pixel_rate = 501.357739Mpps,mipi rate = 10000000,是对应的我们驱动文件里面配置写的mipi_pixel_r…...
TCP粘/拆包----自定义消息协议
今天是2024年12月31日,今年的最后一天,希望所有的努力在新的一年会有回报。❀ 无路可退,放弃很难,坚持很酷 TCP传输 是一种面向二进制的,流的传输。在传输过程中最大的问题是消息之间的边界不明确。而在服务端主要的…...
conda指定路径安装虚拟python环境
DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” -------------------------------------------------------------…...
FPGA、STM32、ESP32、RP2040等5大板卡,结合AI,更突出模拟+数字+控制+算法
板卡选择困难症了?如果你也想玩FPGA、STM32、ESP32、RP2040相关的板卡,不如看看以下几款板卡,如果正巧碰上能实现你想要做的项目呢~ 01 小脚丫FPGA STEP BaseBoard V4.0套件 STEP BaseBoard V4.0是第4代小脚丫FPGA扩展底板(点击了…...
Flume拦截器的实现
Flume conf文件编写 vim file_to_kafka.conf#定义组件 a1.sources r1 a1.channels c1#配置source a1.sources.r1.type TAILDIR a1.sources.r1.filegroups f1 a1.sources.r1.filegroups.f1 /Users/zhangjin/model/project/realtime-flink/applog/log/app.* # 设置断点续传…...
【数据仓库】hadoop web UI 增加账号密码认证
升级了hadoop版本到3.3.6,未配置任何鉴权,默认端口9870 8088开放到了公网,结果没几天就被挖矿攻击了。通过开放的端口提交了很多非法任务到yarn上,并成功在服务器执行了恶意脚本。这次是真实真切的感受了,网络环境的险恶,以前仅仅是别人的案例来提高自己的安全意识,这…...
《特征工程:自动化浪潮下的坚守与变革》
在机器学习的广阔天地中,特征工程一直占据着举足轻重的地位。它宛如一位幕后的工匠,精心雕琢着原始数据,将其转化为能够被机器学习模型高效利用的特征,从而推动模型性能迈向新的高度。然而,随着技术的飞速发展…...
【亚马逊云科技】基于Amazon EKS部署高可用的OceanBase的最佳实践
一、前言 随着企业业务的快速发展和数据量的不断增长,高性能、高可用的数据库解决方案成为了关键需求。OceanBase作为一款分布式关系型数据库,以其高扩展性、高可用性和高性能的特点,逐渐受到企业的广泛关注。然而,在复杂的分布式…...
新能源电动汽车动力电池技术
新能源电动汽车动力电池技术是新能源汽车发展的核心之一,以下是动力电池技术的一些关键方面: 技术进展 能量密度提升:近年来,动力电池的能量密度有了显著提升,从2010年的100Wh/kg提高到2024年的300Wh/kg。能量密度的…...
小程序组件 —— 30 组件 - 背景图片的使用
在编写小程序的样式文件时,可以使用 background-image 属性来设置元素的背景图像;但是这个属性在微信小程序中使用时存在坑; 注意事项:微信小程序中的 background-iamge 不支持本地路径!需要使用网络图片,…...
量子力学复习
黑体辐射 热辐射 绝对黑体: (辐射能力很强,完全的吸收体,理想的发射体) 辐射实验规律: 温度越高,能量越大,亮度越亮 温度越高,波长越短 光电效应 实验装置…...
n8n - AI自动化工作流
文章目录 一、关于 n8n关键能力n8n 是什么意思 二、快速上手 一、关于 n8n n8n是一个具有原生AI功能的工作流自动化平台,它为技术团队提供了代码的灵活性和无代码的速度。凭借400多种集成、原生人工智能功能和公平代码许可证,n8n可让您构建强大的自动化…...
1.1.7 master公式的使用
code 递归例子 – 返回最大数据 # 递归行为, 返回[L, R]的最大值 # 递归:base case; 遍历;返回值 from test1 import *def getMax(arr):return process(arr, 0, len(arr)-1)def process(arr, L, R):if (L R):return arr[L] #…...
Windows系统安装Docker Desktop
文章目录 注意事项安装步骤官网下载软件安装到其它盘符操作(如果就想安装到C盘可以跳过这个步骤, 直接执行文件)等待出现软件安装界面Windows系统的配置软件的一些必要设置(以下设置需要点击apply才能生效,如果点不了,那就是安装后,出现了错误…...
快速上手LangChain(四)LangChain Hub和LangSmith
文章目录 快速上手LangChain(四)LangChain Hub和LangSmith什么是LangChain HubLangChain Hub功能 LangSmith使用 快速上手LangChain(四)LangChain Hub和LangSmith 什么是LangChain Hub LangChain Hub官网地址:https:…...
jquery实现的网页版扫雷小游戏源码
源码介绍 这是一款基于jQuery实现的经典扫雷小游戏源码,玩家根据游戏规则进行游戏,末尾再在确定的地雷位置单击右键安插上小红旗即可赢得游戏!是一款非常经典的jQuery游戏代码。本源码改进了获胜之后的读数暂停功能。 效果预览 源码下载 j…...
C#运动控制系统:雷赛控制卡实用完整例子 C#雷赛开发快速入门 C#雷赛运动控制系统实战例子 C#快速开发雷赛控制卡
雷赛控制技术 DMC系列运动控制卡是一款新型的 PCI/PCIe 总线运动控制卡。可以控制多个步进电机或数字式伺服电机;适合于多轴点位运动、插补运动、轨迹规划、手轮控制、编码器位置检测、IO 控制、位置比较、位置锁存等功能的应用。 DMC3000 系列卡的运动控制函数库功…...
理解linux内核中的几种地址
1. 前言 《Linux内核完全注释》这本书提到了几种Linux内核中的几种地址,实地址,有虚拟地址,逻辑地址,线性地址,物理地址。除了物理地址以外,其他几种容易弄混淆。这里做一下笔记,讲一下我的理解…...
MySQL(二)MySQL DDL数据库定义语言
1. MySQL DDL数据库定义语言 1.1. MySQL定义语言 进入MySQL mysql -u root -p(回车后输入密码,即可进入mysq1)1.1.1. 数据库操作 (1)查看数据库 mysql>show databases;注:MySQL语句分隔符为“;” mysql库很重要它里面有…...
《Vue3实战教程》19:Vue3组件 v-model
如果您有疑问,请观看视频教程《Vue3实战教程》 组件 v-model 基本用法 v-model 可以在组件上使用以实现双向绑定。 从 Vue 3.4 开始,推荐的实现方式是使用 defineModel() 宏: vue <!-- Child.vue --> <script setup> co…...
spring boot通过文件配置yaml里面的属性
yaml文件 fsg: batch-approval:# 批量审批batch-approval:pool:core-size: 2max-size: 10queue-capacity: 100keep-alive: 60name-prefix: ApprovalThread-shutdown:await-termination: trueawait-termination-period: 60ConfigurationProperties配置 import lombok.Data; imp…...
解析 World Football Cup 问题及其 Python 实现
问题描述 本文讨论一道关于足球锦标赛排名规则的问题,来自 Berland 足球协会对世界足球规则的调整。题目要求对给定的比赛数据进行计算,并输出能进入淘汰赛阶段的球队列表。以下是规则详细描述。 题目规则 输入格式: 第一行包含一个整数 …...
DS复习提纲模版
数组的插入删除 int SeqList::list_insert(int i, int item) { //插入if (i < 1 || i > size 1 || size > maxsize) {return 0; // Invalid index or list is full}for (int j size-1; j > i-1; j--) { // Shift elements to the rightlist[j1] list[j];}li…...
算法解析-经典150(链表、二叉树)
文章目录 链表1.环形链表1.答案2.思路 2.两数相加1.答案2.思路 3.合并两个有序链表1.答案2.思路 4.反转链表 II1.答案2.思路 5.反转链表1.答案2.思路 6.K 个一组翻转链表1.答案2.思路 7.删除链表的倒数第 N 个结点1.答案2.思路 8.删除排序链表中的重复元素 II1.答案2.思路 9.旋…...
蓝桥杯-Python
1. 冒泡排序 算法步骤: 比较相邻元素,如果第一个大于第二个则交换从左往右遍历一遍,重复第一步,可以保证最大的元素在最后面重复上述操作,可以得到第二大、第三大、… n int(input()) a list(map(int, input()…...
语雀导入md文件图片丢失
经常被困扰是,从语雀导入md文件,即使知道把md文件和本地图片文件夹打包成zip进行导入,还是出现图片丢失 解决方式1: 把图片和md文件放到同个目录下,重新打包成zip文件,导入后有图片了 解决方式2…...
【Logstash02】企业级日志分析系统ELK之Logstash 输入 Input 插件
Logstash 使用 Logstash 命令 官方文档 https://www.elastic.co/guide/en/logstash/current/first-event.html #各种插件 https://www.elastic.co/guide/en/logstash/current/input-plugins.html https://www.elastic.co/guide/en/logstash/current/filter-plugins.html htt…...
HP 电脑开机黑屏 | 故障判断 | BIOS 恢复 | BIOS 升级
注:本文为 “HP 电脑开机黑屏 | 故障判断 | BIOS 恢复 | BIOS 升级” 相关文章合辑。 引文图片 csdn 转储异常,重传。 篇 1:Smart-Baby 回复中给出故障现象判断参考 篇 2、篇3 :HP 官方 BIOS 恢复、升级教程 开机黑屏,…...
Nginx代理本地exe服务http为https
Nginx代理本地exe服务http为https 下载NginxNginx命令exe服务http代理为https 下载Nginx 点击下载Nginx 下载好之后是一个压缩包,解压放到没有中文的路径下就可以了 Nginx命令 调出cmd窗口cd到安装路径 输入:nginx -v 查看版本 nginx -hÿ…...
enzymejest TDD与BDD开发实战
一、前端自动化测试需要测什么 1. 函数的执行逻辑,对于给定的输入,输出是否符合预期。 2. 用户行为的响应逻辑。 - 对于单元测试而言,测试粒度较细,需要测试内部状态的变更与相应函数是否成功被调用。 - 对于集成测试而言&a…...
Linux菜鸟级常用的基本指令和基础知识
前言:很多Linux初学者都会头疼于指令太多记不住,笔者刚学习Linux时也是如此,学习Linux指令时,学了后面的指令,前面的指令也会忘的差不多了,针对于以上这些情况,笔者今天来分享一篇Linux菜鸟级的常用指令的博…...
Spark创建多种数据格式的DataFrame
假如我们要通过RDD[Row]创建一个包含多个列的DataFrame,重点是列的数据类型可能会包含多个,这时候需要有一点技巧。 | uid | user_name | age | income | |:----|:----------|:----|:-------| | 1111 | nituchao | 21 | 123.0 | 这个DataFrame里包含…...
C语言:指针
1. 什么是指针? 在C语言中,指针是一个变量,用于存储另一个变量的内存地址。指针不是直接保存值,而是保存数据所在的内存位置。 语法: type *pointer_name; 例如: int *ptr; 在这个例子中,pt…...
kafka生产者专题(原理+拦截器+序列化+分区+数据可靠+数据去重+事务)
目录 生产者发送数据原理参数说明代码示例(同步发送数据)代码示例(异步) 异步和同步的区别同步发送定义与流程特点 异步发送定义与流程特点 异步回调描述代码示例 拦截器描述代码示例 消息序列化描述代码示例(自定义序…...
谷歌2025年AI战略与产品线布局
在2024年12月的战略会议上,谷歌高层向员工描绘了2025年的宏伟蓝图,特别是在人工智能(AI)领域。这一年被定位为AI发展的关键转折点,谷歌计划通过一系列新产品和创新来巩固其在全球科技领域的领导地位。本文将深入探讨谷歌的2025年AI战略、重点产品以及竞争策略。 一、整体…...
Kernel Stack栈溢出攻击及保护绕过
前言 本文介绍Linux内核的栈溢出攻击,和内核一些保护的绕过手法,通过一道内核题及其变体从浅入深一步步走进kernel世界。 QWB_2018_core 题目分析 start.sh qemu-system-x86_64 \-m 128M \-kernel ./bzImage \-initrd ./core.cpio \-append "…...
QT-窗口嵌入外部exe
窗口类: #pragma once #include <QApplication> #include <QWidget> #include <QVBoxLayout> #include <QProcess> #include <QTimer> #include <QDebug> #include <Windows.h> #include <QWindow> #include <…...