Arduino学习笔记
Arduino介绍
Arduino是一个能够用来感应和控制现实物理世界的一套工具。 它由一个基于单片机并且开放源码的硬件平台,和一套为Arduino板编写程序的开发环境组成
性能:
Digital I/O:数字输入/输出端口 0 - 13
Analog I/O:模拟输入/输出端口 0 - 5
支持ICSP下载,支持TX/RX。(ICSP:In Circuit Serial Programmable 在线串行编程)
输入电压:USB接口供电或者5V-12V外部电源供电
输出电压:支持 3.3V 及 5V DC输出
处理器:使用Atmel Atmega168 328处理器,因其支持者众多,已有公司开发出来32位的MCU平台支持Arduino
我们所用的Arduino控制板是Arduino Uno,如下图:
Arduino基础知识
数据类型
| 名称 | 描述 |
|---|---|
| char,unsigned char | 字符型,无符号字符型 |
| int,unsigned int | 整型,无符号整型 |
| long,unsigned long | 长整型,无符号长整型 |
| boolean | 布尔类型(只有真/假) |
| byte | 字节类型(特有的跟unsigned char功能一样) |
| float | 单精度浮点型 |
| string | 字符串类型 |
| String | 对象 |
| array | 排列 |
| word | 字 |
数据类型转换:
char()、byte()、int()、long()、float()
常量
| 名称 | 描述 |
|---|---|
| HIGH | 引脚高电平1(数字IO口的电平) |
| LOW | 引脚低电平0(数字IO口的电平) |
| INPUT | 输入(数字IO口的方向) |
| OUTPUT | 输出(数字IO口的方向) |
| true | 真 |
| false | 假 |
程序结构
Arduino程序可以分为三个主要部分: 结构、值(变量和常量)和函数
Arduino程序不像C语言那样使用 main() 当做函数入口,但是程序中编写的 setup 和 loop 函数,都在main函数中调用了 loop 的循环执行,是通过for循环实现的,且每次loop结束后,都会进行串口事件判断,也正是因为这种设计, 串口事件不能实时响应
1 | void setup() |
Arduino基本函数
数字 I/O接口函数
数字引脚pin为0~13
| 函数 | 参数 | 描述 |
|---|---|---|
| pinMode | (pin, mode) | 定义数字IO口是输入或输出模式,mode表示为 INPUT(输入) 或 OUTPUT(输出) |
| digitalWrite | (pin, value) | 定义数字IO口输出电平,value表示为 HIGH(高电平)或 LOW(低电平) |
| digitalRead | (pin) | 读取数字IO口输入电平,value表示为 HIGH(高电平) 或 LOW(低电平) |
模拟 I/O接口函数
模拟引脚 pin 为A0~A5,Arduino UNO用于PWM的数字引脚 pin 为3、5、6、9、10、11
| 函数 | 参数 | 描述 |
|---|---|---|
| analogRead | (pin) | 读取模拟IO口输入信号,pin表示为A0~A5(Arduino nano为A0~A7) |
| analogWrite | (pin, value) | 模数IO口输出用户写的模拟量(PWM波),Arduino上标示 ~ 的数字IO口可使用该函数,value表示为0~255 |
用于PWM脉宽调制时,对ATmega168芯片的Mini或BT或UNO Arduino,pin可用接口3、5、6、9、10、11;对ATmega8芯片的USB和serial Arduino,pin可用接口9、10、11
扩展 I/O接口函数
| 函数 | 参数 | 描述 |
|---|---|---|
| shiftOut | (dataPin, clockPin, bitorder, value) | SPI外部IO扩展函数,dataPin为数据口,clockPin为时钟口,bitOrder为数据传输方向(MSBFIRST高位在前,LSBFIRST低位在前),value表示所要传送的数据(0~255) |
| unsigned long pulseIn | (pin, value) | 脉冲长度记录函数,返回时间参数(us),pin表示为0~13,value为HIGH或LOW |
shiftOut (dataPin, clockPin, bitOrder, value) SPI外部IO扩展函数,通常使用带SPI接口的74HC595做8个IO扩展,另外还需要一个IO口做74HC595的使能控制
unsigned long pulseIn (pin, value) 脉冲长度记录函数,比如value为HIGH,那么当pin输入为高电平时,开始计时,当pin输入为低电平时,停止计时,然后返回该时间
时间函数
| 函数 | 参数 | 描述 |
|---|---|---|
| unsigned long millis | 无 | 返回时间函数(单位ms),该函数是指当程序运行就开始计时并返回记录的参数 |
| delay | (ms) | 延时函数(单位ms) |
| delayMicroseconds | (us) | 延时函数(单位us) |
数学函数
| 函数 | 参数 | 描述 |
|---|---|---|
| min | (x, y) | 求最小值 |
| max | (x, y) | 求最大值 |
| abs | (x) | 求绝对值 |
| constrain | (x, a, b) | 约束函数,x须在下限a与上限b之间才能返回 |
| map | (value, fromLow, fromHigh, toLow, toHigh) | 约束函数,value 须在 fromLow 与 toLow 之间和 fromHigh 与 toHigh 之间 |
| pow | (base, exponent) | 开方函数,base的 exponent 次方 |
| sq | (x) | 平方函数 |
| sqrt | (x) | 平方根函数 |
随机数函数
| 函数 | 参数 | 描述 |
|---|---|---|
| randomSeed | (seed) | 随机数端口定义函数,seed表示读模拟口analogRead(pin)函数 |
| long random | (max) | 随机数函数,返回数据大于等于0,小于max |
| long random | (min, max) | 随机数函数,返回数据大于等于min,小于max |
外部中断函数
| 函数 | 参数 | 描述 |
|---|---|---|
| attachInterrupt | (interrupt, , mode) | 外部中断只能用到数字IO口2和3,interrupt表示中断口初始0或1,表示一个功能函数,mode:LOW低电平中断,CHANGE有变化就中断,RISING上升沿中断,FALLING 下降沿中断 |
| detachInterrupt | (interrupt) | 中断开关,interrupt=1 开,interrupt=0 关 |
中断使能函数
| 函数 | 描述 |
|---|---|
| interrupts() | 使能中断 |
| noInterrupts() | 禁止中断 |
串口收发函数
| 函数 | 参数 | 描述 |
|---|---|---|
| Serial.begin | (speed) | 设置串口波特率,用于setup()内。speed表示波特率(串口每秒传输数据的速率) |
| Serial.read() | 无 | 读取串口输入,返回收到的参数 |
| Serial.print | (data,数据进制) | 串口输出数据,默认Serial.print(data),即Serial.print(data,DEC),DEC表示十进制 |
| Serial.println | (data,数据进制) | 串口输出数据并带回车换行符 |
| Serial.available() | 无 | 判断串口缓冲器buffer状态 |
| Serial.flush() | 无 | 清空串口缓冲器buffer |
官方库文件
| 名称 | 描述 |
|---|---|
| EEPROM | EEPROM读写程序库 |
| Ethernet | 以太网控制器程序库 |
| LiquidCrystal | LCD控制程序库 |
| Servo | 舵机控制程序库 |
| SoftwareSerial | 任何数字IO口模拟串口程序库 |
| Stepper | 步进电机控制程序库 |
| Wire | TWI/I2C总线程序库 |
| Matrix | LED矩阵控制程序库 |
| Sprite | LED矩阵图象处理控制程序库 |
面包板的使用
面包板是实验室中用于搭接电路的重要工具,下面就面包板的结构和使用方法的介绍
面包板外观
常见的面包板最小单元面包板分上、中、下三部分, 上面和下面部分一般是由一行或两行的插孔构成的窄条,中间部分是由中间一条隔离凹槽和上下各 5 行的插孔构成的宽条
窄条上下两行之间电气不连通。每 5 个插孔为一组,一整条之间都互相连通,但是上下之间不连通
中间部分宽条是由中间一条隔离凹槽和上下各 5 行的插孔构成。在同一列中的 5 个 插孔是互相连通的,列和列之间以及凹槽上下部分则是不连通的。外观及结构如图:
LED闪烁实验
本次实验此次利用Arduino开发板的I/O口和外接直插LED灯来完成控制LED灯闪烁
LED灯实验原理图
Arduino开发板数字接口10与红色发光二极管LED相连,为避免电流过大会烧毁LED,此处串联一个220Ω的限流电阻
接线实物图
这里右边的黄线(接在10号引脚)与LED灯的正极接在面包板的同一列上,表示arduino开发板与LED的正极相连,然后LED的负极与电阻连接在同一列上,电阻的另外一端与左边的黄线连接在同一列,然后黄线与开发板的GND相连,表示LED灯和电阻串联在一起,这样子电路就连接好啦!
电路连接好了,接下来就是写LED闪烁的程序了
1 | int ledPin = 13; //定义数字接口10 |
光敏电阻实验
光敏电阻器,也称光感电阻,是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器;入射光强,电阻减小,入射光弱,电阻增大
光敏电阻调节蜂鸣器
接线原理图
这里因为找不到蜂鸣器元器件,所以就改成了LED,在实际连线只需要把LED替换成蜂鸣器就好
Arduino Uno开发板数字接口6连接光敏电阻一端,光敏电阻另一端连接蜂鸣器正极(+),蜂鸣器负极(-)连接Arduino Uno开发板的公共地端GND
实验程序
1 | void setup() |
将程序下载到Arduino开发板之后,可以用手电筒等发光物体照射或用手间歇地阻挡光敏电阻,可以听到有光照时蜂鸣器声音大,没有光时蜂鸣器声音小
光敏电阻调节LED灯
接线原理图
这里先看绿色那根线,一端连接开发板的A0管脚,一端与光敏电阻连接在同一列,光敏电阻的另外一端与黑色那根线连接在同一列,黑色线的另外一端连接在面包板的正极,再看另外一根黑色线,一端连接在面包板的正极,一端与开发板的GND相连,这样子光敏电阻就连接好啦,如图所示:看蓝色那根线
再来看绿色那根线也与电阻连接在同一列上,电阻的另外一端连接在面包板的负极,同样看左边那根红色的线,一端连接在面包板的负极,一端连接在开发板的5V管脚上,这样子右边那个电阻就连接好啦,如图所示:看蓝色那根线
最后看黄色那根线,一端连接在开发板的11号管脚上,一端与LED灯的正极连接在同一列,LED的负极与电阻的一端连接在同一列,表示LED与电阻串联,电阻的另外一端连接在面包板的正极,然后再看左边黑色那根线,一端连接在面包板的正极,一端连接在开发板的GND管脚上,这样子LED与电阻就连接好啦,如图所示:看蓝色那根线
实验程序
1 | int potpin = 0; //定义模拟接口A0连接光敏电阻 |
