文档库 最新最全的文档下载
当前位置:文档库 › Arduino编程参考手册中文版

Arduino编程参考手册中文版

Arduino编程参考手册中文版
Arduino编程参考手册中文版

Arduino 编程参考手册
程序结构........................................................................................................................................... 4 控制语句................................................................................................................................... 5 if ........................................................................................................................................ 5 if...else ............................................................................................................................... 6 for ...................................................................................................................................... 8 switch case ...................................................................................................................... 10 while ................................................................................................................................ 11 do...while ......................................................................................................................... 12 break ................................................................................................................................ 12 continue ........................................................................................................................... 13 return ............................................................................................................................... 14 goto ................................................................................................................................. 15 相关语法................................................................................................................................. 16 分号................................................................................................................................. 16 大括号............................................................................................................................. 16 注释................................................................................................................................. 18 define............................................................................................................................... 19 include ............................................................................................................................. 20 算术运算符............................................................................................................................. 21 赋值................................................................................................................................. 21 加,减,乘,除............................................................................................................. 21 取模................................................................................................................................. 22 比较运算符............................................................................................................................. 24 if(条件) and ==, !=, <, > (比较运算符) .......................................................................... 24 布尔运算符............................................................................................................................. 26 指针运算符............................................................................................................................. 27 位运算..................................................................................................................................... 27 位与................................................................................................................................. 27 位或................................................................................................................................. 28 位异或............................................................................................................................. 30 位非................................................................................................................................. 32 左移、右移..................................................................................................................... 33 复合运算符............................................................................................................................. 35 自加++ ............................................................................................................................ 35 自减-- .............................................................................................................................. 35 复合加+= ........................................................................................................................ 35 复合减-= ......................................................................................................................... 36 复合乘*= ........................................................................................................................ 36 复合除/= ......................................................................................................................... 36 复合与&= ....................................................................................................................... 36 复合或|=.......................................................................................................................... 36 变量 ................................................................................................................................................ 36

常量......................................................................................................................................... 36 宏定义............................................................................................................................. 37 整型常量......................................................................................................................... 38 浮点数常量..................................................................................................................... 40 数据类型................................................................................................................................. 41 void ................................................................................................................................. 41 boolean ............................................................................................................................ 41 char .................................................................................................................................. 43 unsigned char .................................................................................................................. 43 byte .................................................................................................................................. 43 int .................................................................................................................................... 44 unsigned int ..................................................................................................................... 45 word ................................................................................................................................ 46 long ................................................................................................................................. 46 unsigned long .................................................................................................................. 46 float ................................................................................................................................. 48 double .............................................................................................................................. 49 string ............................................................................................................................... 49 String(c++) ...................................................................................................................... 51 array ................................................................................................................................ 52 数据类型转换......................................................................................................................... 53 char() ............................................................................................................................... 53 byte() ............................................................................................................................... 54 int() .................................................................................................................................. 54 word() .............................................................................................................................. 55 long() ............................................................................................................................... 55 float()............................................................................................................................... 56 变量作用域&修饰符.............................................................................................................. 56 变量作用域..................................................................................................................... 56 static (静态变量)............................................................................................................. 57 volatile (易变变量) ......................................................................................................... 59 const (不可改变变量)..................................................................................................... 60 辅助工具................................................................................................................................. 61 sizeof() (sizeof 运算符) .................................................................................................. 61 ASCII 码表 ..................................................................................................................... 62 基本函数......................................................................................................................................... 64 数字 I/O .................................................................................................................................. 64 pinMode()........................................................................................................................ 64 digitalWrite() ................................................................................................................... 65 digitalRead().................................................................................................................... 66 模拟 I/O .................................................................................................................................. 68 analogReference() ........................................................................................................... 68 analogRead() ................................................................................................................... 68 analogWrite() .................................................................................................................. 69

高级 I/O .................................................................................................................................. 70 shiftOut() ......................................................................................................................... 70 pulseIn() .......................................................................................................................... 71 时间......................................................................................................................................... 72 millis() ............................................................................................................................. 72 delay(ms) ......................................................................................................................... 73 delayMicroseconds(us) ................................................................................................... 74 数学库..................................................................................................................................... 75 min() ................................................................................................................................ 75 max() ............................................................................................................................... 75 abs()................................................................................................................................. 75 constrain() ....................................................................................................................... 75 map() ............................................................................................................................... 76 pow() ............................................................................................................................... 77 sqrt() ................................................................................................................................ 77 三角函数................................................................................................................................. 78 sin(),cos(),tan() ................................................................................................................ 78 随机数..................................................................................................................................... 78 randomSeed() .................................................................................................................. 78 random() .......................................................................................................................... 78 位操作..................................................................................................................................... 79 设置中断函数......................................................................................................................... 80 a ....................................................................................................................................... 80 achInterrupt() .................................................................................................................. 80 detachInterrupt().............................................................................................................. 82 interrupts() ....................................................................................................................... 82 noInterrupts() .................................................................................................................. 83 串口通讯................................................................................................................................. 83 begin() ............................................................................................................................. 83 available()........................................................................................................................ 84 read() ............................................................................................................................... 86 flush() .............................................................................................................................. 87 print() .............................................................................................................................. 87 println() ........................................................................................................................... 91 write() .............................................................................................................................. 91 peak() .............................................................................................................................. 92 serialEvent() .................................................................................................................... 92

程序结构
(本节直译自 Arduino 官网最新 Reference)
在 Arduino 中, 标准的程序入口 main 函数在内部被定义, 用户只需要关心以下两个函数:
setup()
当 Arduino 板起动时 setup()函数会被调用。用它来初始化变量,引脚模式,开始使用某个库,等等。该函数在 Arduino 板的每次上电和复位时只运行一次。
loop()
在创建 setup 函数,该函数初始化和设置初始值,loop()函数所做事的正如其名,连续循环,允许你的程序改变状态和 响应事件。可以用它来实时控制 arduino 板。 示例: int bu onPin = 3;
void setup() { Serial.begin(9600); //初始化串口 pinMode(bu onPin, INPUT); //设置3号引脚为输入模式 }
void loop() {

if (digitalRead(bu onPin) == HIGH) serialWrite('H'); else serialWrite('L');
delay(1000); }
控制语句
if
if,用于与比较运算符结合使用,测试是否已达到某些条件,例如一个输入数据在某个范围之外。使用格式如下:
if (value > 50) { // 这里加入你的代码 }
该程序测试 value 是否大于50。如果是,程序将执行特定的动作。换句话说,如果圆括号中的语句为真,大括号中的语 句就会执行。如果不是,程序将跳过这段代码。大括号可以被省略,如果这么做,下一行(以分号结尾)将成为唯一的 条件语句。
if (x > 0) digitalWrite(LEDpin, HIGH);

if (x > 0) digitalWrite(LEDpin, HIGH);
if (x > 0){ digitalWrite(LEDpin, HIGH); }
if (x > 0){ digitalWrite(LEDpin1, HIGH); digitalWrite(LEDpin2, HIGH); } // 都是正确的
圆括号中要被计算的语句需要一个或多个操作符。
if...else
与基本的 if 语句相比,由于允许多个测试组合在一起,if/else 可以使用更多的控制流。例如,可以测试一个模拟量输入, 如果输入值小于500,则采取一个动作,而如果输入值大于或等于500,则采取另一个动作。代码看起来像是这样:
if (pinFiveInput < 500) { // 动作 A }

else { // 动作 B }
else 中可以进行另一个 if 测试,这样多个相互独立的测试就可以同时进行。每一个测试一个接一个地执行直到遇到一个 测试为真为止。 当发现一个测试条件为真时, 与其关联的代码块就会执行, 然后程序将跳到完整的 if/else 结构的下一行。 如果没有一个测试被验证为真。缺省的 else 语句块,如果存在的话,将被设为默认行为,并执行。 注意:一个 else if 语句块可能有或者没有终止 else 语句块,同理。每个 else if 分支允许有无限多个。
if (pinFiveInput < 500) { // 执行动作 A } else if (pinFiveInput >= 1000) { // 执行动作 B } else { // 执行动作 C }
另外一种表达互斥分支测试的方式,是使用 switch case 语句。

for
for 语句 描述 for 语句用于重复执行被花括号包围的语句块。一个增量计数器通常被用来递增和终止循环。for 语句对于任何需要重复 的操作是非常有用的。常常用于与数组联合使用以收集数据/引脚。for 循环的头部有三个部分:
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); } }
编码提示: C 中的 for 循环比在其它计算机语言中发现的 for 循环要灵活的多,包括 BASIC。三个头元素中的任何一个或全部可能 被省略, 尽管分号是必须的。 而且初始化部分、 条件判断部分和数据递增部分可以是任何合法的使用任意变量的 C 语句。 且可以使用任何数据类型包括 floats。这些不常用的类型用于语句段也许可以为一些罕见的编程问题提供解决方案。 例如,在递增部分中使用一个乘法将形成对数级增长: for(int x = 2; x < 100; x = x * 1.5){ println(x); }
输出: 2,3,4,6,9, ,19,28,42,63,94 另一个例子,在一个 for 循环中使一个 LED 灯渐渐地变亮和变暗:
void loop() { int x = 1; for (int i = 0; i > -1; i = i + x){ analogWrite(PWMpin, i); if (i == 255) x = -1; delay(10); } } // 在峰值切换方向

switch case
switch case 语句 就像 if 语句,switch...case 通过允许程序员根据不同的条件指定不同的应被执行的代码来控制程序流。特别地,一个 switch 语句对一个变量的值与 case 语句中指定的值进行比较。当一个 case 语句被发现其值等于该变量的值。就会运行 这个 case 语句下的代码。 break 关键字将中止并跳出 switch 语句段,常常用于每个 case 语句的最后面。如果没有 break 语句,switch 语句将继 续执行下面的表达式(“持续下降”)直到遇到 break,或者是到达 switch 语句的末尾。 示例: switch (var) { case 1: //当 var 等于1执行这里 break; case 2: //当 var 等于2执行这里 break; default: // 如果没有匹配项,将执行此缺省段 // default 段是可选的 }
语法 switch (var) { case label: // statements

break; case label: // statements break; default: // statements }
参数 var: 与不同的 case 中的值进行比较的变量
label: 相应的 case 的值
while
while 循环 描述: while 循环将会连续地无限地循环,直到圆括号()中的表达式变为假。被测试的变量必须被改变,否则 while 循环将永 远不会中止。这可以是你的代码,比如一个递增的变量,或者是一个外部条件,比如测试一个传感器。 语法: while(expression){ // statement(s) }
参数: expression - 一个(布尔型)C 语句,被求值为真或假 示例: var = 0;

while(var < 200){ // 做两百次重复的事情 var++; }
do...while
do 循环 do 循环与 while 循环使用相同方式工作,不同的是条件是在循环的末尾被测试的,所以 do 循环总是至少会运行一次。
do { // 语句块 } while (测试条件);
示例: do { delay(50); // 等待传感器稳定
x = readSensors(); // 检查传感器的值
} while (x < 100);
break
break 用于中止 do,for,或 while 循环,绕过正常的循环条件。它也用于中止 switch 语句。 示例: for (x = 0; x < 255; x ++)

{ digitalWrite(PWMpin, x); sens = analogRead(sensorPin); if (sens > threshold){ x = 0; break; } delay(50); } // bail out on sensor detect
continue
continue 语句跳过一个循环的当前迭代的余下部分。 (do,for,或 while) 。通过检查循环测试条件它将继续进行随后的 迭代。 示例: for (x = 0; x < 255; x ++) { if (x > 40 && x < 0){ // create jump in values continue; }
digitalWrite(PWMpin, x); delay(50); }

return
终止一个函数,并向被调用函数并返回一个值,如果你想的话。 语法: return; return value; // both forms are valid
参数: value: 任何类型的变量或常量 示例: //一个函数,用于对一个传感器输入与一个阈值进行比较
int checkSensor(){ if (analogRead(0) > 400) { return 1; else{ return 0; } }
return 关键字对测试一段代码很方便,不需“注释掉”大段的可能是错误的代码。
void loop(){
//在此测试代码是个好想法

return;
// 这里是功能不正常的代码 // 这里的代码永远也不会执行 }
goto
在程序中转移程序流到一个标记点 语法: label: goto label; // sends program flow to the label
提示: 在 C 程序中不建议使用 goto,而且一些 C 编程书的作者主张永远不要使用 goto 语句,但是明智地使用它可以简化某些 代码。许多程序员不赞成使用 goto 的原因是,无节制地使用 goto 语句很容易产生执行流混乱的很难被调试程序。尽管 如是说,仍然有很多使用 goto 语句而大大简化编码的实例。其中之一就是从一个很深的循环嵌套中跳出去,或者是 if 逻辑块,在某人些条件下。 示例: for(byte r = 0; r < 255; r++){ for(byte g = 255; g > -1; g--){ for(byte b = 0; b < 255; b++){ if (analogRead(0) > 250){ goto bailout;} // 其它语句。 。 。 } } }

bailout:
相关语法
分号
用于一个语句的结束 示例 int a = 0;
提示 忘记在一行的末尾加一个分号将产生一个编译器错误。该错误信息可能是明显的,且会提及丢失分号,但也许不会。如 果出现一个不可理喻的或看起来不合逻辑的错误,其中一个首先要做的事就是检查分号丢失。编译器会在前一行的附近 发出抱怨。
大括号
大括号(又称括弧或花括号)是 C 语言的主要组成部分。它们用在几个不同的结构中,大致如下,这可能会令初学者感 到困惑。 一个左大括号必须有一个右大括号跟在后面。这是一个常被称为平衡括号的条件。Arduino IDE(集成开发环境)包含一 个方便的特性以检验平衡大括号。只需选择一个大括号,甚至直接在一个大括号后面点击插入点,然后它的逻辑上的同 伴就会高亮显示。 目前此功能有些许错误,因为 IDE 经常在文本中(错误地)发现一个已经被注释掉的大括号。
初级程序员,和从 BASIC 转到 C 的程序员常常发现使用大括号令人困惑或畏缩。毕竟,用同样的大括号在子例程(函 数)中替换 RETURN 语句,在条件语句中替换 ENDIF 语句和在 FOR 循环中替换 NEXT 语句。
由于大括号的使用是如此的多样,当插入一个需要大括号的结构时,直接在打出开括号之后打出闭括号是个不错的编程 实践。然后在大括号之间插入一些回车符,接着开始插入语句。你的大括号,还有你的态度,将永远不会变得不平衡。
不平衡的大括号常常导致古怪的,难以理解的编译器错误,有时在大型程序中很难查出。因为它们的多样的使用,大括 号对于程序的语法也是极其重要的,对一个大括号移动一行或两行常常显著地影响程序的意义。 大括号的主要用法 //函数 void myfunction(datatype argument){ statements(s) }

//循环 while (boolean expression) { statement(s) }
do { statement(s) } while (boolean expression);
for (initialisation; termination condition; incrementing expr) { statement(s) }
//条件语句
if (boolean expression)

{ statement(s) }
else if (boolean expression) { statement(s) } else { statement(s) }
注释
注释是程序中的一些行,用于让自己或他人了解程序的工作方式。他们会被编译器忽略,而不会输出到控制器,所以它 们不会占用 Atmega 芯片上的任何空间。 注释唯一的目的是帮助你理解(或记忆)你的程序是怎样工作的,或者是告知其他人你的程序是怎样工作的。标记一行 为注释只有两种方式: 示例 x = 5; //这是一个单行注释。此斜线后的任何内容都是注释 //直到该行的结尾
/* 这是多行注释 - 用它来注释掉整个代码块 if (gwb == 0){ x = 3; //在多行注释中使用单行注释是没有问题的 /* 但是其中不可以使用另一个多行注释 - 这是不合法的 */

}
//别忘了加上“关闭”注释符 - 它们必须是平衡的 */
提示
当实验代码时, “注释掉”你的程序的一部分来移除可能是错误的行是一种方便的方法。 这不是把这些行从程序中移除, 而是把它们放到注释中,所以编译器就会忽略它们。这在定位问题时,或者当程序无法编译通过且编译错误信息很古怪 或没有帮助时特别有用。
define
#define 宏定义 宏定义是一个有用的 C 组件,它允许程序员在程序编译前给常量取一个名字。在 arduino 中定义的常量不会在芯片中占 用任何程序空间。编译器在编译时会将这些常量引用替换为定义的值。 这虽然可能有些有害的副作用,举例来说,一个已被定义的常量名被包含在一些其它的常量或变量名中。那样的话该文 本将被替换成被定义的数字(或文本) 。
通常,用 const 关键字定义常量是更受欢迎的且用来代替#define 会很有用。
Arduino 宏定义与 C 宏定义有同样的语法
语法 #define constantName value
注意‘#’是必须的 示例: #define ledPin 3 // 编译器在编译时会将任何提及 ledPin 的地方替换成数值3。

提示 #define 语句的后面分号。如果你加了一个,编译器将会在进一步的页面引发奇怪的错误。
#define ledPin 3;
// this is an error
类似地,包含一个等号通常也会在进一步的页面引发奇怪的编译错误。 #define ledPin = 3 // this is also an error
include
#include 包含 #include 用于在你的 sketch 中包含外部的库。这使程序员可以访问一个巨大的标准 C 库(预定义函数集合)的集合。 AVR C 库(AVR 是 Atmel 芯片的一个基准,Arduino 正是基于它)的主参考手册页在这里。
注意#include 和#define 相似,没有分号终止符,且如果你加了,编译器会产生奇怪的错误信息。 示例 该示例包含一个用于输出数据到程序空间闪存的库,而不是内存。这会为动态内存需求节省存储空间且使需要创建巨大 的查找表变得更实际。 #include
prog_uin 6_t myConstants[] PROGMEM = {0, 40, 702 , 9 8, 0, 25764, 8456,
0,0,0,0,0,0,0,0,29810,8968,29762,29762,4500};

相关文档