Arduino学习笔记
title: Arduino学习笔记
一、Ardauino 简介
Arduino 是一块基于开放原始代码的Simple i/o 平台,并且具有开发语言和开发环境都很简单、易理解的特点。让您可以快速使用Arduino 做出有趣的东西。它是一个能够用来感应和控制现实物理世界的一套工具。它由一个基于单片机并且开放源码的硬件平台,和一套为Arduino 板编写程序的开发环境组成。Arduino 可以用来开发交互产品,比如它可以读取大量的开关和传感器信号,并且可以控制各式各样的电灯、电机和其他物理设备。Arduino 项目可以是单独的,也可以在运行时和你电脑中运行的程序(例如: Flash, Processing,MaxMSP)进行通讯。Arduino 开源的IDE 可以免费下载得到
二、Arduino 硬件介绍
- 支持USB接口传输数据及供电
- 电压输入DCIN接口,可以单独使用,不需要连接计算机的USB接口时,直接上7V-12V电源进行供电
- FIDIUSB 芯片,通过该芯片传输数据
- 稳压器,保持电压的稳定
- LED灯,用来显示传递接收的数据RX和传递出去的数据TX,数据传输时,LED会闪烁,并且这两个LED和区域7点引脚0、1时相连的
- LED灯,显示区域7点引脚13号电平,高电平电亮,低电平熄灭
- 数字引脚,从右到左分别是:
- 数字0到13共13个数字引脚。~10 表示既可以当成数字引脚10,也可以当作PWM的数据输出引脚使用。符号标识的引脚,都是PWM信号的输出使用
- GND 接地引脚
- AREF,是AD转换的参考电压输入端。它可以让我们知道Arduino 的参考电压。
- RX和TX,UART数据传输使用引脚。
- LED灯,供电指示灯。供电正常,指示灯亮起
- Reset按键,用于复位系统
- ICSP引脚,程序烧录引脚,程序内存为Flash 的版本使用方便的ICSP 序列烧录方式。
- ATmega328,Arduino UNO 控制器的主控芯片
- 模拟信号引脚:A0-A5共6个模拟引脚
- 电源控制引脚
- Vin电源输入
- GND接地
- GND接地
- 5V电压输出端
- 3.3V 电压输出端
- RESET重新执行程序
三、语法详解
1. 程序结构
setup() :程序运行时首先调用setup()函数,用于初始化变量、设置引脚的输出/输入类型、配置串口、引入库文件等等。每次Arduino上电之后或者重启后,setup()函数都要重新运行一下。
loop():在setup()函数中初始化和定义了变量,然后执行loop函数。该程序在运行过程中不断的循环,根据一些反馈,相应改变执行情况。通过该函数动态控制主板
- if
- if…else…
- for(初始化部分;条件判断部分;数据递增部分){//语句块}
//使用一个PWM 引脚使LED 灯闪烁
int PWMpin = 10; // LED 在10 号引脚串联一个470 欧姆的电阻
void setup(){
//这里无需设置
}
void loop()
{
for (int i=0; i <= 255; i++){
analogWrite(PWMpin, i);
delay(10);
}
}
- Switch case
swicth(var){
case 1:
break;
case 2:
break;
default:
}
-
while(expression){//statements}
-
do{// }while(expression)
-
break 终止循环,绕过正常的循环条件
-
Continue 跳过一个循环的当前迭代部分
-
return 终止一个函数,如果有返回值,将从此函数返回给调用函数
-
goto 程序将会从程序中已有的标记点开始运行。label: ;goto label;
-
; 语句的末尾。语句的结束
-
{}打括号
-
注释 // /**/
-
define 宏定义
#define constantName value
后面不需要分号 -
include包含 #include用于调用程序以外的库。
-
赋值运算 =
-
+ - * / %
-
== ,!= ,<, >, >=, <=
-
&&,||,!
-
指针 &取地址 * 取地址的值
-
位操作 & | ^ ~ << >>
2 变量
2.1 范围
-
HIGH
HIGH(参考引脚)的含义取决于引脚(pin)的设置,引脚定义为INPUT 或OUTPUT 时含义有所不同。当一个引脚通过pinMode 被设置为INPUT,并通过digitalRead 读取(read)时。如果当前引脚的电压大于等于3V,微控制器将会返回为HIGH。当一个引脚通pinMode 被设置为OUTPUT,并digitalWrite 设置为HIGH 时,引脚的电压应在5V。在这种状态下,它可以输出电流。例如,点亮一个通过一串电阻接地或设置为LOW 的OUTPUT 属性引脚的LED
-
LOW
LOW 的含义同样取决于引脚设置,引脚定义为INPUT 或OUTPUT 时含义有所不同。当一个引脚通过pinMode 配置为INPUT,通过digitalRead 设置为读取(read)时,如果当前引脚的电压小于等于2V,微控制器将返回为LOW。当一个引脚通过pinMode 配置为OUTPUT,并通过digitalWrite 设置为LOW 时,引脚为0V。例如,点亮一个通过串联电阻连接到+5V,或到另一个引脚配置为OUTPUT、HIGH 的LED。
-
INPUT和OUTPUT
数字引脚当作INPUT 或OUTPUT 都可以。用pinMode()方法使一个数字引脚从INPUT 到OUTPUT 变化。
-
true 与false:布尔Boolean 常量
-
整数
-
浮点数
3 基本函数
-
pinMode()
用法: void pinMode(uint8_t pin, uint8_t mode)
作用:设置引脚模式,配置引脚为输入或输出模式
参数:* pin引脚编号,* mode INPUT,OUTPUT,INPUT_PULLUP
-
digitalWrite()
用法:void digitalWrite (uint8_t pin, uint8_t value)
作用:写数字引脚, 对应引脚的高低电平. 在写引脚之前, 需要将引脚设置为OUTPUT 模式.
参数:
* pin 引脚编号
* value HIGH 或LOW
-
digitalRead()
用法:int digitalRead (uint8_t pin)
作用:读数字引脚, 返回引脚的高低电平. 在读引脚之前, 需要将引脚设置为INPUT 模式.
参数: pin 引脚编号
返回:HIGH 或LOW
注解:如果引脚没有链接到任何地方, 那么将随机返回HIGH 或LOW.
-
analogReference()
用法:void analogReference (uint8_t type)
作用:配置模式引脚的参考电压. 函数analogRead 在读取模拟值之后, 将根据参考电压将模拟值转换到[0,1023]区间.
有以下类型:
DEFAULT : 默认5V.
INTERNAL: 低功耗模式. ATmega168 和ATmega8 对应1.1V 到2.56V.
EXTERNAL: 扩展模式. 通过AREF 引脚获取参考电压.
参数:
* type 参考类型(DEFAULT/INTERNAL/EXTERNAL)
-
analogRead()
用法:int analogRead (uint8_t pin)
作用:读模拟引脚, 返回[0-1023]之间的值. 每读一次需要花1 微妙的时间.
参数:
* pin 引脚编号
返回:0 到1023 之间的值
-
analogWrite()
用法:void analogWrite (uint8_t pin, int value)
作用:写模拟引脚
参数:
*pin 引脚编号
*value 0 到255 之间的值, 0 对应off, 255 对应on
写一个模拟值(PWM)到引脚. 可以用来控制LED 的亮度, 或者控制电机的转速. 在执行该操作后, 应该等待一定时间后
才能对该引脚进行下一次的读或写操作. PWM 的频率大约为490Hz
-
shiftOut()
用法:void shiftOut (uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, byte val)
作用:位移输出函数
输入value 数据后Arduino 会自动把数据移动分配到8 个并行输出端. 其中dataPin 为连接DS 的引脚号, clockPin 为连接
SH_CP 的引脚号, bitOrder 为设置数据位移顺序, 分别为高位先入MSBFIRST 或者低位先入LSBFIRST.
参数:
*dataPin 数据引脚
*clockPin 时钟引脚
*bitOrder 移位顺序( MSBFIRST 或LSBFIRST)
*val 数据
-
pulseIn()
用法:unsigned long pulseIn (uint8_t pin, uint8_t state, unsigned long timeout)
作用:读引脚的脉冲, 脉冲可以是HIGH 或LOW. 如果是HIGH, 函数将先等引脚变为高电平, 然后开始计时, 一直
到变为低电平为止. 返回脉冲持续的时间长短, 单位为毫秒. 如果超时还没有读到的话, 将返回0.
参数:
#pin 引脚编号
#state 脉冲状态
#timeout 超时时间
-
millis()
用法:unsigned long millis (void)
作用:毫秒时间,获取机器运行的时间长度, 单位毫秒. 系统最长的记录时间为9 小时22 分, 如果超出时间将从0 开始.
注意:时间为unsigned long 类型, 如果用int 保存时间将得到错误结果。
-
delay(ms)
用法:void delay (unsigned long ms) 延时(毫秒)
作用:延时, 单位毫秒(1 秒有1000 毫秒).
注意:参数为unsigned long, 因此在延时参数超过32767(int 型最大值)时, 需要用"UL"后缀表示为无符号长整型, 例如:
delay(60000UL);. 同样在参数表达式, 切表达式中有int 类型时, 需要强制转换为unsigned long 类型, 例如:
delay((unsigned long)tdelay * 100UL)
-
用法:void delayMicroseconds (unsigned int us)
作用:延时(微秒)
注意:延时单位为微妙(1 毫秒有1000 微妙). 如果延时的时间有几千微妙, 那么建议使用delay 函数. 目前参数最大支
持16383 微妙(不过以后的版本中可能会变化).