【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(7)

Hi٩(๑o๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦

(o゜▽゜)o☆ 今天大都督继续为大家带来系列——小学生都能玩的单片机!带你一周内快速走进嵌入式的大门,let’s go!

(7)Arduino的程序文件结构和常用函数

在前面六节中我们已经初步学会了如何使用Arduino编程并下载程序到单片机上,并且学会了如果Arduino UNO的唯一串口被占用了如何下载程序,那么这节我们就来学习一下Arduino的程序文件结构和常用函数,为后面开始编写程序打下基础。

Arduino的程序运行结构:

之前我们已经知道了一个标准的Arduino程序由包含setup函数和loop函数组成。

setup函数的作用是在Arduino开发板上电时,进行一些初始化工作,比如设置引脚的工作模式。setup函数里面的逻辑最先被执行,并且只会执行一次

loop函数中编写单片机主要逻辑程序,该函数中的逻辑会被无限循环执行,永远不会停,除非单片机断电。

Arduino的文件组织结构:

对于较为简单的项目,我们可能只需要一个.ino文件,这时候它既是主文件也是唯一的文件。但在复杂项目中,为了代码的模块化和复用,可能会需要更多的文件。这时候,程序的组织方式如下:

  • 主文件.ino扩展名的主文件包含了Arduino草图的入口点(setup()loop()函数)。它负责整个程序的结构控制和主要逻辑的实现。

  • 子文件:子文件可以是其他.ino文件,也可以是C或C++文件(.c.cpp),还包括相应的头文件(.h)。这些文件通常包含了函数定义、库、常量定义和全局变量声明等。通过这种方式,开发者可以将相关的功能和代码模块化,以便于管理和复用。

简单来说,当我们程序多的时候,就建立一个子文件,方便我们看。

新建文件的操作如下:

在这里插入图片描述

然后我们给新文件进行命名,注意要是英文名哦。大都督的命名习惯就是z_uart这样,z代表子文件(拼音,哈哈),uart代表该文件的功能(uart是串口),比如如果想编一个蓝牙相关的子文件就命名z_blue。不要小看这些步骤哦,保持一个良好的编程习惯,不仅是给未来的自己看,也是为了给后来的爱好者以参考!

在这里插入图片描述

然后删除子文件的操作如下:

在这里插入图片描述

在编译阶段,所有的.ino文件(无论是主文件还是其他.ino子文件)会首先被合并成一个单一的源文件,然后一起编译。这意味着我们可以跨.ino文件访问变量和函数,就好像它们都在同一个文件中一样。

对于C/C++文件(.c/.cpp和.h),它们被编译器视为标准的C/C++源代码和头文件。使用它们能够让我们利用C/C++的完整功能,包括更复杂的数据结构、更标准的编程模式等。在.ino文件中包含或引用这些文件需要适当地使用#include指令,就像在任何标准C/C++项目中一样(也就是我们引用库的操作啦)。

在这里插入图片描述

常见函数:

时间函数:

mills()应用mills函数可获取机器运行的时间长度,单位ms,系统最长记录时间为9小时22分,如果超出时间将从0开始,函数返回值unsigned long型,无参数。
如果用int型保存时间会得到错误结果

delay(ms)延迟函数,单位是毫秒ms,无返回值。

delayMicroseconds(us)延迟函数,单位是微秒us。

数学函数

min(x,y)返回x,y中两者较小值。

max(x,y)返回两者中较大值。

abs(x)获取x的绝对值。

constrain(amt,low,high)函数的工作过程是:如果amt小于low,则返回low;如果amt大于high,则返回high;否则,返回amt。该函数一般可以用于将值归一化到某个区间内。

map(x,in_min,in_max,out_min,out_max)将[in_min,in_max]范围内的x等比映射到[out_min,out_max]范围内。函数返回值为long型,原型为:

sin(rad)、cos(rad)、tan(rad)三角函数

随机数函数

randomSeed(seed)设置随机数种子,随机种子的设置对产生的随机序列有影响。函数无返回值。

random(howsmall,howbig)函数可以生成一个随机数,两个参数howsmall和howbig决定了随机数的范围,函数的参数及返回值均为long型。

数字和模拟I/O函数:

知道了上面这些常见函数,就够我们用一阵子啦,怎么样不多吧,也不用你刻意记住,有个印象就行,用到再查呗。
除了上面这些,我们还要隆重介绍一下Arduino最重要的函数——数字和模拟I/O函数。

之前我们已经知道了Arduino UNO的数字引脚、模拟引脚有哪些,并且知道了什么是数字什么是模拟,详见(2)初识Arduino与基本单片机电路知识

  • 数字I/O引脚(0-13号):这些引脚可以被配置为输入或输出引脚。引脚0和1号被用作串行通信(RX和TX)。引脚3、5、6、9、10和11提供PWM输出(PWM也会在后面讲)。

  • 模拟输入引脚(A0-A5):Arduino Uno提供了6个模拟输入引脚,用于读取模拟信号。

我们要想使用这些引脚,就要学会使用数字I/O函数和模拟I/O函数。

数字I/O函数

pinMode(pin,mode)
该函数的作用是设置某个引脚的工作模式,各个参数的作用如下:

  • pin:需要设置的引脚编,例如Arduino的0-13号引脚。

  • mode:需要设置引脚为哪一种工作模式,工作模式取值可为:

INPUT:输入模式,表示从外围设备向ESP32输入信号,比如从某个传感器的信号引脚读取传感器数据;

OUTPUT:输出模式,表示从发ESP32开发板向外围设备输出信号,比如通过ESP32引脚的高低电平控制LED灯的亮灭;

INPUT_PULLUP:输入上拉模式,和INPUT的不同之处在于,INPUT模式在引脚未连接外围设备的时候,引脚处于浮空状态,电平信号不确定,可能是高电平,也可能是低电平,但是INPUT_PULLUP模式,在引脚浮空状态下,会启用GPIO内部的上拉电阻,将引脚默认设置为高电平;

INPUT_PULLDOWN:输入下拉模式,和INPUT_PULLUP类似,只不过浮空状态会启用GPIO内部下拉电阻,将引脚默认设置为低电平。

digitalWrite(pin,value)
设置引脚的电压为高电压或低电平(即1或0)。该函数也是一个无返回值的函数,函数有两个参数分别表示:pin同上,为需要设置的引脚;value参数:表示输出的电压:HIGH或者LOW(即1或0)。

digitalRead(pin)
函数可以获取引脚的电压情况——HIGH或LOW(1或0),pin表示所要获取电压值的引脚,该函数返回值为int型。

模拟I/O

analogReference(type)
配置模拟引脚的参考电压。在嵌入式应用中引脚获取模拟电压值之后,根据参考电压将模拟值转换到0~1023。该函数无返回值,参数为type类型。

analogRead(pin)
用于读取引脚的模拟量电压值,每读一次需要花μs的时间。参数pin表示所要获取模拟量电压值的引脚,该函数返回值为int型,表示引脚模拟量电压值,范围在0~1023。

analogWrite(pin,value)
anlogWrite函数通过PWM的方式在引脚上输出一个模拟量,较多的应用在LED亮度控制、电机转速等方面。value取值范围为[0,255],值越大,LED亮度越大,电机转速越快,反之亦然。

最后给大家放个表格,让大家知道大概什么时候用数字引脚,什么时候用模拟引脚:

应用场景数字引脚使用场景模拟引脚使用场景
LED控制用于开/关LED灯。用于调节LED的亮度(通过模拟输出PWM信号)。
按钮/开关读取读取按钮的状态(按下/未按下)。-
传感器读数用于读取数字输出传感器(如数字温湿度传感器)。用于读取模拟输出传感器(如光照强度传感器)。
电机控制通过数字控制信号控制电机的启动/停止。用于调整电机的速度(通过模拟输出PWM信号)。
串行通信用于TX/RX通信。-
声音播放用于播放简单的声音或者蜂鸣器控制。用于产生更复杂的声音效果(通过模拟输出)。

学到这里就差不多啦,下节我们会了解一些关于软串口相关的知识,看到这里的你今天也辛苦啦,加油٩(ˊᗜˋ)و✧。

哈哈,让焦虑不再蔓延,信息不再高壁,如果你觉得这篇文章对你有帮助,就来个免费的点赞吧!
(◍˃̶ᗜ˂̶◍)✩我深海大都督正式授予你深海王国公民的身份~

(・ω< )★ 加入深海大家庭,快乐摆烂每一天!

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值