您好,欢迎访问三七文档
Arduino语言Arduino使用C/C++编写程序,虽然C++兼容C语言,但这是两种语言,C语言是一种面向过程的编程语言,C++是一种面向对象的编程语言。早期的Arduino核心库使用C语言编写,后来引进了面向对象的思想,目前最新的Arduino核心库采用C与C++混合编写而成。通常我们说的Arduino语言,是指Arduino核心库文件提供的各种应用程序编程接口(ApplicationProgrammingInterface,简称API)的集合。这些API是对更底层的单片机支持库进行二次封装所形成的。例如,使用AVR单片机的Arduino的核心库是对AVR-Libc(基于GCC的AVR支持库)的二次封装。传统开发方式中,你需要厘清每个寄存器的意义及之间的关系,然后通过配置多个寄存器来达到目的。而在Arduino中,使用了清楚明了的API替代繁杂的寄存器配置过程,如以下代码:[C++]纯文本查看复制代码?代码001002pinMode(13,OUTPUT);digitalWrite(13,HIGH);pinMode(13,OUTPUT)即是设置引脚的模式,这里设定了13脚为输出模式;而digitalWrite(13,HIGH)是让13脚输出高电平数字信号。这些封装好的API,使得程序中的语句更容易被理解,我们不用理会单片机中繁杂的寄存器配置,就能直观的控制Arduino,增强程序的可读性的同时,也提高了开发效率。在上一章我们已经看到第一个Arduino程序Blink,如果你使用过C/C++语言,你会发现Arduino的程序结构与传统的C/C++结构的不同——Arduino程序中没有main函数。其实并不是Arduino没有main函数,而是main函数的定义隐藏在了Arduino的核心库文件中。Arduino开发一般不直接操作main函数,而是使用Setup和loop这个两个函数。通过ArduinoIDE菜单文件示例01.BasicsBareMinimum可以看到Arduino程序的基本结构:[C++]纯文本查看复制代码?代码001002003voidsetup(){//在这里加入你的setup代码,它只会运行一次:004005006007008009}voidloop(){//在这里加入你的loop代码,它会不断重复运行:}Arduino程序基本结构由setup()和loop()两个函数组成:[C++]纯文本查看复制代码?代码001setup()Arduino控制器通电或复位后,即会开始执行setup()函数中的程序,该部分只会执行一次。通常我们会在setup()函数中完成Arduino的初始化设置,如配置I/O口状态,初始化串口等操作。[C++]纯文本查看复制代码?代码001loop()在setup()函数中的程序执行完后,Arduino会接着执行loop()函数中的程序。而loop()函数是一个死循环,其中的程序会不断的重复运行。通常我们会在loop()函数中完成程序的主要功能,如驱动各种模块,采集数据等。1.1C\C++语言基础C\C++语言是国际上广泛流行的计算机高级语言。绝大多数硬件开发,均使用C/C++语言,Arduino也不例外。使用Arduino,需要有一定的C\C++基础,由于篇幅有限,本书仅对C\C++语言基础进行简单的介绍。此后章节中我们还会穿插介绍一些特殊用法及编程技巧。1.11.1.1数据类型在C\C++语言程序中,对所有的数据都必须指定其数据类型。数据又有常量和变量之分。需要注意的是,Genuino101与AVR做核心的Arduino中的部分数据类型所占用的空间和取值范围有所不同。变量在程序中数值可变的量称为变量。其定义方法如下l类型变量名;例如,定义一个整型变量i:inti;我们可以在定义时为其赋值,也可以定义后,对其赋值,例如:inti;i=95;和inti=95;两者是等效的。常量在程序运行过程中,其值不能改变的量,称为常量。常量可以是字符,也可以是数字,通常使用语句const类型常量名=常量值定义常量。还可以用宏定义来达到相同的目的。语句如下:#define宏名值如在Arduino核心库中已定义的常数PI,即是使用#definePI3.1415926535897932384626433832795定义的。l整型整型即整数类型。Genuino101可使用的整型类型及取值范围如下表2‑1整型与取值范围类型取值范围说明int–2,147,483,6482,147,483,647(––1)整型unsignedint04,294,967,295(0–1)无符号整型long–2,147,483,6482,147,483,647(––1)长整型unsignedlong04,294,967,295(0–1)无符号长整型short–32,76832,767(––1)短整型l浮点型浮点数也就是常说的实数。在Arduino中有float和double两种浮点类型,在Genuino101中,float类型占用4个字节(32位)内存空间,double类型占用8个字节(64位)内存空间。浮点型数据的运算,速度较慢且可能有精度丢失。通常我们会把浮点型转换为整型来处理相关运算。如9.8cm,我们通常把换算为98mm来计算。l字符型字符型,即char类型,也是一种整形,占用一个字节内存空间,常用于存储字符变量。存储字符时,字符需要用单引号引用,如charcol=’C’;字符都是以整数形式储存在char类型变量中的,数值与字符的对应关系,请参照附录中ASCII码表。l布尔型布尔型变量,即boolean。它的值只有两个:false(假)和true(真)。boolean会占用1个字节的内存空间。1.1.2运算符与表达式C\C++语言中有多种类型的运算符,常见运算符见表2-2:表2‑2常见C\C++运算符运算符类型运算符说明算术运算符=赋值+加-减*乘/除%取模比较运算符==等于!=不等于小于大于=小于或等于=大于或等于逻辑运算符&&逻辑与运算||逻辑或运算!逻辑非运算复合运算++自加--自减+=复合加-=复合减1.1.3表达式通过运算符将运算对象连接起来的式子,我们称之为表达式。如5+3、a-b、19等。1.1.4数组数组是由一组相同数据类型的数据构成的集合。数组概念的引入,使得在处理多个相同类型的数据时,程序更加清晰和简洁。其定义方式如下:l数据类型数组名称[数组元素个数];如,定义一个有5个int型元素的数组:inta[5];如果要访问一个数组中的某一元素,需要使用l数组名称[下标]需要注意的是数组下标是从0开始编号的。如,将数组a中的第1个元素赋值为1:a[0]=1;你可以使用以上方法对数组赋值,也可以在数组定义时,对数组进行赋值。如:inta[5]={1,2,3,4,5};和inta[5];a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;是等效的。1.1.5字符串字符串的定义方式有两种,一种是以字符型数组方式定义,另一种是使用String类型定义。lchar字符串名称[字符个数];使用字符型数组的方式定义,使用方法和数组一致,有多少个字符便占用多少个字节的存储空间。大多数情况下,我们使用String类型来定义字符串,该类型中提供一些操作字符串的成员函数,使得字符串使用起来更为灵活。lString字符串名称;如Stringabc;即可定义一个名为abc的字符串。你可以在定义时为其赋值,或在定义后为其赋值,如Stringabc;abc=“Genuino101”;和Stringabc=“Genuino101”;是等效的。相较于数组形式的定义方法,使用String类型定义字符串会占用更多的存储空间。1.1.6注释/*与*/之间的内容,及//之后的内容均为程序注释,使用它可以更好的管理代码。注释不会被编译到程序中,不影响程序的运行。为程序添加注释的方法有两种:单行注释://注释内容多行注释:/*注释内容1注释内容2……*/
本文标题:Arduino语言
链接地址:https://www.777doc.com/doc-4227321 .html