基础篇

本章开始,将由浅入深,详细介绍开发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 int

0  ~ 65,535
( 0 ~ 216 - 1)

无符号整型

long

–2,147,483,648  ~ 2,147,483,647
( -231 ~ 231 - 1)

长整型

unsigned long

0 ~ 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\<9等。

数组

数组是由一组相同数据类型的数据构成的集合。数组概念的引入,使得在处理多个相同类型的数据时,程序更加清晰和简洁。

其定义方式如下:

数据类型 数组名称 [数组元素个数];

如,定义一个有5个int型元素的数组:

int a[5];

如果要访问一个数组中的某一元素,需要使用

数组名称[下标]

需要注意的是数组下标是从0开始编号的。如,将数组a中的第1个元素赋值为1:

a[0]=1;

可以使用以上方法对数组赋值,也可以在数组定义时,对数组进行赋值。如:

int a[5]={1,2,3,4,5};

int a[5];

a[0]=1; a[1]=2; a[2]=3; a[3]=4; a[4]=5;

是等效的。

字符串

字符串的定义方式有两种,一种是以字符型数组方式定义,另一种是使用String类型定义。

char 字符串名称  [字符个数];

使用字符型数组的方式定义,使用方法和数组一致,有多少个字符便占用多少个字节的存储空间。

大多数情况下,可以使用String类型来定义字符串,该类型中提供一些操作字符串的成员函数,使得字符串使用起来更为灵活。

String 字符串名称;

String abc;

即可定义一个名为abc的字符串。可以在定义时为其赋值,或在定义后为其赋值,如

String abc;

abc = "Arduino Uno";

String abc = "Arduino Uno";

是等效的。

相较于数组形式的定义方法,使用String类型定义字符串会占用更多的存储空间。

注释

/与/之间的内容,及 // 之后的内容均为程序注释,使用它可以更好的管理代码。注释不会被编译到程序中,不影响程序的运行。

为程序添加注释的方法有两种:

单行注释:

// 注释内容

多行注释:

/*

注释内容1

注释内容2

......

*/

arduino语言c,Arduino编程基础(二)——C\C++语言基础(上)相关推荐

  1. 《零基础看得懂的C语言入门教程 》——(二)C语言没那么难简单开发带你了解流程

    一.学习目标 了解DevC集成开发环境 了解集成开发环境 了解HelloWorld程序 了解HelloWorld程序的编写方法 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言. 第一 ...

  2. 计算机java语言教程,计算机JAVA教程二讲Java语言基础知识.doc

    计算机JAVA教程二讲Java语言基础知识 2.1简单数据类型 2.1.1 标识符和保留字 1.标识符 程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier).Java语言 ...

  3. c语言变色花编程,小学二年级上册科技教案-修订编选.pdf

    小学二年级上册科技教案-修订编选.pdf 小学二年级上册科技教案 1科 技 世 界 一 教学目的 1认识各种通信懂得人们常用通信电报.电话进行联络. 2培养学生热爱科学学习科学的兴趣. 教学重点 引导 ...

  4. 最简单的python语言程序设计_编程中最简单的语言Python,这样学或许更容易

    最近微信小程序上面出了一个跳一跳的小游戏 大家有没有玩呀? 编程中最简单的语言Python,这样学或许更容易 分享之前我还是要推荐下我自己建的Python开发学习群:628979297,群里都是学Py ...

  5. 用c语言给8051编程,8051单片机的C语言编程

    8051的C语言编程和传统的C语言编程是类似的.当然其中有些数据类型是不一样的,我们知道8051支持强大的位寻址能力,因此8051的C语言编程增加了一些新的数据类型,为了不使的8051的能力被浪费.下 ...

  6. C语言图形化编程 【二】

    C语言图形编程 二 3 基本贴图 3.1 声明一个存储图片的变量 3.2 图片的路径 3.3 显示图片 3.4 透明贴图 4 鼠标操作 4.1 声明一个存储鼠标信息的变量 4.2 获取鼠标 4.3 分 ...

  7. C语言用数组编程矩阵,二维数组—矩阵求和(C语言)

    昨天上机了,之前上机都觉得题目挺简单的,但昨天的题明显比以前难了好吗!字符串二维数组感觉也没教什么呀..所以我也做了蛮久,现依次把这几道题放在这里留作纪念. 题目1:请写一个程序,对于一个m行m列(2 ...

  8. c语言装逼编程,教你用C语言写一个好玩的万年历,必备的装逼神器

    long int f(int year, int month) { if (month<3) return="" year="" -="&quo ...

  9. 11. Python语言的核心编程 · 第十一章 Python语言的面向对象(上)

    Pythin语言的面向对象(上) 1. 面向对象简介 2. 类(class) 3. 对象的创建流程 4. 类的定义 5. 类中的属性和方法 6. 参数self 总结小便条 1. 面向对象简介   Py ...

  10. Linux下C语言串口应用编程,Linux下串口C语言编程

    Linux下串口C语言编程 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 串口操作代码#include #include #inclu ...

最新文章

  1. 《LINQ实战》译者感言
  2. Angular前端事件处理函数的形参名必须为某个硬编码值的怪事
  3. [python opencv 计算机视觉零基础到实战] 十五 直方图反向投影
  4. JVM体系结构:JVM类加载器和运行时数据区
  5. python 文本处理2
  6. win7电脑共享硬盘分区的方法
  7. 多个字符合并成一个数组_一个excel多个sheet,需要合并为一个sheet
  8. docker mysql 日志_在docker mysql容器中启用日志记录
  9. 如何将pdf导出html,如何导出PDF版、导出EXE版、导出HTML离线版?
  10. hadoop 完全分布式模式的安装和配置
  11. php 编码 url,php escape URL编码
  12. 2015 年全国电赛题——风力摆控制系统(B 题)
  13. 如何区分P2P是互联网创新还是非法集资?最高检回应
  14. 双一次算法作业hhhhhhhhh
  15. 【VC++游戏开发#六】2D篇 —— 粒子系统(一):浪漫唯美的场景之雪花飞舞
  16. 基于STM32设计物联网在线智能称重系统(OneNet)_2022
  17. “知识共享”(CC)与开放教育资源(OER)之间的紧密关系
  18. ${pageContext.request.contextPath}的作用
  19. 计算机视觉中的小样本学习综述
  20. ElasticSearch 亿级数据检索深度优化

热门文章

  1. 美容院客户的需求分析模型(REA模型)
  2. 设计复数类 Complex继承于数字类 Number,私有成员变量包括 double类型的实部rea(父类 Number中已定义)和虚部imag,公有成员方法包括两个构造方法(一个不带参数的和一个带两
  3. 模拟飞行 android,微软模拟飞行手机版
  4. 【待审批】开源网店系统Javashop 发布3.0beta版
  5. 如何用Label mx条码软件生成条形码标签
  6. 制造业案例 - Splashtop 助力南通中集实现远程技术支持
  7. 韩信点兵算法——c语言实现
  8. MATLAB通信工具箱仿真16QAM系统
  9. GUID分区和MBR分区简介
  10. sqlserver 删除表中重复的数据