收藏 分享(赏)

Arduino 语法手册变量部分.doc

上传人:fmgc7290 文档编号:4563204 上传时间:2019-01-02 格式:DOC 页数:19 大小:164.50KB
下载 相关 举报
Arduino 语法手册变量部分.doc_第1页
第1页 / 共19页
Arduino 语法手册变量部分.doc_第2页
第2页 / 共19页
Arduino 语法手册变量部分.doc_第3页
第3页 / 共19页
Arduino 语法手册变量部分.doc_第4页
第4页 / 共19页
Arduino 语法手册变量部分.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、Arduino 语法手册http:/wiki.geek- constantsHIGH|LOWINPUT|OUTPUTtrue | falseconstants是在 Arduino语言里预定义的变量。它们被用来使程序更易阅读。我们按组将常量分类。 逻辑层定义,true 与 false(布尔 Boolean常量)在 Arduino内有两个常量用来表示真和假:true 和 false。 false在这两个常量中 false更容易被定义。false 被定义为 0(零)。 truetrue通常被定义为 1,这是正确的,但 true具有更广泛的定义。在布尔含义(Boolean sense)里任何 非零 整

2、数 为 true。所以在布尔含义内-1,2 和-200都定义为 ture。需要注意的是 true和 false常量,不同于HIGH,LOW,INPUT 和 OUTPUT,需要全部小写。 这里引申一下题外话 arduino是大小写敏感语言(case sensitive)。 引脚电压定义,HIGH 和 LOW当读取(read)或写入(write)数字引脚时只有两个可能的值: HIGH 和 LOW 。 HIGHHIGH(参考引脚)的含义取决于引脚(pin)的设置,引脚定义为 INPUT或OUTPUT时含义有所不同。当一个引脚通过 pinMode被设置为 INPUT,并通过digitalRead读取(

3、read)时。如果当前引脚的电压大于等于 3V,微控制器将会返回为 HIGH。引脚也可以通过 pinMode被设置为 INPUT,并通过digitalWrite设置为 HIGH。输入引脚的值将被一个内在的 20K上拉电阻 控制 在 HIGH上,除非一个外部电路将其拉低到 LOW。当一个引脚通过 pinMode被设置为 OUTPUT,并 digitalWrite设置为 HIGH时,引脚的电压应在 5V。在这种状态下,它可以 输出电流 。例如,点亮一个通过一串电阻接地或设置为 LOW的OUTPUT属性引脚的 LED。 LOWLOW的含义同样取决于引脚设置,引脚定义为 INPUT或 OUTPUT时含

4、义有所不同。当一个引脚通过 pinMode配置为 INPUT,通过 digitalRead设置为读取(read)时,如果当前引脚的电压小于等于 2V,微控制器将返回为 LOW。当一个引脚通过 pinMode配置为 OUTPUT,并通过 digitalWrite设置为 LOW时,引脚为 0V。在这种状态下,它可以 倒灌 电流。例如,点亮一个通过串联电阻连接到+5V,或到另一个引脚配置为 OUTPUT、HIGH 的的 LED。 数字引脚(Digital pins)定义,INPUT 和 OUTPUT数字引脚当作 INPUT 或 OUTPUT 都可以 。用 pinMode()方法使一个数字引脚从INP

5、UT到 OUTPUT变化。 引脚(Pins)配置为输入(Inputs)Arduino(Atmega)引脚通过 pinMode()配置为 输入(INPUT) 即是将其配置在一个高阻抗的状态。配置为 INPUT的引脚可以理解为引脚取样时对电路有极小的需求,即等效于在引脚前串联一个 100兆欧姆(Megohms)的电阻。这使得它们非常利于读取传感器,而不是为 LED供电。 引脚(Pins)配置为输出(Outputs)引脚通过 pinMode()配置为 输出(OUTPUT) 即是将其配置在一个低阻抗的状态。 这意味着它们可以为电路提供充足的电流。Atmega 引脚可以向其他设备/电路提供(提供正电流

6、positive current)或倒灌(提供负电流 negative current)达 40毫安(mA)的电流。这使得它们利于给 LED供电,而不是读取传感器。输出(OUTPUT)引脚被短路的接地或 5V电路上会受到损坏甚至烧毁。Atmega引脚在为继电器或电机供电时,由于电流不足,将需要一些外接电路来实现供电。 integer constants整数常量整数常量是直接在程序中使用的数字,如 123。默认情况下,这些数字被视为 int,但你可以通过 U 和 L 修饰符进行更多的限制(见下文) 。通常情况下,整数常量默认为十进制,但可以加上特殊前缀表示为其他进制。 进制 例子 格式 备注 1

7、0(十进制) 123 无 2(二进制) B1111011 前缀B 只适用于 8 位的值(0 到 255)字符 0-1 有效8(八进制) 0173 前缀”0” 字符 0-7 有效 16(十六进制) 0x7B 前缀”0x” 字符 0-9,A-F,A-F 有效 小数是十进制数。这是数学常识。如果一个数没有特定的前缀,则默认为十进制。 二进制以 2 为基底,只有数字 0 和 1 是有效的。 示例: 101 /和十进制 5 等价 (1*22 + 0*21 + 1*20)二进制格式只能是 8 位的,即只能表示 0-255 之间的数。如果输入二进制数更方便的话,你可以用以下的方式: myInt = (B11

8、001100 * 256) + B10101010; / B11001100 作为高位。八进制是以 8 为基底,只有 0-7 是有效的字符。前缀“0” (数字 0)表示该值为八进制。 0101 / 等同于十进制数 65 (1 * 82) + (0 * 81) + 1) 警告:八进制数 0 前缀很可能无意产生很难发现的错误,因为你可能不小心在常量前加了个“0”,结果就悲剧了。 十六进制以 16 为基底,有效的字符为 0-9 和 A-F。十六进制数用前缀 “0x”(数字 0,字母爱克斯)表示。请注意,A-F 不区分大小写,就是说你也可以用 a-f。 示例: 0x101 / 等同于十进制 257 (

9、1 * 162) + (0 * 161) + 1)U 浮点数可以用科学记数法表示。E和e都可以作为有效的指数标志。 浮点数 被转换为 被转换为 10.0 10 2.34E5 2.34 * 105 234000 67E-12 67.0 * 10-12 0.000000000067数据类型voidvoidvoid 只用在函数声明中。它表示该函数将不会被返回任何数据到它被调用的函数中。 例子/功能在“setup”和“loop” 被执行/但没有数据被返回到高一级的程序中void setup()/ .void loop()/ .boolean布尔一个布尔变量拥有两个值,true 或 false。 (每个

10、布尔变量占用一个字节的内存。 ) 例子int LEDpin = 5; / LED 与引脚 5 相连int switchPin = 13; / 开关的一个引脚连接引脚 13,另一个引脚接地。boolean running = false;void setup()pinMode(LEDpin, OUTPUT);pinMode(switchPin, INPUT);digitalWrite(switchPin, HIGH); / 打开上拉电阻void loop()if (digitalRead(switchPin) = LOW) / 按下开关 - 使引脚拉向高电势delay(100); / 通过延迟,

11、以滤去开关抖动产生的杂波running = !running; / 触发 running 变量digitalWrite(LEDpin, running) /点亮 LEDchar描述一个数据类型,占用 1 个字节的内存存储一个字符值。字符都写在单引号,如A(多个字符(字符串)使用双引号,如“ABC” ) 。 字符以编号的形式存储。你可以在 ASCII 表中看到对应的编码。这意味着字符的 ASCII 值可以用来作数学计算。 (例如A+ 1,因为大写 A 的 ASCII 值是 65,所以结果为 66) 。如何将字符转换成数字参考 serial.println 命令。 char 数据类型是有符号的类型

12、,这意味着它的编码为-128 到 127。对于一个无符号一个字节(8 位)的数据类型,使用 byte 数据类型。 例如char myChar = A;char myChar = 65; / both are equivalentunsigned charunsigned char描述一个无符号数据类型占用 1 个字节的内存。与 byte 的数据类型相同。 无符号的 char 数据类型能编码 0 到 255 的数字。 为了保持 Arduino 的编程风格的一致性, byte 数据类型是首选。 例子unsigned char myChar = 240;bytebyte描述一个字节存储 8 位无符号

13、数,从 0 到 255。 例子byte b = B10010; / “B“ 是二进制格式(B10010 等于十进制 18)返回主菜单 intint简介整数是基本数据类型,占用 2 字节。整数的范围为-32,768 到 32,767( -215 (215)-1 ) 。整数类型使用 2 的补码方式存储负数。最高位通常为符号位,表示数的正负。其余位被“取反加 1”(此处请参考补码相关资料,不再赘述) 。 Arduino 为您处理负数计算问题,所以数学计算对您是透明的(术语:实际存在,但不可操作。相当于“黑盒” ) 。但是,当处理右移位运算符()时,可能有未预期的编译过程。 示例int ledPin

14、= 13; 语法int var = val; var - 变量名val - 赋给变量的值提示当变量数值过大而超过整数类型所能表示的范围时(-32,768 到 32,767) ,变量值会“回滚”(详情见示例) 。 int xx = -32,768;x = x - 1; / x 现在是 32,767。x = 32,767;x = x + 1; / x 现在是 -32,768。返回主菜单 unsigned int描述unsigned int(无符号整型)与整型数据同样大小,占据 2 字节。它只能用于存储正数而不能存储负数,范围 065,535 (216) - 1)。 无符号整型和整型最重要的区别是它

15、们的最高位不同,既符号位。在 Arduino 整型类型中,如果最高位是 1,则此数被认为是负数,剩下的 15 位为按 2 的补码计算所得值。 例子unsigned int ledPin = 13; 语法unsigned int var = val; var - 无符号变量名称val - 给变量所赋予的值编程提示当变量的值超过它能表示的最大值时它会“滚回”最小值,反向也会出现这种现象。 unsigned int xx = 0;x = x - 1; /x 现在等于 65535-向负数方向滚回x = x + 1; /x 现在等于 0-滚回返回主菜单 wordword(字符)描述一个存储一个 16 字

16、节无符号数的字符,取值范围从 0 到 65535,与 unsigned int 相同。 例子word w = 10000; longlong描述长整数型变量是扩展的数字存储变量,它可以存储 32 位(4 字节)大小的变量,从-2,147,483,648 到 2,147,483,647。 例子long speedOfLight = 186000L; /参见整数常量L的说明语法long var = val; var - 长整型变量名var - 赋给变量的值unsigned long描述无符号长整型变量扩充了变量容量以存储更大的数据,它能存储 32 位(4 字节) 数据。与标准长整型不同无符号长整型

17、无法存储负数,其范围从 0 到 4,294,967,295(2 32 - 1) 。 例子unsigned long time;void setup()Serial.begin(9600);void loop()Serial.print(“Time: “);time = millis();/程序开始后一直打印时间Serial.println(time);/等待一秒钟,以免发送大量的数据delay(1000);语法unsigned long var = val; var - 你所定义的变量名val - 给变量所赋的值floatfloat描述float,浮点型数据,就是有一个小数点的数字。浮点数经常

18、被用来近似的模拟连续值,因为他们比整数更大的精确度。浮点数的取值范围在 3.4028235 E+38 -3.4028235E +38。它被存储为 32 位(4 字节)的信息。 float 只有 6-7 位有效数字。这指的是总位数,而不是小数点右边的数字。与其他平台不同的是,在那里你可以使用 double 型得到更精确的结果(如 15 位) ,在 Arduino 上,double型与 float 型的大小相同。 浮点数字在有些情况下是不准确的,在数据大小比较时,可能会产生奇怪的结果。例如 6.0 / 3.0 可能不等于 2.0。你应该使两个数字之间的差额的绝对值小于一些小的数字,这样就可以近似的

19、得到这两个数字相等这样的结果。 浮点运算速度远远慢于执行整数运算,例如,如果这个循环有一个关键的计时功能,并需要以最快的速度运行,就应该避免浮点运算。程序员经常使用较长的程式把浮点运算转换成整数运算来提高速度。 举例float myfloat;float sensorCalbrate = 1.117;语法float var = val; var您的 float 型变量名称val分配给该变量的值示例代码int x;int y;float z;x = 1;y = x / 2; / Y 为 0,因为整数不能容纳分数z = (float)x / 2.0; / Z 为 0.5(你必须使用 2.0 做除数

20、,而不是 2)doubledouble描述双精度浮点数。占用 4 个字节。 目前的 arduino 上的 double 实现和 float 相同,精度并未提高。 提示如果你从其他地方得到的代码中包含了 double 类变量,最好检查一遍代码以确认其中的变量的精确度能否在 arduino 上达到。 string - char arraystring(字符串)描述举例声明字符串的解释空终止字符单引号?还是双引号?包装长字符串字符串数组样例string(字符串)描述文本字符串可以有两种表现形式。你可以使用字符串数据类型(这是 0019 版本的核心部分),或者你可以做一个字符串,由 char 类型的数

21、组和空终止字符 (0)构成。 (求助,待润色-Leo)本节描述了后一种方法。而字符串对象(String object)将让你拥有更多的功能,同时也消耗更多的内存资源,关于它的详细信息,请参阅页面(String object)超链接 举例以下所有字符串都是有效的声明。 char Str115;char Str28 = a, r, d, u, i, n, o;char Str38 = a, r, d, u, i, n, o, 0;char Str4 = “arduino“;char Str58 = “arduino“;char Str615 = “arduino“;声明字符串的解释在 Str1 中

22、 声明一个没有初始化的字符数组在 Str2 中 声明一个字符数组(包括一个附加字符) ,编译器会自动添加所需的空字符在 Str3 中 明确加入空字符在 Str4 中 用引号分隔初始化的字符串常数,编译器将调整数组的大小,以适应字符串常量和终止空字符在 Str5 中 初始化一个包括明确的尺寸和字符串常量的数组在 Str6 中 初始化数组,预留额外的空间用于一个较大的字符串空终止字符一般来说,字符串的结尾有一个空终止字符(ASCII 代码 0) 。以此让功能函数(例如Serial.pring())知道一个字符串的结束。否则,他们将从内存继续读取后续字节,而这些并不属于所需字符串的一部分。 这意味着

23、,你的字符串比你想要的文字包含更多的个字符空间。这就是为什么 Str2 和 Str5需要八个字符,即使“Arduino ”只有七个字符 - 最后一个位置会自动填充空字符。str4 将自动调整为八个字符,包括一个额外的空。在 Str3 的,我们自己已经明确地包含了空字符(写入 0)。 需要注意的是,字符串可能没有一个最后的空字符(例如在 Str2 中您已定义字符长度为7,而不是 8) 。这会破坏大部分使用字符串的功能,所以不要故意而为之。如果你注意到一些奇怪的现象(在字符串中操作字符) ,基本就是这个原因导致的了。 单引号?还是双引号?定义字符串时使用双引号(例如“ABC” ) ,而定义一个单独

24、的字符时使用单引号(例如A) 包装长字符串你可以像这样打包长字符串: char myString = “This is the first line” ” this is the second line” ” etcetera”; 字符串数组当你的应用包含大量的文字,如带有液晶显示屏的一个项目,建立一个字符串数组是非常便利的。因为字符串本身就是数组,它实际上是一个两维数组的典型。 在下面的代码, ”char*”在字符数据类型 char 后跟了一个星号*表示这是一个“指针”数组。所有的数组名实际上是指针,所以这需要一个数组的数组。指针对于 C 语言初学者而言是非常深奥的部分之一,但我们没有必要了

25、解详细指针,就可以有效地应用它。 样例char* myStrings=“This is string 1“, “This is string 2“, “This is string 3“,“This is string 4“, “This is string 5“,“This is string 6“;void setup()Serial.begin(9600);void loop()for (int i = 0; i randomWalkHighRange)place = place - (place - randomWalkHighRange); / 将数字变为负方向return plac

26、e;volatilevolatile 关键字volatile 这个关键字是变量修饰符,常用在变量类型的前面,以告诉编译器和接下来的程序怎么对待这个变量。 声明一个 volatile 变量是编译器的一个指令。编译器是一个将你的 C/C+代码转换成机器码的软件,机器码是 arduino 上的 Atmega 芯片能识别的真正指令。 具体来说,它指示编译器编译器从 RAM 而非存储寄存器中读取变量,存储寄存器是程序存储和操作变量的一个临时地方。在某些情况下,存储在寄存器中的变量值可能是不准确的。 如果一个变量所在的代码段可能会意外地导致变量值改变那此变量应声明为 volatile,比如并行多线程等。在

27、 arduino 中,唯一可能发生这种现象的地方就是和中断有关的代码段,成为中断服务程序。 例子/当中断引脚改变状态时,开闭 LEDint pin = 13;volatile int state = LOW;void setup()pinMode(pin, OUTPUT);attachInterrupt(0, blink, CHANGE);void loop()digitalWrite(pin, state);void blink()state = !state;constconst 关键字const 关键字代表常量。它是一个变量限定符,用于修改变量的性质,使其变为只读状态。这意味着该变量,就

28、像任何相同类型的其他变量一样使用,但不能改变其值。如果尝试为一个 const 变量赋值,编译时将会报错。 const 关键字定义的常量,遵守 variable scoping 管辖的其他变量的规则。这一点加上使用 #define 的缺陷 ,使 const 关键字成为定义常量的一个的首选方法。 例子const float pi = 3.14;float x;/ x = pi * 2; / 在数学表达式中使用常量不会报错pi = 7; / 错误的用法 - 你不能修改常量值,或给常量赋值。#define 或 const您可以使用 const 或 define 创建数字或字符串常量。但 arrays,

29、 你只能使用 const。 一般 const 相对 的define 是首选 的定义常量语法。 辅助工具sizeof()描述sizeof 操作符返回一个变量类型的字节数,或者该数在数组中占有的字节数。 语法sizeof(variable) 参数variable: 任何变量类型或数组(如 int,float,byte) 示例代码sizeof 操作符用来处理数组非常有效,它能很方便的改变数组的大小而不用破坏程序的其他部分。 这个程序一次打印出一个字符串文本的字符。尝试改变一下字符串。 char myStr = “this is a test“;int i;void setup()Serial.begin(9600);0void/01 /12loop/21() /1for (i = 0; i sizeof(myStr) - 1; i+)Serial.print(i, DEC);Serial.print(“ = “);Serial.println(myStri, BYTE);请注意 sizeof 返回字节数总数。因此,较大的变量类型,如整数, for 循环看起来应该像这样。for (i = 0; i (sizeof(myInts)/sizeof(int) - 1; i+) /用 myIntsi来做些事

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 产品手册

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报