- 博客(61)
- 资源 (4)
- 问答 (1)
- 收藏
- 关注
原创 esp-idf GPIO与GPIO中断 api详解
ESP32有10个内部电容式触摸传感器。这些传感器可以感知任何带有电荷的东西的变化,比如人的皮肤。因此,它们可以检测到用手指触摸GPIO时引起的变化。这些引脚可以很容易地集成到电容式焊盘中,并取代机械按钮。电容式触摸引脚还可以用来将ESP32从深度睡眠中唤醒。
2023-06-30 16:38:00 1337 2
原创 stl容器vector笔记
std::vector 是封装动态数组的顺序容器。头文件#include 常见操作复杂度随机访问——常数 O(1)在末尾插入或移除元素——均摊常数 O(1)插入或移除元素——与到 vector 结尾的距离成线性 O(n)
2023-06-15 21:32:08 774
原创 C语言标准I/O
流是C语言对I/O操作的一种抽象,在C语言的I/O操作只是从程序移进或移出字节,这便是字节流。C程序中大多数流是全缓冲的,即写入数据时,程序先把数据放入缓存(buffer),等到缓存满了,再把里面的数据会一次性刷新(flush)到设备或磁盘文件。这时,缓存区就空了,程序再把新的数据放入缓存,重复整个过程。
2023-01-29 01:21:37 626
原创 socket网络编程常用C语言api函数(Linux)
网络编程常用函数 字节序 ip转换 地址结构体 socket相关函数 数据读写 获取地址信息 获取或者设置套接字属性 通过域名或地址获取主机信息
2022-09-27 02:32:25 857
原创 Linux timerfd
获得定时器距离下次超时还剩下的时间,成功返回0,失败返回-1,并存储错误码到errno。如果调用时定时器已经到期且it_interval不为0,调用此函数之后定时器重新开始计时。启动或关闭fd对应的定时器,成功返回0,失败返回-1,并存储错误码到errno。timerfd是Linux提供的一个纳秒级的定时器文件,利用文件描述符fd操作。如果不为NULL,则用来存储当前时间。设置第一次超时时间和之后的超时周期。创建一个timer对象并返回。...
2022-07-28 21:43:22 496
原创 Linux时间相关C库函数
由UNIX内核提供的基本时间服务是国际标准时间公元1970年1月1日00:00:00以来经过的秒数。这种秒数是以数据类型 time_t表示的。我们称它们为日历时间,由函数time()内的系统调用获取。tm结构time_t和tm结构可通过下面的函数转换将time_t或tm表示成字符串,形如 “Wed Jun 30 21:49:08 1993\n”strftime函数根据 format 中定义的格式化规则,格式化结构 tm 表示的时间,并把它存储在s中。如果产生的字符串小于 size 个
2022-06-26 23:29:56 233
原创 Linux文件系统相关C函数
stat()函数获取文件信息stat结构体:st_mode如下表,其中15-12 位保存文件类型,11-9 位保存执行文件时设置的信息, 8-0 位保存文件访问权限粘住位(t位)sticky bit:现在的作用为若目录具有该位,则表示在此目录下的文件只能被该文件所有者、此目录所有者或root来删除或改名。POSIX中定义了检查这些文件类型的宏定义:utime()函数可用于修改文件最后读写的时间文件权限管理chmod更改文件权限 直接使用shell命令 chmod
2022-06-26 19:49:58 718
原创 C语言面试题笔记
解释 char *const*(*next)();定义了函数指针next,next指向了一个无参且返回值为一个指向一个常量指针的字符型指针的函数。解释 char* (*c[10])(int **p); 定义了函数指针数组c,c中的元素是指向参数为int型二级指针且返回值为字符型指针的函数的函数指针。以下代码的问题char*s = "AAA";printf("%s",s);s[0] = 'B';printf("%s",s);"AAA"为只读的字符串常量,修改它会引发段错误..
2022-03-16 23:58:14 764
原创 Makefile的简单使用方法(不详细)
Makefile概述Makefile的规则示例变量符号说明示例概述Makefile是类似于shell的一种脚本文件,其描述了整个工程所有文件的编译顺序、编译规则,实现了“自动化编译”的效果,免去了手动编译时带来的麻烦,且在Makefile中可以使用系统shell所提供的任何命令来完成想要的工作。make是一个命令工具,它为Makefile脚本文件进行解释。当make 命令被执行时,它会扫描当前目录下Makefile找到目标以及其依赖。如果这些依赖自身也是目标,继续为这些依赖扫描Makefile
2021-10-04 23:22:50 1985
原创 C语言FTP云盘项目
myftp功能代码头文件:用到的函数:服务端代码:客户端代码:测试客户端:服务端:功能客户端与服务端通过socket建立连接后,客户端发送命令,服务端完成相应服务命令:命令说明ls查看服务端文件pwd查看服务端路径cd服务端切换目录myls查看本地文件mypwd查看本地路径mycd本地切换目录get从服务端下载文件到本地put上传文件到服务端quit客户端退出代码头文件:myftp.h#ifn
2021-10-01 18:21:11 602 2
原创 51单片机驱动红外编解码模块(YS-IRTM)
红外编解码模块YS-IRTM模块模块组成模块通信发射指令说明:模块反馈解码信息输出51单片机测试代码YS-IRTM模块这个模块在某宝非常容易买到,内置刷好了固件的单片机,串口给指令就能直接发射NEC红外信号,用串口助手调试非常方便模块组成红外发射头:用于发射红外信号, 波长为940nm 38k NEC编码信号的发射红外接收头:用于接收 NEC 红外信号, 进而单片机进行分析解码操作红外头扩展: 该接口为红外发射头的扩展, 可以连接多个红外发射头( 常称红外发射模块) , 用于安放到不同
2021-09-30 20:54:42 6790
原创 基于树莓派的智能家居程序设计
智能家居概述设备文件指令文件主函数概述为编程方便,使用WiringPi库函数对gpio引脚控制,通过语音模块和socket来接收命令,每一个设备放在一个单独的文件里,通过头文件提供的api供主函数调用,语音和socket同理。把若干设备和指令分别用链表连接起来,方便查找。设备链表:pdevHead > light1 > light2 > light3 > light4 > fire > beep > dh11 > NULL指令链表:pcmdHead
2021-09-26 22:26:29 3143
原创 编写一个简单的智能家居APP
智能家居APP简介开头页面布局文件代码主页面布局文件代码简介这个APP是为了通过socket传递指令给树莓派,并从树莓派获取温湿度等信息而设计的,包含两个页面。开头页面hello页面。右上角放一个倒计时,倒计时结束后跳转到主页面。此页面类似一些APP的开头广告。布局文件<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/
2021-09-26 19:30:49 703
原创 树莓派驱动DH11温湿度传感器
DH11温湿度传感器电气特性时序图编程步骤数据格式测试代码DHT11器件只有一根数据线,即单总线通信,所以对于时序要求比较大。由于DHT11是主从结构,所以只有当主机发起通信请求时,从机才会开始应答。电气特性时序图编程步骤DHT11上电后,DATA数据线由上拉电阻拉高一直保持高电平并使DATA引脚处于输入状态,时刻检测外部信号主机发送低电平,拉低SDA电平,至少超过18ms(最大不超过30ms),然后主机拉高电平,等待从机做出应答信号。从机在10~ 20us内获取总线控制权,并拉低
2021-09-21 01:10:18 524
原创 安卓APP使用WebView组件浏览网页
WebView代码布局代码public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final WebView
2021-09-19 17:35:24 460
原创 安卓APP作为客户端连接电脑
client页面布局Java代码页面布局<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="v
2021-09-18 20:16:59 275
原创 Java.套接字
Socket服务端代码客户端代码服务端代码public class Main { public static void main(String[] args){ try { ServerSocket socket = new ServerSocket(3333); System.out.println("套接字创建成功,等待连接"); while(true){ final Socket con = socket.accept(); Syst
2021-09-16 22:44:49 115
原创 做一个简单的吓人App(页面跳转)
吓人App页面1:广告页面2:登录页面3:吓人通过页面跳转,在吓人页面放一个恐怖图片并播放尖叫声达到吓人的目的页面1:广告第一个页面可以放一个温馨的图片,background设置成图片就可以了<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/a
2021-09-14 17:38:32 619
原创 实现安卓按键响应的四种方式
按键响应1.设置onClick属性2.新建子类实现接口1.设置onClick属性在.xml文件中使用onClick可以指定一个响应函数,这个函数在java中实现,按键被点击后会去调用这个函数设置.xml中的onClick属性,指定一个函数<Button android:onClick="buttonBeClieked"/>在Java里实现该函数public void buttonBeClieked(View v){ //View在android.view.View
2021-09-12 23:21:38 423
原创 Java.泛型
泛型概念泛型类泛型接口泛型方法限制泛型的使用类型泛型的通配符概念泛型(JDK1.5后引入),即“参数化类型”,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。泛型可以在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的。类型参数的意义是告诉编译器这个集合中要存放实例的类型,从而在添加其他类型时做出提示,在编译时就为类型安全做了保证。这种参数类型可以用在类、接口和方法的创建中,分别称
2021-09-09 23:49:42 100
原创 Java.异常
异常Exception概念异常分类异常处理机制异常抛出自定义异常概念在程序运行过程中出现的错误,称为异常。异常就是程序运行过程中出现了不正常现象导致程序的中断。在Java中,把各种异常现象进行了抽象形成了异常类。异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。程序错误分为三种:编译错误:程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置。运行时错误:程序在执行时,运行环境发现了不能执行的操作。逻辑错误:程序没有按照
2021-09-08 23:39:17 98
原创 Java.多态
多态polymorphism概述对象的上下转型向上转型向下转型多态案例-打印机概述多态性是指同一个操作作用于某一个对象时可以有不同的解释,产生不同的执行结果。多态存在的三个必要条件:需要存在继承或实现关系方法的重写父类引用指向子类对象:Parent p = new Child()多态通过分离做什么和怎么做从一个角度实现了接口和实现进行分离,消除了类型之间耦合关系,提高了程序的拓展性和后期维护性。示例class Animal{ public String name;
2021-09-08 19:23:20 122
原创 Java.内部类
内部类概述⭐️成员内部类⭐️匿名内部类静态内部类局部内部类概述内部类是在一个类的内部定义的一个类内部类可以分为四种:成员内部类、局部内部类、匿名内部类、静态内部类内部类可以通过private、protected修饰符很好的实现隐藏内部类可以访问外部类所有成员外部类不能直接访问内部类成员,需先建立内部类的对象后访问⭐️成员内部类成员内部类属于外部类的示例成员,可以通过public、default、protected、private修饰在成员内部类中要访问外部类的成员应采用 外
2021-09-07 23:01:09 83
原创 Java.抽象类和接口
抽象类概念抽象类的使用概念Java中可以定义没有方法体的方法,该方法由子类来具体实现。该没有方法体的方法我们称之为抽象方法,含有抽象方法的类我们称之为抽象类。抽象方法和抽象类用abstract来修饰。用abstract修饰的类不一定含有抽象方法,但是如此便没有修饰的意义了。抽象方法代表一种不确定的操作或行为。抽象方法不能被调用,抽象类不能被实例化。abstract class A{ //抽象类 public void fun(){ //普通方法 .
2021-09-06 22:19:40 117
原创 Java.继承
继承继承的概述和实现super关键字方法重写Override继承的概述和实现继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。父类更抽象,子类更具体。如下图,有害垃圾、可回收垃圾等它们都带有父类垃圾的特征,但是它们又拥有自己更具体的属性,像有害、可回收等。Java会给每一个没有设置父类的类,自动添加一个父类就是Object 。(除了Object类都是子类)。在 Java 中通过 extends 关键字可
2021-09-06 18:15:50 99
原创 Java.封装
封装Encapsulation封装的概念访问修饰符属性的封装方法的封装构造方法(构造器)this关键字static关键字封装的概念隐藏对象的实现细节,不让外部直接访问到。将数据和方法包装进类中,加上具体实现的隐藏(访问修饰符)共同被称作封装,其结果是一个同时带有特征和行为的数据类型。定义类,定义其属性、方法的过程称为封装类访问修饰符private (私有的): 在同一类内可见。不能修饰类(外部类)。package/friendly/default (缺省) : 在同一包内可见。prote
2021-09-04 20:56:56 119
原创 C语言字符串概念及常用API
字符串1️⃣概述2️⃣字符操作字符分类字符转换3️⃣常用字符串函数str✨`include< string.h>`计算长度strlen拷贝strcpy&strncpy比较strcmp&strncmp拼接strcat查找字符strchr查找子串strstr字符串分割strtok4️⃣内存操作memmemcpymemmovememcmpmemchr⭐️memset⭐️1️⃣概述字符串指的是零个或多个字符的序列,并且以 ‘\0’ (ASCII 0)结尾C语言里并没有字符串
2021-09-02 22:50:46 437
原创 YS-LDV7语音模块修改命令方法
YS-LDV7语音模块接线验货测试方法配套程序识别语句修改方法1.添加关键词和识别码2.定义识别码3.修改处理函数接线主机<——————> 语音模块5V <———————> 5Vtx <———————> rxrx <———————> txgnd<——————> gnd验货测试方法口令模式需要先按一级口令, 识别成功后才能继续喊二级口令以此 循环。 内部默认的口令如下:一级口令: 小杰二级口令: 代码测试开发板验证开
2021-08-28 15:52:29 617 1
原创 树莓派驱动HC-SR04超声波模块
超声波模块工作原理gettimeofday函数代码编写工作原理单片机引脚触发Trig测距,给至少 10us 的高电平信号;模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;有信号返回,通过 IO 输出一高电平,并单片机定时器计算高电平持续的时间;超声波从发射到返回的时间.计算公式:测试距离=(高电平时间*声速(340M/S))/2gettimeofday函数我们可以使用c库函数gettimeofday()函数来得到精确时间,它可以返回自1970-01-01 00
2021-08-27 23:47:32 450 2
原创 树莓派串口通信(C语言wiringPi库)
串口通信配置gpio串口wringPi库串口函数代码测试配置gpio串口打开gpio串口输入命令sudo raspi-config选择Interfacing找到serial并打开选择OK树莓派包含两个串口硬件串口(/dev/ttyAMA0),硬件串口由硬件实现,有单独的波特率时钟源,性能高,可靠。一般优先选择这个使用。mini串口(/dev/ttyS0),mini串口时钟源是由CPU内核时钟提供,波特率受到内核时钟的影响,不稳定。serial0是GPIO引脚对应的串口,
2021-08-27 19:08:33 7738 6
原创 树莓派控制继电器组⚡️
继电器组简介树莓派引脚接线代码流水灯简介继电器想必大家一定不陌生吧,通过几伏的电压就能控制几百伏的电压,相当于一个电子开关,生活中也十分常见。树莓派作为入门级的Linux开发板对小白也是十分友好。今天就跟小编一起用树莓派来玩继电器吧。❤️ ❤️ ❤️树莓派引脚在终端输入 gpio readall 查看树莓派引脚信息pi@raspberrypi:~/studayPi/dome $ gpio readall +-----+-----+---------+------+---+---Pi 3
2021-08-22 21:51:46 463
原创 队列的基本操作
队列Queue概念队列的基本操作数组实现队列概念队列也是一种线性表,是一种先进先出的线性结构(FIFO)。队列只允许在表的一端进行插入(入队)、删除(出队)操作。允许插入的一端称为队尾,允许删除的一端称为队头。队列的基本操作入队EnterQueue:在队列的队尾插入一个元素出队DeleteQueue:将队列的队头元素出队判空IsEmpty:判断队列是否有元素存在判满IsFull:判断队列是否已满front:返回队头元素数组实现队列...
2021-08-20 21:49:46 579
原创 栈的应用:字符串的括号匹配问题(C语言)
括号匹配问题描述解决方法代码终端显示问题描述输入一字符串,检查字符串中 { }、[ ]、( ) 三种括号是否成对出现。不同括号间不能交叉出现且左右括号顺序不能颠倒,如 ) (、{ ( } )等。匹配示例:{ ( ) } ,{ [ ( ) ] }等解决方法利用栈的特性,发现左括号就入栈,然后检索到右括号与栈顶的左括号比对,如果为同一种括号则栈顶括号出栈;如果不是同一种括号(交叉)或者栈为空(只有右括号)则匹配失败。最后若栈空则说明括号匹配成功代码#include <stdio.
2021-08-16 18:25:40 2922 2
原创 ⭐️栈的基本操作(C语言数组和链表分别实现)✨✨✨
栈stack概述1.栈的概念2.栈的基本操作3.用数组实现栈的基本操作4.用链表实现栈的基本操作概述1.栈的概念栈(stack) 是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶(top),表头端称为栈低(bottom)。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除,所以栈又被称为后进先出的线性表(LIFO)2.栈的基本操作判空:判断栈是否为空判满:判断栈是否装满进栈push:向栈顶压入一个元素退栈pop:从栈顶弹出一个元素3.用数组实现栈的基本
2021-08-15 21:20:23 452
原创 双向链表的C语言实现
双向链表:one: 用结构体定义一个节点:two: 建立一个双向链表:three:双向链表的遍历:four:删除第n个节点1️⃣ 用结构体定义一个节点❤️ 双向链表的结构体:struct node{ int data; struct node *prev;//指向上一个节点 struct node *next;//指向下一个节点};2️⃣ 建立一个双向链表双向链表结构类似单链表的头插法,我们创建一个节点插在链表头节点前面成为新的头结点:struct node *inser
2021-08-14 23:50:02 164 2
原创 进程间通信(IPC):共享内存(shared memory)和信号量(semaphore)
共享内存和信号量共享内存使用共享内存通信的一般步骤创建共享内存共享内存的映射和解除映射共享内存操作函数示例代码信号量多任务编程中互斥和同步的概念信号量(Semaphore)信号量的操作相关函数函数使用示例信号量配合共享内存使用共享内存????????????????????共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。共享内存在进程空间的映射:使用共享内存通信的一般步骤1、创建或者打开共享内存2、
2021-08-12 20:18:23 5949
求帮助!Qt 使用connect连接信号槽函数报错
2023-05-24
来个大牛帮助小白吧( ๑ŏ ﹏ ŏ๑ )!
2021-09-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人