欢迎来到Arduino的世界,本文主要介绍Arduino是什么,为什么Arduino广受欢迎,如何选择一款适合自己的Arduino控制器、Arduino开发工具、Arduino的数据类型、变量和常量,结合Arduino常用的基本函数,就可以制作各种小作品。想要了解更多信息,请进入Arduino官网。
Arduino是一个能够用来感应和控制现实物理世界的一套工具。它由一个基于单片机并且开放源码的硬件平台,和一套为Arduino板编写程序的开发软件组成。它的硬件包含一个以 Atmel AVR 单片机为核心的开发板和其他各种 I/O 板;软件包括一个标准编程语言开发环境和在开发板上运行的烧录程序。Arduino 主要是为业余爱好者的使用而设计的,被设计成一个小型计算机的形式,可以作为嵌入式计算机平台,所以说它是一个交互系统,可以通过硬件和软件与它的环境进行互动。例如,它可以读取大量的开关和传感器信号,可以检测到光线的有无和强弱、可以检测到手指按下按键、甚至可以检测到微信上的新消息;并将这些感受到的“信号”转换为动作 比如电机动一下、LED 灯的打开或关闭、在互联网上发布一条信息等;Arduino也可以开发出与 PC 相连的周边装置,能在运行时与 PC 上的软件进行通信。
Arduino 本质上就是一块单片机,但它抛开了传统硬件开发的复杂操作,不需要了解硬件的内部结构和寄存器设置(如果是单片机开发,是需要了解寄存器并且设置各个寄存器),也不需要过多的电子知识和编程知识,开发者只需要通过简单学习,了解各个引脚和函数的作用,便可利用它开发出各种出色的项目。
目前市场上还有许多其他的单片机和单片机平台,例如51单片机、STM32单片机等。但他们对于普通开发者来说门槛相对较高,需要有一定编程和硬件相关基础,内部寄存器较为繁杂,主流开发环境Keil配置相对麻烦,特别是对于STM32的开发,即使使用官方库也少不了环境配置,还有就是开发环境是收费的。
Arduino 不但简化了使用单片机工作的流程,同时还为教师、学生以及兴趣爱好者提供了一些其他系统不具备的优势:
1、性价比高
相比于其他单片机平台而言,Arduino生态的各种开发板性价比相对较高,也可以自己动手制作开发板。
2、跨平台
Arduino IDE可以在 Windows、Mac OS X和 Linux 三大主流操作系统上运行,而其他的大多数控制器只能在 Windows 上开发。
3.简单清晰的开发
Arduino IDE基于Processing IDE开发,这对于初学者来说极易掌握,同时对于高级用户来说又有着足够的灵活性。Arduino语言是基于 Wiring 语言开发的,是对AVR-GCC库的二次封装,并不需要太多的单片机基础和编程基础,只要简单地学习后就可以快速地进行开发。
4.开放性
Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内可以任意修改原始设计及相应代码。
5.社区与第三方支持
Arduino有着众多的开发者和用户,因此可以找到他们提供的众多开源的示例代码和硬件设计。例如,可以在Github.com、Arduino.cc、 Openjumper.com、Arduino中文社区等网站上找到 Arduino 的第三方硬件、外设和类库等支持,以便更快、更简单地扩展自己的Arduino项目。
6.硬件开发趋势
Arduino 不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注于创意与实现,可以更快地完成自己的项目开发,大大节约学习的成本,缩短开发的周期。
鉴于 Arduino 的种种优势,越来越多的专业硬件开发者已经或开始使用 Arduino 来开发项目和产品;越来越多的软件开发者使用 Arduino 进入硬件、物联网等开发领域。
根据使用的不同微控制器,可提供各种 Arduino 板。然而,所有 Arduino 板都有一个共同点:它们通过 Arduino lDE 编程。
差异基于输入和输出的数量(可以在单个板上使用的传感器,LED和按钮的数量),速度,工作电压,外形尺寸等。一些板被设计为嵌入式,并且没有编程接口(硬件),因此你需要单独购买。有些可以直接从3.7V电池运行,其他至少需要5V。
以下是可用的不同Arduino板的列表。
板名称 | 工作电压 | 时钟速度 | 数字i/o | 模拟输入 | PWM | UART | 编程接口 |
---|---|---|---|---|---|---|---|
Arduino Uno R3 | 5V | 16MHz | 14 | 6 | 6 | 1 | USB通过ATMega16U2 |
Arduino Uno R3 SMD | 5V | 16MHz | 14 | 6 | 6 | 1 | USB通过ATMega16U2 |
Red Board | 5V | 16MHz | 14 | 6 | 6 | 1 | USB通过FTDI |
Arduino Pro 3.3v/8 MHz | 3.3V | 8MHz | 14 | 6 | 6 | 1 | FTDI兼容头 |
Arduino Pro 5V/16MHz | 5V | 16MHz | 14 | 6 | 6 | 1 | FTDI兼容头 |
Arduino mini 05 | 5V | 16MHz | 14 | 8 | 6 | 1 | FTDI兼容头 |
Arduino Pro mini 3.3v/8mhz | 3.3V | 8MHz | 14 | 8 | 6 | 1 | FTDI兼容头 |
Arduino Pro mini 5v/16mhz | 5V | 16MHz | 14 | 8 | 6 | 1 | FTDI兼容头 |
Arduino Ethernet | 5V | 16MHz | 14 | 6 | 6 | 1 | FTDI兼容头 |
Arduino Fio | 3.3V | 8MHz | 14 | 8 | 6 | 1 | FTDI兼容头 |
LilyPad Arduino 328 main board | 3.3V | 8MHz | 14 | 6 | 6 | 1 | FTDI兼容头 |
LilyPad Arduino simply board | 3.3V | 8MHz | 9 | 4 | 5 | 0 | FTDI兼容头 |
板名称 | 工作电压 | 时钟速度 | 数字i/o | 模拟输入 | PWM | UART | 编程接口 |
---|---|---|---|---|---|---|---|
Arduino Leonardo | 5V | 16MHz | 20 | 12 | 7 | 1 | 本机USB |
Pro micro 5V/16MHz | 5V | 16MHz | 14 | 6 | 6 | 1 | 本机USB |
Pro micro 3.3V/8MHz | 5V | 16MHz | 14 | 6 | 6 | 1 | 本机USB |
LilyPad Arduino USB | 3.3V | 8MHz | 14 | 6 | 6 | 1 | 本机USB |
板名称 | 工作电压 | 时钟速度 | 数字i/o | 模拟输入 | PWM | UART | 编程接口 |
---|---|---|---|---|---|---|---|
Arduino Mega 2560 R3 | 5V | 16MHz | 54 | 16 | 14 | 4 | USB通过ATMega16U2B |
Mega Pro 3.3V | 3.3V | 8MHz | 54 | 16 | 14 | 4 | FTDI兼容头 |
Mega Pro 5V | 5V | 16MHz | 54 | 16 | 14 | 4 | FTDI兼容头 |
Mega Pro Mini 3.3V | 3.3V | 8MHz | 54 | 16 | 14 | 4 | FTDI兼容头 |
板名称 | 工作电压 | 时钟速度 | 数字i/o | 模拟输入 | PWM | UART | 编程接口 |
---|---|---|---|---|---|---|---|
Arduino Mega 2560 R3 | 3.3V | 84MHz | 54 | 12 | 12 | 4 | 本机USB |
注:引用自Arduino概述。
在使用 Arduino 控制器完成项目制作之前,应该对各个型号有一定的了解,以便选择适合自己项目的控制器。
1、Arduino UNO
Arduino UNO 是目前使用最广泛的 Arduino 控制器,具有 Arduino 的所有功能,是初学者的最佳选择。在大部分参考书或者开源代码,都以 UNO 为例子。当然,掌握UNO开发技巧,其他型号控制器也是类似的,可以很轻松地移植代码。
2、Arduino MEGA
Arduino Mega 是一个增强型的Arduino 控制器,相对于UNO,它提供了更大的存储空间和更多的输入/输出接口,可以控制更多的设备,是完成较大型项目的较好选择。
3、Arduino Leonardo
Arduino Leonardo 使用集成了 USB 功能的 AVR 单片机作为主控芯片,具备其他型号 Arduino 控制器的所有功能之外还可以轻松模拟USB键盘/鼠标等USB设备。
4、Arduino Due
Arduino Due 突破性使用了32位的 ARM Cortex-M3 作为主控芯片。它集成了多种外设,有着其他Arduino板无法比拟的性能,是目前最为强大的 Arduino 控制器。
5、小型化的Arduino
常见小型 Arduino 控制器有 Arduino Nano,Arduino Mini,Arduino Micro,Arduino LilyPad 等。这些小型控制器虽然在设计上精简了许多地方,但使用起来一样方便。其中 Arduino Mini 和 Arduino Lilypad 需要外部模块配合来完成程序下载功能。
Arduino提供了Arduino Software IDE,一套以 Java 编写的跨平台应用软件。Arduino Software IDE 源自于 Processing 编程语言以及 Wiring 计划的集成开发环境。它是被设计于介绍程序编写给艺术家和不熟悉程序设计的人们,且包含了一个拥有语法高亮、括号匹配、自动缩进和一键编译并将可执行文件烧写入Arduino 硬件中的编辑器。
Arduino Software IDE 使用与C语言和C++相仿的编程语言,并且提供了包含常见的输入/输出函数的Wiring 软件库。在使用 GNU toolchain 编译和链接后,Arduino Software IDE 提供了一个程序“avrdude”用来转换可执行档成为能够烧写入Arduino硬件的固件。
使用 Arduino Software IDE 编写的程序被称为“sketch”(草图)。一个典型的 Arduino C/C++ sketch 程序会包含两个函数,它们会在编译后合成为 main()
函数:
// 打开IDE会自动创建一个sketch模板,如下:
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
#define led 2 //定义数字IO 2的名字为led
void setup() //初始化部分
{
pinMode(led,OUTPUT); //定义led引脚为输出模式
}
void loop() //主循环
{
digitalWrite(led,LOW); //led引脚输出低电平,点亮led
delay(1000); //延时1000ms
digitalWrite(led,HIGH); //led引脚输出高电平,熄灭led
delay(1000); //延时1s
}
Arduino 程序可由五个部分组成 :
(1) 导入库与定义 (可有可无)
#include <stdint.h>
#define LED 2
(2)声明常量与全域变量 (可有可无)
const float PI = 3.14159;
int r = 0 ;
(3)初始化函数setup() (必要)
void setup() {}
(4)循环函数loop() (必要)
void loop() {}
(5)自定义函数 (可有可无)
float area(float r) {
float a = PI*r*r;
return a;
}
其中 setup()
与 loop()
是一定要有的函数 (均无参数无传回值),其他则视需要而定。Arduino 语言采用 C/C++ 语法,加上以 Wiring 为基础的电子设计核心库组合而成,包括 Digital I/O,Analog I/O 等库.。内置的库可直接调用,但若有使用第三方库(例如驱动感测器模块所需的库),则必须使用 include 前置指令引入。此外,也可以用前置指令 define
定义一个常量或宏 (表达式)。
前置指令乃 C 编译器指令, 不属于 C 语言本身, 其用途有三 :
所以前置指令的功能之一就是替换,include 就是在标头处以指定之文件内容替换;而 #define 就是在程序中用到所定义之常量与宏名称时,以其内容替换。
宏的功能事实上与函数类似,不同之处是函数调用使用堆栈,而宏则是直接放在源代码中,由编译器自动进行替换,运行效率较快 (但若很多地方都要用到时, 编译后就会比较大)。
注意:
头文件可用角括号 < > 或双引号 " ", 差别是:
Arduino 家族中的8位开发板和32位开发板的基本数据类型是有差别。对于8位开发板来说,int 占2字节,double 和 float 占4字节。而对于32位开发板,int 占用4字节,double 占用8字节。下表提供了你将在Arduino编程期间使用的所有数据类型。
数据类型 | 占用字节 | 数值范围 | 说明 |
---|---|---|---|
void | 仅用于函数声明,表示没有返回值 | ||
boolean/bool | 1 | true/false | 每个布尔变量占一个字节的内存 |
char | 1 | -128~127 | Arduino中的char是有符号的,等价于signed char;char常被是用于储存ASCII字符;如果想存储数据,建议使用byte类型 |
unsigned char | 1 | 0~255 | 等同于byte和uint8_t类型 |
byte | 1 | 0~255 | byte类型不是C/C++标准类型,他是Arduino平台下特有的,它实际就是无符号8位整型数据 |
int | 2 | -32768~32767 | 在基于 ATMega 的8位微控制器的Arduino开发板如Arduino UNO、Ardunio Mega2560,int占用2字节内存;而对于32位Arduino开发板(如Arduino Due,SAMD)int占4字节 |
unsigned int | 2 | 0~65536 | 等同于word和uint16_t类型;Due存储4字节值 |
word | 2 | 0~65536 | 在Uno和其他基于ATMEGA的板上,一个word存储一个16位无符号数;在Due和Zero上,它存储一个32位无符号数 |
long | 4 | -2147483648~2147483647 | 用于数字存储的扩展大小变量 |
unsigned long | 4 | 0~2^32-1 | 等同于uint32_t类型 |
short | 2 | -32768~32767 | 短整型 |
float | 4 | -3.4028235E+38~3.4028235E+38 | 只有6~7位小数精度 |
double | 4 | -3.4028235E+38~3.4028235E+38 | 在Arduino Due上有8个字节,其余的跟float一样 |
string | 相当于char类型的数组 | ||
array | 数组 |
1、变量范围
Arduino 使用的C语言中的变量具有名为scope(范围)的属性。scope是程序的一个区域,有三个地方可以声明变量。它们是:
(1)局部变量
在函数或代码块中声明的变量是局部变量。它们只能由该函数或代码块中的语句使用。局部变量不能在它们自己之外运行。以下是使用局部变量的示例:
void setup() {}
void loop() {
int i = 0;
}
(2)全局变量
全局变量在所有函数之外定义,通常位于程序的顶部。全局变量将在程序的整个生命周期中保持其真值。全局变量可以被任何函数访问。也就是说,一个全局变量可以在整个程序中声明后使用。
以下示例使用全局变量和局部变量:
注意:全局变量、静态变量、常量应使用大写字母来命名name,防止混淆且有警示作用。
uint16_t NUMBER = 0;
void setup() {}
void loop() {
int i = 0;
}
运算符是一个符号,它告诉编译器执行特定的数学或逻辑函数。C语言具有丰富的内置运算符,并提供以下类型的运算符:
(1)选择结构又称选取结构或分支结构。在编程中,经常需要根据当前数据做出判断,以决定下一步的操作。
序号 | 控制语句和描述 |
---|---|
1 | 它采用括号中的表达式,后面跟随语句或语句块。如果表达式为真,则执行语句或语句块,否则跳过这些语句。 |
2 | 一个 if 语句后面可以跟随一个可选的else语句,当表达式为false时执行。 |
3 | if 语句后面可以跟随一个可选的 else if ... else 语句,其对于测试各种条件非常有用。 |
4 | 类似于if语句, switch ... case 通过允许程序员指定应在各种条件下执行的不同代码来控制程序的流程。 |
5 | 条件运算符? :是C语言中唯一的三元运算符。 |
(2)循环结构又称重复结构,即反复执行某一部分的操作。有两类循环结构:“当”( while)循环和“直到”(until)循环。
序号 | 循环及描述 |
---|---|
1 | while循环将会连续、无限循环,直到括号()内的表达式变为false。必须用一些东西改变被测试的变量,否则while循环永远不会退出。 |
2 | do ... while循环类似于while循环。在while循环中,循环连续条件在循环开始时测试,然后再执行循环体。 |
3 | for循环执行语句预定的次数。循环的控制表达式在for循环括号内完全的初始化,测试和操作。 |
4 | C语言允许你在另一个循环内使用一个循环。下面的例子说明了这个概念。 |
5 | 它是没有终止条件的循环,因此循环变为无限。 |
[Why]
1、什么是单片机?它与个人计算机有什么不同?
Ans:一台能够工作的计算机要有这样几个部份构成:中央处理单元CPU(进行运算、控制)、随机存储器RAM(数据存储)、存储器ROM(程序存储)、输入/输出设备I/O(串行口、并行输出口等)。在个人计算机(PC)上这些部份被分成若干块芯片,安装在一个被称之为主板的印刷线路板上。而在单片机中,这些部份全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它外设电路如==模拟量/数字量转换(A/D)和数字量/模拟量转换(D/A)==等。
2、 为什么用单片机,如Arduino、STm32,MCS-51等.
Ans:实际工作中并不是任何涉及计算和控制的场合都要求处理器或计算机有很高的性能,其应用的关键在于使用性能(是否够用)和经济性(是否有很好的性能价格比)。