Arduino学习笔记


title: Arduino学习笔记

一、Ardauino 简介

Arduino 是一块基于开放原始代码的Simple i/o 平台,并且具有开发语言和开发环境都很简单、易理解的特点。让您可以快速使用Arduino 做出有趣的东西。它是一个能够用来感应和控制现实物理世界的一套工具。它由一个基于单片机并且开放源码的硬件平台,和一套为Arduino 板编写程序的开发环境组成。Arduino 可以用来开发交互产品,比如它可以读取大量的开关和传感器信号,并且可以控制各式各样的电灯、电机和其他物理设备。Arduino 项目可以是单独的,也可以在运行时和你电脑中运行的程序(例如: Flash, Processing,MaxMSP)进行通讯。Arduino 开源的IDE 可以免费下载得到

二、Arduino 硬件介绍

Arduino学习笔记

  1. 支持USB接口传输数据及供电
  2. 电压输入DCIN接口,可以单独使用,不需要连接计算机的USB接口时,直接上7V-12V电源进行供电
  3. FIDIUSB 芯片,通过该芯片传输数据
  4. 稳压器,保持电压的稳定
  5. LED灯,用来显示传递接收的数据RX和传递出去的数据TX,数据传输时,LED会闪烁,并且这两个LED和区域7点引脚0、1时相连的
  6. LED灯,显示区域7点引脚13号电平,高电平电亮,低电平熄灭
  7. 数字引脚,从右到左分别是:
    1. 数字0到13共13个数字引脚。~10 表示既可以当成数字引脚10,也可以当作PWM的数据输出引脚使用。符号标识的引脚,都是PWM信号的输出使用
    2. GND 接地引脚
    3. AREF,是AD转换的参考电压输入端。它可以让我们知道Arduino 的参考电压。
  8. RX和TX,UART数据传输使用引脚。
  9. LED灯,供电指示灯。供电正常,指示灯亮起
  10. Reset按键,用于复位系统
  11. ICSP引脚,程序烧录引脚,程序内存为Flash 的版本使用方便的ICSP 序列烧录方式。
  12. ATmega328,Arduino UNO 控制器的主控芯片
  13. 模拟信号引脚:A0-A5共6个模拟引脚
  14. 电源控制引脚
    1. Vin电源输入
    2. GND接地
    3. GND接地
    4. 5V电压输出端
    5. 3.3V 电压输出端
    6. RESET重新执行程序

三、语法详解

1. 程序结构

setup() :程序运行时首先调用setup()函数,用于初始化变量、设置引脚的输出/输入类型、配置串口、引入库文件等等。每次Arduino上电之后或者重启后,setup()函数都要重新运行一下。

loop():在setup()函数中初始化和定义了变量,然后执行loop函数。该程序在运行过程中不断的循环,根据一些反馈,相应改变执行情况。通过该函数动态控制主板

  1. if
  2. if…else…
  3. 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);
}
}
  1. Switch case
swicth(var){
    case 1:
    break;
    case 2:
    break;
    default:
}
  1. while(expression){//statements}

  2. do{// }while(expression)

  3. break 终止循环,绕过正常的循环条件

  4. Continue 跳过一个循环的当前迭代部分

  5. return 终止一个函数,如果有返回值,将从此函数返回给调用函数

  6. goto 程序将会从程序中已有的标记点开始运行。label: ;goto label;

  7. ; 语句的末尾。语句的结束

  8. {}打括号

  9. 注释 // /**/

  10. define 宏定义 #define constantName value后面不需要分号

  11. include包含 #include用于调用程序以外的库。

  12. 赋值运算 =

  13. + - * / %

  14. == ,!= ,<, >, >=, <=

  15. &&,||,!

  16. 指针 &取地址 * 取地址的值

  17. 位操作 & | ^ ~ << >>

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 微妙(不过以后的版本中可能会变化).