Arduino的知识整理

文章目录[x]
  1. 1:基础组件:
  2. 2:1、C语言基础
  3. 3:2、简单I/O函数
  4. 3.1:2.1 数字信号:
  5. 3.2:2.2 模拟信号:
  6. 4:3、串口使用函数
  7. 5:4、时间函数
  8. 6:1、调声函数 tone()系
  9. 7:2、脉冲宽度测量函数
  10. 8:3、外部中断函数

终于可以静下心敲一些字了,虽然敲字不比手写的效率高,但是比较直观。

根据Arduino程序设计基础,以及自己的学习之路,首先来梳理大体的轮廓:

一、背景:

基础组件:

二、基础函数:

1、C语言基础

2、简单I/O函数

输出首先分为数字信号和模拟信号。

2.1 数字信号:

使用前声明:pinMode(pin,mode);//pin为指定引脚编号,mode为指定配置模式,具有下面三种模式

模式名称 说明
INPUT 输入模式
OUTPUT 输出模式
INPUT_PULLUP 输入上拉模式

INPUT输入模式:digitalRead(pin);

OUTPUT输出模式:digitalWrite(pin,value);

2.2 模拟信号:

输入:analogRead(pin);//0~5V电压转换为0~1023的整数

输出:analogWrite(pin,value);//PWM--脉冲宽度调制(Pulse Width Modulation)。pin是引脚,value是PWM的脉冲宽度,范围0~255

3、串口使用函数

Arduino官网串口使用指南

UART串行通信原理

Serial(串行通信)函数

  • Serial.begin(speed);
  • Serial.end();
  • Serial.print("hello");
  • Serial.println("hello");
  • Serial.read();
  • Serial.readBytes();

available

find
findUntil
flush
peek
parseInt
parseFloat
readBytesUntil
readString
readStringUntil


Serial.begin()

  • 描述:开启串口,通常置于setup()函数中。例子:Serial.begin(115200)
  • 原型:
    • Serial.begin(speed)
    • Serial.begin(speed, config)
  • 参数:
    • speed:波特率,一般取值9600,115200等。还有300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600,  115200
    • config:设置数据位、校验位和停止位。默认SERIAL_8N1表示8个数据位,无校验位,1个停止位。
  • 返回值:无。

Serial.end()

  • 描述:禁止串口传输。此时串口Rx和Tx可以作为数字IO引脚使用。
  • 原型:Serial.end()
  • 参数:无。
  • 返回值:无。

Serial.print()

  • 描述:串口输出数据,写入字符数据到串口。
  • 原型:
    • Serial.print(val)
    • Serial.print(val, format)
  • 参数:
    • val:打印的值,任意数据类型。
    • config:输出的数据格式。BIN(二进制)、OCT(八进制)、DEC(十进制)、HEX(十六进制)。对于浮点数,此参数指定要使用的小数位数。
  • 示例:
    • Serial.print(78, BIN) 得到 "1001110"
    • Serial.print(78, OCT) 得到 "116"
    • Serial.print(78, DEC) 得到 "78"
    • Serial.print(78, HEX) 得到 "4E"
    • Serial.print(1.23456, 0) 得到 "1"
    • Serial.print(1.23456, 2) 得到 "1.23"
    • Serial.print(1.23456, 4) 得到 "1.2346"
    • Serial.print('N') 得到 "N"
    • Serial.print("Hello world.") 得到 "Hello world."
  • 返回值:返回写入的字节数。

Serial.println()

  • 描述:串口输出数据并换行。
  • 原型:
    • Serial.println(val)
    • Serial.println(val, format)
  • 参数:
    • val:打印的值,任意数据类型。
    • config:输出的数据格式。
  • 返回值:返回写入的字节数。

Serial.available()

  • 描述:判断串口缓冲区的状态,返回从串口缓冲区读取的字节数。
  • 原型:Serial.available()
  • 参数:无。
  • 返回值:可读取的字节数。

Serial.read()

  • 描述:读取串口数据,一次读一个字符,读完后删除已读数据。
  • 原型:Serial.read()
  • 参数:无。
  • 返回值:返回串口缓存中第一个可读字节,当没有可读数据时返回-1,整数类型。

Serial.readBytes()

  • 描述:从串口读取指定长度的字符到缓存数组。
  • 原型:Serial.readBytes(buffer, length)
  • 参数:
    • buffer:缓存变量。
    • length:设定的读取长度。
  • 返回值:返回存入缓存的字符数。

Serial.write()

  • 描述:写二进制数据到串口,数据是一个字节一个字节地发送的,若以字符形式发送数字请使用print()代替。
  • 原型:
    • Serial.write(val)
    • Serial.write(str)
    • Serial.write(buf,len)
  • 参数:
    • val: 作为单个字节发送的数据
    • str: 由一系列字节组成的字符串
    • buf: 同一系列字节组成的数组
    • len: 要发送的数组的长度
  • 返回值:   write()会返回发送的字节数。

串口通信来自简书-TonyCode

4、时间函数

millis()函数返回系统运行的时间(Arduino开机后运行的时间长度),单位为毫秒,最长记录大约50天,溢出后归零。

micros()函数返回系统运行的时间(Arduino开机后运行的时间长度),单位为微秒,最长记录70分钟,在16MHz的系统上精度为4µs,8MHz的系统上精度为8µs。
delay()函数可用于暂停程序运行。暂停时间可以由delay()函数的参数进行控制,单位是毫秒( unsigned long型数据)

delayMicroseconds()可用于暂停程序运行,单位是微秒(µs)。

delay系会暂停程序运行,mi系能继续运行程序。

5、模块系函数

random()

  • random(max)
    random(min, max)//在最小值(min)和最大值减一(max-1)之间的随机数值

randomSeed()

  • 函数可用来产生随机种子。单独使用random()函数所产生的随机数,在每一次程序重新启动后,总是重复同一组随机数字。如果希望程序重新启动后产生的随机数值与上一次程序运行时的随机数不同,则需要使用randomSeed()函数。
  • randomSeed(seedVal);//seedVal: 随机种子数值
  • 在实际应用时,可以通过调用analogRead()函数读取一个空引脚,作为随机种子数值。

三、高级I/O函数:

1、调声函数 tone()系

tone()

功能:让制定引脚产生一个占空比为50%的制定频率的方波

  • 说明:tone()函数可以产生固定频率的PWM信号来驱动扬声器发声。发声时间长度和声调都可以通过参数控制。定义发声时间长度有两种方法,第一种是通过tone()函数的参数来定义发声时长,另一种是使用noTone()函数来停止发声。如果您在使用tone()函数时没有定义发声时间长度,那么除非您通过noTone()函数来停止声音,否则Arduino将会一直通过tone()函数产生声音信号。
  • 语法
    • tone(pin, frequency)
    • tone(pin, frequency, duration)
  • 参数:
    • pin: 发声引脚(该引脚需要连接扬声器)
    • frequency: 发声频率(单位:赫兹) – 无符号整数型
    • duration: 发声时长(单位:微秒,此参数为可选参数) – 无符号长整型
  • 注意:
    •  Arduino一次只能产生一个声音。假如Arduino的某一个引脚正在通过tone()函数产生发声信号,那么此时让Arduino使用另外一个引脚通过tone()函数发声是不行的。
    • 对于Arduino Mega以外的控制器,使用tone()函数时会影响引脚3和引脚11的PWM信号输出。

noTone(pin)

2、脉冲宽度测量函数

pulseIn()
  • 说明:读引脚的脉冲信号, 被读取的脉冲信号可以是 HIGH 或 LOW. 例如我们要检测HIGH脉冲信号, Arduino将在引脚变为高电平时开始计时, 当引脚变为低电平时停止记时,并返回脉冲持续时长(时间单位:微秒)。如果在超时时间内没有读到脉冲信号的话, 将返回0.
  • 根据经验发现,pulseIn()函数在检测脉冲间隔过短的信号时会产生错误。Arduino可检测的脉冲间隔时间范围是10微秒到3分钟。请留意假如调用pulseIn()函数时读取信号的引脚上已经为高电平,此时Arduino将等待该引脚变为低电平以后再开始检测脉冲信号。另外只有Arduino的中断是开启时,才能使用pulseIn()。
  • 语法
    • pulseIn(pin, value)
    • pulseIn(pin, value, timeout)
  • 参数
    • pin 引脚编号
    • state 脉冲状态
    • timeout 超时时间(单位:微秒)//如果Arduino在超时时间(timeout)内没有读到脉冲信号的话, 该函数将返回0.超时时间参数是可选参数,其默认值为1秒。
  • 返回值
    • 脉冲持续时长。
    • 如果在超时时间内没有读到脉冲信号, 将返回0.

3、外部中断函数

中断Arduino当前正在处理的事情而优先去执行中断服务程序。当中断服务程序完成以后,再回来继续执行刚才执行的事情。

3.1中断引脚与中断编号

Arduino型号 支持中断的引脚
Uno, Nano, Mini 2, 3
Mega, Mega2560, MegaADK 2, 3, 18, 19, 20, 21
Micro, Leonardo 0, 1, 2, 3, 7
Zero 除4号引脚以外的所有数字引脚
MKR1000 Rev.1 0, 1, 4, 5, 6, 7, 8, 9, A1, A2
Due 所有引脚皆可

3.2中断模式

模式名称 说明
LOW: 低电平触发
CHANGE 电平发生变化时触发
RISING 电平由低电平变为高电平时触发(上升沿)
FALLING 电平由高电平变为低电平时触发(下降沿)

3.3中断函数

attachInterrupt()

  • 语法:attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);
  • 实例:attachInterrupt(0,warning,CHANGE)//当int0电平由高变低,触发中断函数warning[需要void warning()]
  • 参数:
    • pin: 中断引脚号
    • ISR: 中断服务程序名
    • mode:中断模式
  • 注意:
    • 在中断服务程序中,不能使用delay()函数和millis()函数。因为他们无法在中断服务程序中正常工作。delayMicroseconds()可以在中断服务程序中正常工作。
    • 中断服务程序应尽量保持简单短小。否则可能会影响Arduino工作。
    • 中断服务程序中涉及的变量应声明为volatile类型。
    • 中断服务程序不能返回任何数值。所以应尽量在中断服务程序中使用全局变量。

detachInterrupt()

作用:取消中断

  • 语法detachInterrupt(digitalPinToInterrupt(pin));
  • 参数pin: 中断引脚号

四、库函数:

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像