25/1/12 嵌入式笔记 学习esp32
了解了一下位选线和段选线的知识:
位选线:
作用:用于选择数码管的某一位,例如4位数码管的第1位,第2位)
通过控制位选线的电平(高低电平),决定当前哪一位数码管处于激活状态。
示例:
假设有4位数码管,位选线分别位D1,D2,D3,D4.
如果要显示第2位,设置D2 = LOW或D2 = HIGH,其他位选线设置位相反电平。
段选线:
作用:用于控制数码管上某一位显示的具体数字或字符。
数码管的每一段(如a,b,c,d,e,f,g,dp)对应一个段选线。
对于共阴极数码管:
将某一段的段选线设置为高电平HIHG,该段点亮,设置位LOW,熄灭
对于共阳则相反。
示例,要显示数字7,需要点亮段a,b,c.
对于共阴极数码管,设置a = HIGH,b=HIGH.c = HIGH,其他位LOW。
意思就是位选线是切换数码管的位,段就是一位数码管的那一小段。
为什么分阴阳极?
1.电路设计灵活,不同的电路设计可能需要不同的电平逻辑。
2.电源和接地方便性,在某些电路中,可能更容易提供高电平或低电平。
3.驱动芯片的兼容性,不同的驱动芯片可能支持不同的电平逻辑。
动态扫描:
数码管上的数字显示都是通过动态扫描完成的。
// 定义位选线引脚
int seg_1 = 5;
int seg_2 = 18;
int seg_3 = 19;
int seg_4 = 21;// 定义位选线数组
int seg_array[4] = {seg_1, seg_2, seg_3, seg_4};// 定义段选线引脚
int a = 32;
int b = 25;
int c = 27;
int d = 12;
int e = 13;
int f = 33;
int g = 26;
int dp = 14;// 定义段选线数组
int led_array[8] = {a, b, c, d, e, f, g, dp};// 定义数字显示逻辑的二维数组(共阴极数码管)
int number_array[10][8] = {{1, 1, 1, 1, 1, 1, 0, 0}, // 0{0, 1, 1, 0, 0, 0, 0, 0}, // 1{1, 1, 0, 1, 1, 0, 1, 0}, // 2{1, 1, 1, 1, 0, 0, 1, 0}, // 3{0, 1, 1, 0, 0, 1, 1, 0}, // 4{1, 0, 1, 1, 0, 1, 1, 0}, // 5{1, 0, 1, 1, 1, 1, 1, 0}, // 6{1, 1, 1, 0, 0, 0, 0, 0}, // 7{1, 1, 1, 1, 1, 1, 1, 0}, // 8{1, 1, 1, 1, 0, 1, 1, 0} // 9
};// 清屏函数
void clear() {// 关闭所有位选线for (int i = 0; i < 4; i++) {digitalWrite(seg_array[i], HIGH);}// 关闭所有段选线for (int i = 0; i < 8; i++) {digitalWrite(led_array[i], LOW);}
}// 显示数字的函数
void display_number(int order, int number) {// 清屏clear();// 将对应位选线的电平拉低digitalWrite(seg_array[order], LOW);// 显示数字for (int i = 0; i < 8; i++) {digitalWrite(led_array[i], number_array[number][i]);}
}// 4位数码管显示函数
void display_4_number(int number) {// 确保数字在 0 到 9999 之间if (number >= 0 && number < 10000) {// 获取每一位对应的数字int digits[4];for (int i = 3; i >= 0; i--) {digits[i] = number % 10;number /= 10;}// 显示4位数for (int i = 0; i < 4; i++) {display_number(i, digits[i]);delay(5); // 短暂延时,避免闪烁}}
}void setup() {// 设置所有位选线引脚为输出模式,并初始化为高电平(关闭)for (int i = 0; i < 4; i++) {pinMode(seg_array[i], OUTPUT);digitalWrite(seg_array[i], HIGH);}// 设置所有段选线引脚为输出模式,并初始化为低电平(关闭)for (int i = 0; i < 8; i++) {pinMode(led_array[i], OUTPUT);digitalWrite(led_array[i], LOW);}
}void loop() {// 显示数字 34display_4_number(34);
}
按键实验
//定义开关引脚
int led_pin = 2;
int button_pin = 14;
//记录led状态是否更改过的值
bool status = false;
int led_logic = 0; // LED 的当前状态
void setup(){//配置引脚模式pinMode(led_pin,OUTPUT);pinMode(button_pin,INPUT_PULLDOWN);
}void loop(){//按键消抖//如果当前按钮与上次不同,说明按钮发生了变化if(digitalRead(button_pin)){//睡眠10ms,如果依然是高电平,说明是按下并非抖动delay(500);if(digitalRead(button_pin)&& !status){led_logic = !led_logic;digitalWrite(led_pin,led_logic);//修改statusstatus = !status;}else if(digitalRead(button_pin)){status = false;}}}
INPUT_PULLDOWN表示启用内部下拉电阻。
status:用于记录按钮是否已经触发过状态切换,避免按钮按下时多次出发LED状态的切换。
按钮消抖逻辑,状态切换:status作用时确保每次按钮按下只触发一次状态切换。切换LED状态后,将status设置位true,避免重复触发。
宏定义与变量定义的区别:
PWM呼吸灯
占空比:一个周期内高电平出现时间占总的比例
频率:1秒内信号从高电平到低电平再回到高电平的次数,一秒钟PWM的周期次数
PWM主要通过输出不同频率,占空比的方波,实现固定频率或平均电压输出,,频率固定,改变占空比可改变输出电压。
analogWrite函数:在指定的引脚上输出一个PWM信号,通过改变PWM信号的占空比,控制输出电平的平均值,从而实现对LED亮度、电机速度等的调整。
函数实现呼吸灯
#define LED_PIN 12void setup(){//配置GPIO输出pinMode(LED_PIN,OUTPUT);}
void loop(){//实现渐亮效果for(int i=0;i<256;i++){analogWrite(LED_PIN,i);delay(10);}//实现渐灭效果for(int i=255;i>=0;i--){analogWrite(LED_PIN,i);delay(10);}
}
普通实现
#define FREQ 2000 // PWM 频率
#define CHANNEL 0 // PWM 通道
#define RESOLUTION 8 // PWM 分辨率(8 位 = 0~255)
#define LED 12 // LED 引脚void setup() {// 配置 LEDC 通道ledcSetup(CHANNEL, FREQ, RESOLUTION);// 将 LEDC 通道绑定到指定引脚ledcAttachPin(LED, CHANNEL);
}void loop() {// 实现渐亮效果for (int i = 0; i < (1 << RESOLUTION); i++) {ledcWrite(CHANNEL, i); // 设置 PWM 占空比delay(10); // 延迟 10ms}// 实现渐灭效果for (int i = (1 << RESOLUTION) - 1; i >= 0; i--) {ledcWrite(CHANNEL, i); // 设置 PWM 占空比delay(10); // 延迟 10ms}
}
ADC模数转换器
串口监视器是 Arduino IDE 提供的一个工具,用于通过串口通信与开发板(如 Arduino、ESP32 等)进行数据交互。它的主要作用是:1调试和监控程序运行,2.发送数据到开发板,3.实时查看传感器数据。4.交互式控制
#define POT 26 // 定义电位计连接的引脚int pot_value; // 用于存储电位计的模拟输入值void setup() {// 设置串口通信波特率Serial.begin(9600);// 设置引脚为输入模式(可选)pinMode(POT, INPUT);
}void loop() {// 读取电位计的模拟输入值pot_value = analogRead(POT);// 打印模拟输入值到串口监视器Serial.println(pot_value);// 延迟 50 毫秒delay(50);
}
相关文章:
25/1/12 嵌入式笔记 学习esp32
了解了一下位选线和段选线的知识: 位选线: 作用:用于选择数码管的某一位,例如4位数码管的第1位,第2位) 通过控制位选线的电平(高低电平),决定当前哪一位数码管处于激活状…...
【NLP】ELMO、GPT、BERT、BART模型解读及对比分析
文章目录 一、基础知识1.1 Word Embedding(词嵌入)1.2 词嵌入模型1.3 神经网络语言模型NNLM 二、ELMO2.1 ELMO的提出2.2 ELMO核心思想2.3 ELMO的优缺点 三、GPT3.1 Transformer3.2 GPT简介3.3 GPT模型架构3.4 预训练及微调3.5 GPT和ELMO对比 四、BERT4.1…...
go语言学习(数组,切片,字符串)
字符串 如果里面存储的是汉字,那么其实就是存储的是UTF--8编码,所以一个字会对应多个字节.如果想要获取汉字的个数,可以使用rune,来处理unicode字符 length: utf8.RuneCountInString( s) 如果只使用len()获取的是字节的个数, 字符串的功能 1,获取字节长度 len(xx) 2,获取字…...
PM 实战 - 智能药盒PRD + 市场规模分析
写在前面 智能硬件 PRD 实例资源很少,Po下个人作品,假定前提为to Boss需求,目标在于覆盖产品设计核心部分(用户画像Persona、产品逻辑图、产品架构图、软件原型图、硬件低保真设计、用例Use Case、硬件标准)。不是申请…...
SQL刷题快速入门(二)
其他章节:SQL刷题快速入门(一) 承接上一章节,本章主要讲SQL的运算符、聚合函数、SQL保留小数的几种方式三个部分 运算符 SQL 支持多种运算符,用于执行各种操作,如算术运算、比较、赋值、逻辑运算等。以下…...
hive迁移后修复分区慢,怎么办?
我有1个30TB的分区表,客户给的带宽只有600MB,按照150%的耗时来算,大概要迁移17小时。 使用hive自带的修复分区命令(一般修复分区比迁移时间长一点),可能要花24小时。于是打算用前面黄大佬的牛B方案。 Hive增…...
代码随想录算法训练营day27
代码随想录算法训练营 —day27 文章目录 代码随想录算法训练营前言一、贪心算法理论基础二、455.分发饼干三、376. 摆动序列53. 最大子数组和总结 前言 今天是算法营的第27天,希望自己能够坚持下来! 今日任务: ● 贪心算法理论基础 ● 455.…...
python 代码使用 DeepXDE 库实现了一个求解二维非线性偏微分方程(PDE)的功能
import deepxde as dde import numpy as np import matplotlib.pyplot as plt import tensorflow as tf# 设置时空计算域 Lx 1 # x 范围从 0 到 1 Ly 1 # y 范围从 0 到 1 Lt 0.05 # t 范围从 0 到 0.05 geom dde.geometry.Rectangle([0, 0], [Lx, Ly]) # 空间域 timed…...
【Go】:深入解析 Go 1.24:新特性、改进与最佳实践
前言 Go 1.24 尚未发布。这些是正在进行中的发布说明。Go 1.24 预计将于 2025 年 2 月发布。本文将深入探讨 Go 1.24 中引入的各项更新,并通过具体示例展示这些变化如何影响日常开发工作,确保为读者提供详尽而有价值的参考。 新特性及改进综述 HTTP/2 …...
VUE3 一些常用的 npm 和 cnpm 命令,涵盖了修改源、清理缓存、修改 SSL 协议设置等内容。
以下是一些常用的 npm 和 cnpm 命令,涵盖了修改源、清理缓存、修改 SSL 协议设置等内容。 npm 常用命令 1. 修改 npm 源 更改为淘宝的 npm 镜像源(可以提高安装速度): bash复制代码 npm config set registry https://registry…...
【SpringBoot】@Value 没有注入预期的值
问题复现 在装配对象成员属性时,我们常常会使用 Autowired 来装配。但是,有时候我们也使用 Value 进行装配。不过这两种注解使用风格不同,使用 Autowired 一般都不会设置属性值,而 Value 必须指定一个字符串值,因为其…...
【STM32-学习笔记-6-】DMA
文章目录 DMAⅠ、DMA框图Ⅱ、DMA基本结构Ⅲ、不同外设的DMA请求Ⅳ、DMA函数Ⅴ、DMA_InitTypeDef结构体参数①、DMA_PeripheralBaseAddr②、DMA_PeripheralDataSize③、DMA_PeripheralInc④、DMA_MemoryBaseAddr⑤、DMA_MemoryDataSize⑥、DMA_MemoryInc⑦、DMA_DIR⑧、DMA_Buff…...
js实现一个可以自动重链的websocket客户端
class WebSocketClient {constructor(url, callback, options {}) {this.url url; // WebSocket 服务器地址this.options options; // 配置选项(例如重试间隔、最大重试次数等)this.retryInterval options.retryInterval || 1000; // 重试间隔&#…...
企业总部和分支通过GRE VPN互通
PC1可以ping通PC2 1、首先按照地址表配置ip地址 2、分别在AR1和AR3上配置nat 3、配置GRE a 创建tunnel接口,并选择tunnel协议为GRE,为隧道创建一个地址,用作互联 b 为隧道配置源地址或者源接口,这里选择源接口;再为…...
油猴支持阿里云自动登陆插件
遇到的以下问题,都已在脚本中解决: 获取到的元素赋值在页面显示,但是底层的value并没有改写,导致请求就是获取不到数据元素的加载时机不定,尤其是弱网情况下,只靠延迟还是有可能获取不到,且登陆…...
【2024年华为OD机试】(C卷,100分)- 字符串筛选排序 (Java JS PythonC/C++)
一、问题描述 题目描述 输入一个由N个大小写字母组成的字符串 按照ASCII码值从小到大进行排序 查找字符串中第K个最小ASCII码值的字母 (k > 1) 输出该字母所在字符串中的位置索引 (字符串的第一个位置索引为0) k如果大于字符串长度则输出最大ASCII码值的字母所在字符串…...
iOS - runtime总结
详细总结一下 Runtime 的核心内容: 1. 消息发送机制 // 消息发送的基本流程 id objc_msgSend(id self, SEL _cmd, ...) {// 1. 获取 isaClass cls object_getClass(self);// 2. 查找缓存IMP imp cache_getImp(cls, _cmd);if (imp) return imp(self, _cmd, ...);…...
第33 章 - ES 实战篇 - MySQL 与 Elasticsearch 的一致性问题
思维导图 0. 前言 MySQL 与 Elasticsearch 一致性问题是老生常谈了。网上有太多关于这方面的文章了,但是千篇一律,看了跟没看没有太大区别。 在生产中,我们往往会通过 DTS 工具将 binlog 导入到 Kafka,再通过 Kafka 消费 binlog&…...
Artec Leo 3D扫描仪与Ray助力野生水生动物法医鉴定【沪敖3D】
挑战:捕获大型水生哺乳动物(如鲸鱼)的数据,搭建全彩3D模型,用于水生野生动物的法医鉴定、研究和保护工作。 解决方案:Artec Eva、Artec Space Spider、Artec Leo、Artec Ray、Artec Studio、CT scans 效果&…...
PythonQT5打包exe线程使用
打包: pyinstaller --noconsole --onefile test.py–noconsole 表示不需要打开命令行 修改:test.spec 一般项目里面需要用的资源文件,比如lib、png、exe等。 需要单独修改spec文件 pathex[.],binaries[(D:/test.png, .),(D:/simsun.ttc, .…...
【Powershell】Windows大法powershell好(二)
PowerShell基础(二) 声明:该笔记为up主 泷羽的课程笔记,本节链接指路。 警告:本教程仅作学习用途,若有用于非法行为的,概不负责。 1. powershell 执行外部命令 powershell也可以执行一些外部的…...
前端学习-环境this对象以及回调函数(二十七)
目录 前言 目标 环境对象 作用 环境对象this是什么? 判断this指向的粗略规则是什么? 回调函数 目标 常见的使用场景 综合案例:Tab任务栏切换 总结 前言 男儿何不带吴钩,收取关山五十州 目标 能够分析判断函数运行在不…...
Element-plus、Element-ui之Tree 树形控件回显Bug问题。
需求:提交时,需要把选中状态和半选中状态 的数据id提交。如图所示: 数据回显时,会出现代码如下: <template><el-tree ref"treeRef" :data"tree" show-checkbox node-key"id" …...
互联网全景消息(10)之Kafka深度剖析(中)
一、深入应用 1.1 SpringBoot集成Kafka 引入对应的依赖。 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupI…...
Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步
Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步 目录 Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动…...
pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)
pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)/ x y 代码代码 1:torch.matmul(x, y)输入张量:计算逻辑:输出结果: 代码 2:y y.view(4,1)…...
PyTorch环境配置常见报错的解决办法
目标 小白在最基础的环境配置里一般都会出现许多问题。 这里把一些常见的问题分享出来。希望可以节省大家一些时间。 最终目标是可以在cmd虚拟环境里进入jupyter notebook,new的时候有对应的环境,并且可以跑通所有的import code。 第一步:…...
罗永浩再创业,这次盯上了 AI?
罗永浩,1972年7月9日生于中国延边朝鲜族自治州的一个军人家庭,是一名朝鲜族人;早年在新东方授课,2004年当选 “网络十大红人” ;2006年8月1日,罗永浩创办牛博网;2008年5月,罗永浩注册…...
VUE3 provide 和 inject,跨越多层级组件传递数据
provide 和 inject 是 Vue 3 提供的 API,主要用于实现祖先组件与后代组件之间的依赖注入。它们可以让你在组件树中,跨越多层组件传递数据,而不需要通过 props 或事件的方式逐层传递。这个机制主要用于状态共享、插件系统或某些跨层级的功能。…...
git打补丁
1、应用场景 跨仓库升级 开发项目B使用的是开源项目A。开源项目A发现漏洞,作者进行了修复,我们可以通过使用git补丁的方式,将作者修改的内容复制到我 们的项目B中。 2、TortoiseGit方式 源仓库 格式化补丁 根据提交数量,生成…...
wordpress导入b站的直播/今天最新的新闻
牛津大学(University of Oxford)MSc Mathematical Finance牛津大学金融数学专业每年1月份开学,对学生本科背景要求较高,比较看重工作经验和数学背景。MSc in Financial Economics每年录取约70人,申请要求GPA3.5;IBT109/IELTS7.5;需要GRE/GMAT…...
美食网站建设的背景和目的/郑州网站seo优化公司
1、下载 Git 建议使用右键使用迅雷下载或是使用阿里云镜像下载 2、设置用户信息 $ git config --global user.name "jiayafei" $ git config --global user.email "2013026216qq.com" 3、配置github免密登录 利用.ssh生成公钥私钥 ssh-keygen -t rs…...
深圳o2o网站建设/网站模板
地址如下:https://github.com/Snailclimb/JavaGuide 星号非常多。是看到最全最细的Java 学习和面试指南了,涵盖了Java基础,并发,JVM,计算机基础等核心知识点,还总结了常用框架,大厂高频面试题和…...
中国空间站24小时直播入口/互联网广告营销是什么
起因 学习和使用PHP也有不少年头了,而自己也在学习和使用其他许多语言。我想通过这个总结来给自己一个交代。另一方面也分享一下开发经验,如何用PHP开发和管理大型的项目。 闲聊 许多人说自己1天学会PHP,头3天就写了个网站。的确PHP是个上手简…...
豪华网站建设/交换友链要注意什么
相信各位android开发者,对SAX已经并不陌生了,SAX(Simple API for XML),是一个使用非常广泛的XML解析标准,通常使用Handler模式来处理XML文档,这种处理模式和我们平常习惯的理解方式很不同,身边也…...
深圳ui设计师工资/搜索引擎推广和优化方案
来自:http://jishus.org/?p467#more-467很多学习C的人其实都是从Dev C开始的,因為VC对一般初新者而言方便是方便,但無法学习到標準的C語言(ANSI C),原因就是VC裡面有太多的函式是屬於.NET的,如果改用其他編…...