Arduino编程基础(二)

您所在的位置:网站首页 编程arduino基础教程 Arduino编程基础(二)

Arduino编程基础(二)

2023-09-16 15:56| 来源: 网络整理| 查看: 265

基础篇

本章开始,将由浅入深,详细介绍开发Arduino Uno所需的基础知识与开发方法。

Arduino语言

Arduino使用C/C++编写程序,虽然C++兼容C语言,但这是两种语言,C语言是一种面向过程的编程语言,C++是一种面向对象的编程语言。目前最新的Arduino核心库采用C与C++混合编写而成。

通常所说的Arduino语言其实是一套基于C/C++的嵌入式设备开发框架。其核心库文件提供了各种应用程序编程接口(Application Programming Interface,简称API)以供驱动硬件设备,这些API是对更底层的单片机支持库进行二次封装所形成的。例如,使用AVR单片机的Arduino的核心库是对AVR-Libc(基于GCC的AVR支持库)的二次封装。

传统开发方式中,需要厘清每个寄存器的意义及之间的关系,然后通过配置多个寄存器来达到目的。

而在Arduino中,使用了清楚明了的API替代繁杂的寄存器配置过程,如以下代码:

pinMode(13,OUTPUT); digitalWrite(13,HIGH);

pinMode(13,OUTPUT)即是设置引脚的模式,这里设定了13脚为输出模式;而digitalWrite(13,HIGH) 是让13脚输出高电平数字信号。

这些封装好的API,使得程序中的语句更容易被理解,不用理会单片机中繁杂的寄存器配置,就能直观地控制Arduino,增强程序的可读性的同时,也提高了开发效率。

Arduino程序结构

在上一章已经看到第一个Arduino程序Blink,如果使用过C/C++语言,会发现Arduino的程序结构与传统的C/C++结构的不同------Arduino程序中没有main函数。

其实并不是Arduino没有main函数,而是main函数的定义隐藏在了Arduino的核心库文件中。Arduino开发一般不直接操作main函数,而是使用Setup和loop这个两个函数。

通过 Arduino IDE菜单>文件>示例>01.Basics>BareMinimum 可以看到Arduino程序的基本结构:

void setup() { // 在这里加入setup代码,它只会运行一次: } void loop() { // 在这里加入loop代码,它会不断重复运行: }

Arduino程序基本结构由setup() 和loop() 两个函数组成:

void setup()

Arduino控制器通电或复位后,即会开始执行setup() 函数中的程序,该部分只会执行一次。

void loop()

在setup() 函数中的程序执行完后,Arduino会接着执行loop() 函数中的程序。而loop()函数是一个死循环,其中的程序会不断的重复运行。

实际开发中,通常在setup() 函数中完成Arduino的初始化设置,如配置I/O口状态,初始化串口等操作;在loop() 函数中完成程序的主要功能,如驱动各种模块,采集数据等。

C\C++语言基础

C\C++语言是国际上广泛流行的计算机高级语言。绝大多数硬件开发,均使用C/C++语言,Arduino也不例外。使用Arduino,需要有一定的C\C++基础,由于篇幅有限,本书仅对C\C++语言基础进行简单的介绍。此后章节中会穿插介绍一些特殊用法及编程技巧。

数据类型

在C\C++语言程序中,对所有的数据都必须指定其数据类型。数据又有常量和变量之分。

需要注意的是,Arduino Uno与AVR做核心的Arduino中的部分数据类型所占用的空间和取值范围有所不同。

变量

在程序中数值可变的量称为变量。其定义方法如下

类型 变量名;

例如,定义一个整型变量i:

int i;

可以在定义时为其赋值,也可以定义后,对其赋值,例如:

int i; i=95;

int i=95;

两者是等效的。

常量

在程序运行过程中,其值不能改变的量,称为常量。常量可以是字符,也可以是数字,通常使用语句

const 类型 常量名 = 常量值

定义常量。

还可以用宏定义来达到相同的目的。语句如下:

#define 宏名 值

如在Arduino核心库中已定义的常数PI,即是使用

#define PI 3.1415926535897932384626433832795

定义的。

#define宏定义

宏定义是C语言提供的一种预处理方式,其允许使用标识符来表示一个字符串,编译器在开始编译前,会将代码中标识符全部替换成对应的字符串,以达到对程序预先处理的目的。合理使用宏定义,可以简化代码编写,避免输入及语法错误,提高程序可读性。

整型

整型即整数类型。Arduino Uno可使用的整型数据取值范围如下

类型取值范围说明int–32,768 ~ 32,767( -215 ~ 215 - 1)整型unsigned int0 ~ 65,535( 0 ~ 216 - 1)无符号整型long–2,147,483,648 ~ 2,147,483,647( -231 ~ 231 - 1)长整型unsigned long0 ~ 4,294,967,295( 0 ~ 232 - 1)无符号长整型short–32,768 ~ 32,767( -215 ~ 215 - 1)短整型

在Arduino Due、Zero中,int及unsigned int占用4字节(32位)。

浮点型

浮点数也就是常说的实数。在Arduino中有float和double两种浮点类型,在Arduino Uno中,float类型占用4个字节(32位)内存空间,double类型占用8个字节(64位)内存空间;在Arduino Due、Zero中,double类型占用8字节(64位)内存空间。

浮点型数据的运算速度较慢且有一定误差,因此,通常会把浮点型转换为整型再进行相关运算。如9.8cm,通常会换算为98mm再计算。

字符型

字符型,即char类型,也是一种整形,占用一个字节内存空间,常用于存储字符变量。存储字符时,字符需要用单引号引用,如

char col='C';

字符都是以整数形式储存在char类型变量中的,数值与字符的对应关系,请参照附录中ASCII码表。

布尔型

布尔型变量,即boolean。它的值只有两个:false(假)和true(真)。boolean会占用1个字节的内存空间。

运算符与表达式 运算符

C\C++语言中有多种类型的运算符,常见运算符见表2-2:

运算符类型运算符说明算术运算符=赋值+加-减*乘/除%取模比较运算符==等于!=不等于大于=大于或等于逻辑运算符&&逻辑与运算||逻辑或运算!逻辑非运算复合运算++自加–自减+=复合加-=复合减 表达式

通过运算符将运算对象连接起来的式子称之为表达式。如5+3、a-b、1



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3