搜档网
当前位置:搜档网 › Arduino 语法手册变量部分

Arduino 语法手册变量部分

Arduino 语法手册变量部分
Arduino 语法手册变量部分

Arduino 语法手册

https://www.sodocs.net/doc/f818680987.html,/doku.php?id=arduino:arduino_language_re ference

变量部分

常量constants

HIGH|LOW

INPUT|OUTPUT

true | false

constants是在Arduino语言里预定义的变量。它们被用来使程序更易阅读。我们按组将常量分类。

逻辑层定义,true与false(布尔Boolean常量)

在Arduino内有两个常量用来表示真和假:true和 false。

false

在这两个常量中false更容易被定义。false被定义为0(零)。

true

true通常被定义为1,这是正确的,但true具有更广泛的定义。在布尔含义(Boolean sense)里任何非零整数为true。所以在布尔含义内-1,2和-200都定义为ture。需要注意的是true和false常量,不同于HIGH,LOW,INPUT 和OUTPUT,需要全部小写。

——这里引申一下题外话arduino是大小写敏感语言(case sensitive)。

引脚电压定义,HIGH和LOW

当读取(read)或写入(write)数字引脚时只有两个可能的值: HIGH 和 LOW 。HIGH

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

LOW

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

数字引脚(Digital pins)定义,INPUT和OUTPUT

数字引脚当作 INPUT 或 OUTPUT都可以。用pinMode()方法使一个数字引脚从INPUT到OUTPUT变化。

引脚(Pins)配置为输入(Inputs)

Arduino(Atmega)引脚通过pinMode()配置为输入(INPUT)即是将其配置在一个高阻抗的状态。配置为INPUT的引脚可以理解为引脚取样时对电路有极小的需求,即等效于在引脚前串联一个100兆欧姆(Megohms)的电阻。这使得它们非常利于读取传感器,而不是为LED供电。

引脚(Pins)配置为输出(Outputs)

引脚通过pinMode()配置为输出(OUTPUT)即是将其配置在一个低阻抗的状态。

这意味着它们可以为电路提供充足的电流。Atmega引脚可以向其他设备/电路提供(提供正电流positive current)或倒灌(提供负电流negative current)达40毫安(mA)的电流。这使得它们利于给LED供电,而不是读取传感器。输出(OUTPUT)引脚被短路的接地或5V电路上会受到损坏甚至烧毁。Atmega引脚在为继电器或电机供电时,由于电流不足,将需要一些外接电路来实现供电。

integer constants

整数常量

整数常量是直接在程序中使用的数字,如123。默认情况下,这些数字被视为int,但你可以通过U和L修饰符进行更多的限制(见下文)。通常情况下,整数常量默认为十进制,但可以加上特殊前缀表示为其他进制。

进制例子格式备注

10(十进制)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*2^2 + 0*2^1 + 1*2^0)

二进制格式只能是8位的,即只能表示0-255之间的数。如果输入二进制数更方便的话,你可以用以下的方式:

myInt = (B11001100 * 256) + B10101010; // B11001100 作为高位。

八进制是以8为基底,只有0-7是有效的字符。前缀“0”(数字0)表示该值为八进制。0101 // 等同于十进制数65 ((1 * 8^2) + (0 * 8^1) + 1)

警告:八进制数0前缀很可能无意产生很难发现的错误,因为你可能不小心在常量前加了个“0”,结果就悲剧了。

十六进制以16为基底,有效的字符为0-9和A-F。十六进制数用前缀“0x”(数字0,字母爱克斯)表示。请注意,A-F不区分大小写,就是说你也可以用a-f。

示例:

0x101 // 等同于十进制257 ((1 * 16^2) + (0 * 16^1) + 1)

U & L 格式

默认情况下,整型常量被视作int型。要将整型常量转换为其他类型时,请遵循以下规则:'u' or 'U' 指定一个常量为无符号型。(只能表示正数和0)例如: 33u

'l' or 'L' 指定一个常量为长整型。(表示数的范围更广)例如: 100000L

'ul' or 'UL' 这个你懂的,就是上面两种类型,称作无符号长整型。例如:32767ul floating point constants

浮点常量

和整型常量类似,浮点常量可以使得代码更具可读性。浮点常量在编译时被转换为其表达式所取的值。

例子

n = .005; 浮点数可以用科学记数法表示。'E'和'e'都可以作为有效的指数标志。

浮点数被转换为被转换为

10.0 10

2.34E5 2.34 * 10^5 234000

67E-12 67.0 * 10^-12 0.000000000067

数据类型

void

void

void只用在函数声明中。它表示该函数将不会被返回任何数据到它被调用的函数中。例子

//功能在“setup”和“loop”被执行

//但没有数据被返回到高一级的程序中

void setup()

{

// ...

}

void loop()

{

// ...

}

boolean

布尔

一个布尔变量拥有两个值,true或false。(每个布尔变量占用一个字节的内存。)

例子

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); // 通过延迟,以滤去开关抖动产生的杂波

running = !running; // 触发running变量

digitalWrite(LEDpin, running) //点亮LED

}

}

char

描述

一个数据类型,占用1个字节的内存存储一个字符值。字符都写在单引号,如'A'(多个字符(字符串)使用双引号,如“ABC”)。

字符以编号的形式存储。你可以在ASCII表中看到对应的编码。这意味着字符的ASCII值可以用来作数学计算。(例如'A'+ 1,因为大写A的ASCII值是65,所以结果为66)。如何将字符转换成数字参考serial.println命令。

char数据类型是有符号的类型,这意味着它的编码为-128到127。对于一个无符号一个字节(8位)的数据类型,使用byte数据类型。

例如

char myChar = 'A';

char myChar = 65; // both are equivalent

unsigned char

unsigned char

描述

一个无符号数据类型占用1个字节的内存。与byte的数据类型相同。

无符号的char数据类型能编码0到255的数字。

为了保持Arduino的编程风格的一致性,byte数据类型是首选。

例子

unsigned char myChar = 240;

byte

byte

描述

一个字节存储8位无符号数,从0到255。

例子

byte b = B10010; // "B" 是二进制格式(B10010等于十进制18)

返回主菜单

int

int

简介

整数是基本数据类型,占用2字节。整数的范围为-32,768到32,767(-2^15 ~(2^15)-1)。整数类型使用2的补码方式存储负数。最高位通常为符号位,表示数的正负。其余位被“取反加1”(此处请参考补码相关资料,不再赘述)。

Arduino为您处理负数计算问题,所以数学计算对您是透明的(术语:实际存在,但不可操作。相当于“黑盒”)。但是,当处理右移位运算符(?)时,可能有未预期的编译过程。

示例

int ledPin = 13;

语法

int var = val;

var - 变量名

val - 赋给变量的值

提示

当变量数值过大而超过整数类型所能表示的范围时(-32,768到32,767),变量值会“回滚”(详情见示例)。

int x

x = -32,768;

x = x - 1; // x 现在是32,767。

x = 32,767;

x = x + 1; // x 现在是-32,768。

返回主菜单

unsigned int

描述

unsigned int(无符号整型)与整型数据同样大小,占据2字节。它只能用于存储正数而不能存储负数,范围0~65,535 (2^16) - 1)。

无符号整型和整型最重要的区别是它们的最高位不同,既符号位。在Arduino整型类型中,如果最高位是1,则此数被认为是负数,剩下的15位为按2的补码计算所得值。

例子

unsigned int ledPin = 13;

语法

unsigned int var = val;

var - 无符号变量名称

val - 给变量所赋予的值

编程提示

当变量的值超过它能表示的最大值时它会“滚回”最小值,反向也会出现这种现象。

unsigned int x

x = 0;

x = x - 1; //x现在等于65535--向负数方向滚回

x = x + 1; //x现在等于0--滚回

返回主菜单

word

word(字符)

描述

一个存储一个16字节无符号数的字符,取值范围从0到65535,与unsigned int相同。

例子

word w = 10000;

long

long

描述

长整数型变量是扩展的数字存储变量,它可以存储32位(4字节)大小的变量,从-2,147,483,648到2,147,483,647。

例子

long speedOfLight = 186000L; //参见整数常量‘L’的说明

语法

long var = val;

var - 长整型变量名

var - 赋给变量的值

unsigned long

描述

无符号长整型变量扩充了变量容量以存储更大的数据,它能存储32位(4字节)数据。与标准长整型不同无符号长整型无法存储负数,其范围从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 - 给变量所赋的值

float

float

描述

float,浮点型数据,就是有一个小数点的数字。浮点数经常被用来近似的模拟连续值,因为他们比整数更大的精确度。浮点数的取值范围在3.4028235 E+38 ~ -3.4028235E +38。它被存储为32位(4字节)的信息。

float只有6-7位有效数字。这指的是总位数,而不是小数点右边的数字。与其他平台不同的是,在那里你可以使用double型得到更精确的结果(如15位),在Arduino上,double型与float型的大小相同。

浮点数字在有些情况下是不准确的,在数据大小比较时,可能会产生奇怪的结果。例如6.0 / 3.0 可能不等于2.0。你应该使两个数字之间的差额的绝对值小于一些小的数字,这样就可以近似的得到这两个数字相等这样的结果。

浮点运算速度远远慢于执行整数运算,例如,如果这个循环有一个关键的计时功能,并需要以最快的速度运行,就应该避免浮点运算。程序员经常使用较长的程式把浮点运算转换成整数运算来提高速度。

举例

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做除数,而不是2)

double

double

描述

双精度浮点数。占用4个字节。

目前的arduino上的double实现和float相同,精度并未提高。

提示

如果你从其他地方得到的代码中包含了double类变量,最好检查一遍代码以确认其中的变量的精确度能否在arduino上达到。

string - char array

string(字符串)

描述

举例

声明字符串的解释

空终止字符

单引号?还是双引号?

包装长字符串

字符串数组

样例

string(字符串)

描述

文本字符串可以有两种表现形式。你可以使用字符串数据类型(这是0019版本的核心部分),或者你可以做一个字符串,由char类型的数组和空终止字符('\0')构成。(求助,待润色-Leo)本节描述了后一种方法。而字符串对象(String object)将让你拥有更多的功能,同时也消耗更多的内存资源,关于它的详细信息,请参阅页面(String object)[超链接]

举例

以下所有字符串都是有效的声明。

char Str1[15];

char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};

char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};

char Str4[ ] = "arduino";

char Str5[8] = "arduino";

char Str6[15] = "arduino";

声明字符串的解释

在Str1中声明一个没有初始化的字符数组

在Str2中声明一个字符数组(包括一个附加字符),编译器会自动添加所需的空字符

在Str3中明确加入空字符

在Str4中用引号分隔初始化的字符串常数,编译器将调整数组的大小,以适应字符串常量

和终止空字符

在Str5中初始化一个包括明确的尺寸和字符串常量的数组

在Str6中初始化数组,预留额外的空间用于一个较大的字符串

空终止字符

一般来说,字符串的结尾有一个空终止字符(ASCII代码0)。以此让功能函数(例如Serial.pring())知道一个字符串的结束。否则,他们将从内存继续读取后续字节,而这些并不属于所需字符串的一部分。

这意味着,你的字符串比你想要的文字包含更多的个字符空间。这就是为什么Str2和Str5需要八个字符,即使“Arduino”只有七个字符- 最后一个位置会自动填充空字符。str4将自动调整为八个字符,包括一个额外的空。在Str3的,我们自己已经明确地包含了空字符(写入'\ 0')。

需要注意的是,字符串可能没有一个最后的空字符(例如在Str2中您已定义字符长度为7,而不是8)。这会破坏大部分使用字符串的功能,所以不要故意而为之。如果你注意到一些奇怪的现象(在字符串中操作字符),基本就是这个原因导致的了。

单引号?还是双引号?

定义字符串时使用双引号(例如“ABC”),而定义一个单独的字符时使用单引号(例如'A')包装长字符串

你可以像这样打包长字符串:char myString[] = “This is the first line””this is the second line””etcetera”;

字符串数组

当你的应用包含大量的文字,如带有液晶显示屏的一个项目,建立一个字符串数组是非常便利的。因为字符串本身就是数组,它实际上是一个两维数组的典型。

在下面的代码,”char*”在字符数据类型char后跟了一个星号'*'表示这是一个“指针”数组。所有的数组名实际上是指针,所以这需要一个数组的数组。指针对于C语言初学者而言是非常深奥的部分之一,但我们没有必要了解详细指针,就可以有效地应用它。

样例

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 < 6; i++){

Serial.println(myStrings[i]);

delay(500);

}

}

String - object

描述

String类,是0019版的核心的一部分,允许你实现比运用字符数组更复杂的文字操作。你可以连接字符串,增加字符串,寻找和替换子字符串以及其他操作。它比使用一个简单的字符数组需要更多的内存,但它更方便。

仅供参考,字符串数组都用小写的string表示而String类的实例通常用大写的String表示。注意,在“双引号”内指定的字符常量通常被作为字符数组,并非String类实例。

函数

String

charAt()

compareTo()

concat()

endsWith()

equals()

equalsIgnoreCase()

GetBytes()

indexOf()

lastIndexOf

length

replace()

setCharAt()

startsWith()

substring()

toCharArray()

toLowerCase()

toUpperCase()

trim()

操作符

[](元素访问)

+(串连)

==(比较)

举例

StringConstructors

StringAdditionOperator

StringIndexOf

StringAppendOperator

StringLengthTrim

StringCaseChanges

StringReplace

StringCharacters

StringStartsWithEndsWith

StringComparisonOperators

StringSubstring

array -(数组)

Arrays (数组)

创建(声明)一个数组

访问数组

指定一个数组的值:

从数组中访问一个值:

数组和循环

例子

Arrays (数组)

数组是一种可访问的变量的集合。Arduino的数组是基于C语言的,因此这会变得很复杂,但使用简单的数组是比较简单的。

创建(声明)一个数组

下面的方法都可以用来创建(声明)数组。

myInts [6];

myPins [] = {2,4,8,3,6};

mySensVals [6] = {2,4,-8,3,2};

char message[6] = "hello";

你声明一个未初始化数组,例如myPins。

在myPins中,我们声明了一个没有明确大小的数组。编译器将会计算元素的大小,并创建一个适当大小的数组。

当然,你也可以初始化数组的大小,例如在mySensVals中。请注意,当声明一个char类型的数组时,你初始化的大小必须大于元素的个数,以容纳所需的空字符。

访问数组

数组是从零开始索引的,也就说,上面所提到的数组初始化,数组第一个元素是为索引0,因此:

mySensVals [0] == 2,mySensVals [1] == 4,

依此类推。

这也意味着,在包含十个元素的数组中,索引九是最后一个元素。因此,

int myArray[10] = {9,3,2,4,3,2,7,8,9,11};

// myArray[9]的数值为11

// myArray[10],该索引是无效的,它将会是任意的随机信息(内存地址)

出于这个原因,你在访问数组应该小心。若访问的数据超出数组的末尾(即索引数大于你声明的数组的大小- 1),则将从其他内存中读取数据。从这些地方读取的数据,除了产生无效的数据外,没有任何作用。向随机存储器中写入数据绝对是一个坏主意,通常会导致不愉快的结果,如导致系统崩溃或程序故障。要排查这样的错误是也是一件难事。不同于Basic或JA V A,C语言编译器不会检查你访问的数组是否大于你声明的数组。

指定一个数组的值:

mySensVals [0] = 10;

从数组中访问一个值:

X = mySensVals [4];

数组和循环

数组往往在for循环中进行操作,循环计数器可用于访问每个数组元素。例如,将数组中的元素通过串口打印,你可以这样做:

int i;

for (i = 0; i < 5; i = i + 1) {

Serial.println(myPins[i]);

}

数据类型转换

char()

char

描述

将一个变量的类型变为char。

语法

char(x)

参数

x:任何类型的值

返回

char

byte()

byte()

描述

将一个值转换为字节型数值。

语法

byte(x)

参数

X:任何类型的值

返回

字节

int()

简介

将一个值转换为int类型。

语法

int(x)

参数

x:一个任何类型的值

返回值

int类型的值

word()

描述:把一个值转换为word数据类型的值,或由两个字节创建一个字符。

语法:word(x)

word(h, l)

参数:X:任何类型的值

H:高阶(最左边)字节

L:低序(最右边)字节

返回:字符

long()

描述:将一个值转换为长整型数据类型。

语法:long(x)

参数:x:任意类型的数值

返回:长整型数

float()

描述:将一个值转换为float型数值。

语法:float(x)

参数:X:任何类型的值

返回:float型数

注释:见float中关于Arduino浮点数的精度和限制的详细信息。

变量作用域& 修饰符

variable scope

变量的作用域

在Arduino使用的C编程语言的变量,有一个名为作用域(scope) 的属性。这一点与类似

BASIC的语言形成了对比,在BASIC语言中所有变量都是全局(global) 变量。

在一个程序内的全局变量是可以被所有函数所调用的。局部变量只在声明它们的函数内可见。在Arduino的环境中,任何在函数(例如,setup(),loop()等)外声明的变量,都是全局变量。

当程序变得更大更复杂时,局部变量是一个有效确定每个函数只能访问其自己变量的途径。这可以防止,当一个函数无意中修改另一个函数使用的变量的程序错误。

有时在一个for循环内声明并初始化一个变量也是很方便的选择。这将创建一个只能从for 循环的括号内访问的变量。

例子:

int gPWMval; // 任何函数都可以调用此变量

void setup()

{

// ...

}

void loop()

{

int i; // "i" 只在"loop" 函数内可用

float f; // "f" 只在"loop" 函数内可用

// ...

for (int j = 0; j <100; j++){

//变量j只能在循环括号内访问

}

}

static

static关键字用于创建只对某一函数可见的变量。然而,和局部变量不同的是,局部变量在每次调用函数时都会被创建和销毁,静态变量在函数调用后仍然保持着原来的数据。

静态变量只会在函数第一次调用的时候被创建和初始化。

例子

/* RandomWalk

* Paul Badger 2007

* RandomWalk函数在两个终点间随机的上下移动

* 在一个循环中最大的移动由参数“stepsize”决定

*一个静态变量向上和向下移动一个随机量

*这种技术也被叫做“粉红噪声”或“醉步”

*/

#define randomWalkLowRange -20

#define randomWalkHighRange 20

int stepsize;

INT thisTime;

int total;

void setup()

{

Serial.begin(9600);

}

void loop()

{ // 测试randomWalk 函数

stepsize = 5;

thisTime = randomWalk(stepsize);

serial.println(thisTime);

delay(10);

}

int randomWalk(int moveSize){

static int place; // 在randomwalk中存储变量

// 声明为静态因此它在函数调用之间能保持数据,但其他函数无法改变它的值

place = place + (random(-moveSize, moveSize + 1));

if (place < randomWalkLowRange){ //检查上下限

place = place + (randomWalkLowRange - place); // 将数字变为正方向

}

else if(place > randomWalkHighRange){

place = place - (place - randomWalkHighRange); // 将数字变为负方向

}

return place;

}

volatile

volatile关键字

volatile这个关键字是变量修饰符,常用在变量类型的前面,以告诉编译器和接下来的程序怎么对待这个变量。

声明一个volatile变量是编译器的一个指令。编译器是一个将你的C/C++代码转换成机器码的软件,机器码是arduino上的Atmega芯片能识别的真正指令。

具体来说,它指示编译器编译器从RAM而非存储寄存器中读取变量,存储寄存器是程序存储和操作变量的一个临时地方。在某些情况下,存储在寄存器中的变量值可能是不准确的。如果一个变量所在的代码段可能会意外地导致变量值改变那此变量应声明为volatile,比如并行多线程等。在arduino中,唯一可能发生这种现象的地方就是和中断有关的代码段,成为中断服务程序。

例子

//当中断引脚改变状态时,开闭LED

int pin = 13;

volatile int state = LOW;

void setup()

{

pinMode(pin, OUTPUT);

attachInterrupt(0, blink, CHANGE);

}

void loop()

{

digitalWrite(pin, state);

}

void blink()

{

state = !state;

}

const

const关键字

const关键字代表常量。它是一个变量限定符,用于修改变量的性质,使其变为只读状态。这意味着该变量,就像任何相同类型的其他变量一样使用,但不能改变其值。如果尝试为一个const变量赋值,编译时将会报错。

const关键字定义的常量,遵守variable scoping 管辖的其他变量的规则。这一点加上使用#define的缺陷,使const 关键字成为定义常量的一个的首选方法。

例子

const float pi = 3.14;

float x;

// ....

x = pi * 2; // 在数学表达式中使用常量不会报错

pi = 7; // 错误的用法- 你不能修改常量值,或给常量赋值。

#define 或const

您可以使用const 或#define 创建数字或字符串常量。但arrays, 你只能使用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);

}

{0}void{/0}{1} {/1}{2}loop{/2}{1}() {{/1}

for (i = 0; i < sizeof(myStr) - 1; i++){

Serial.print(i, DEC);

Serial.print(" = ");

Serial.println(myStr[i], BYTE);

}

}

请注意sizeof返回字节数总数。因此,较大的变量类型,如整数,for循环看起来应该像这样。

for (i = 0; i < (sizeof(myInts)/sizeof(int)) - 1; i++) {

//用myInts[i]来做些事

}

Arduino编程语言

Arduino编程参考手册 首页 程序结构变量基本函数

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

控制语句 if if,用于与比较运算符结合使用,测试是否已达到某些条件,例如一个输入数据在某个范围之外。使用格式如下: 该程序测试value是否大于50。如果是,程序将执行特定的动作。换句话说,如果圆括号中的语句为真,大括号中的语句就会执行。如果不是,程序将跳过这段代码。大括号可以被省略,如果这么做,下一行(以分号结尾)将成为唯一的条件语句。

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

else中可以进行另一个if测试,这样多个相互独立的测试就可以同时进行。每一个测试一个接一个地执行直到遇到一个测试为真为止。当发现一个测试条件为真时,与其关联的代码块就会执行,然后程序将跳到完整的if/else结构的下一行。如果没有一个测试被验证为真。缺省的else语句块,如果存在的话,将被设为默认行为,并执行。 注意:一个else if语句块可能有或者没有终止else语句块,同理。每个else if分支允许有无限多个。

ARDUINO入门及其简单实验7例

ARDUINO入门及其简单实验(7例) (1) 1. Arduino硬件开发平台简介 (1) 1.1 Arduino的主要特色 (2) 1.2 Arduino的硬件接口功能描述 (3) 1.3 Arduino的技术性能参数 (3) 1.4 电路原理图 (4) 2. Arduino软件开发平台简介 (5) 2.1 菜单栏 (5) 2.2 工具栏 (6) 2.3 Arduino 语言简介 (6) 3. Arduino开发实例中所用部分器件 (8) 1. LED简介 (8) 2. 光敏电阻简介 (9) 3. 直流电机简介 (9) 4. 电位器简介 (10) 4. Arduino平台应用开发实例 (10) 4.1【实作项目一】利用LED作光敏电阻采样实验 (10) 4.2【实作项目二】利用PWM信号控制LED亮度 (12) 4.3【实作项目三】单键控制一只LED的亮灭 (15) 4.4【实作项目四】利用PWM控制直流电机转速 (17) 4.5【实作项目五】利用电位器手控LED亮度 (19) 4.6【实作项目六】控制LED明暗交替 (21) 4.7【实作项目七】利用光敏电阻控制LED的亮灭 (23) ARDUINO入门及其简单实验(7例) 1. Arduino硬件开发平台简介 Arduino硬件是一块带有USB的I/O接口板(其中包括13条数字I/O引脚,6通道模拟输出,6通道模拟输入),并且具有类似于Java、C语言的集成开发环境。Arduino 既可以扩展一些外接的电子元器件,例如开关、传感器、LED、直流马达、步进马达或其他输入、输出装置;Arduino也可以独立运行,成为一个可以跟交互软件沟通的接口装置,例如:Flash、Processing、Max/MSP、VVVV或其他互动软件。Arduino 开发环境IDE全部开放源代码,可以供大家免费下载、利用,还可以开发出更多激发人们制作欲望的互动作品。

Arduino 语法手册函数部分

Arduino 语法手册函数部分 摘自:函数部分 数字 I/O pinMode() 描述 将指定的引脚配置成输出或输入。详情请见digital pins。 语法 pinMode(pin, mode) 参数 pin:要设置模式的引脚 mode:INPUT或OUTPUT 返回 无 例子 ledPin = 13 语法 noTone(pin) 参数 pin: 所要停止产生声音的引脚 返回 无 shiftOut() shiftOut() 描述 将一个数据的一个字节一位一位的移出。从最高有效位(最左边)或最低有效位(最右边)开始。依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。 注意:如果你所连接的设备时钟类型为上升沿,你要确定在调用shiftOut()前时钟脚为低电平,如调用digitalWrite(clockPin, LOW)。 注意:这是一个软件实现;Arduino提供了一个硬件实现的SPI库,它速度更快但只在特定脚有效。 语法 shiftOut(dataPin, clockPin, bitOrder, value) 参数 dataPin:输出每一位数据的引脚(int)

clockPin:时钟脚,当dataPin有值时此引脚电平变化(int) bitOrder:输出位的顺序,最高位优先或最低位优先 value: 要移位输出的数据(byte) 返回 无 shiftIn() 描述 将一个数据的一个字节一位一位的移入。从最高有效位(最左边)或最低有效位(最右边)开始。对于每个位,先拉高时钟电平,再从数据传输线中读取一位,再将时钟线拉低。 注意:这是一个软件实现;Arduino提供了一个硬件实现的SPI库,它速度更快但只在特定脚有效。 语法 shiftIn(dataPin,clockPin,bitOrder) 参数 dataPin:输出每一位数据的引脚(int) clockPin:时钟脚,当dataPin有值时此引脚电平变化(int) bitOrder:输出位的顺序,最高位优先或最低位优先 返回 读取的值(byte) pulseIn() 描述 读取一个引脚的脉冲(HIGH或LOW)。例如,如果value是HIGH,pulseIn()会等待引脚变为HIGH,开始计时,再等待引脚变为LOW并停止计时。返回脉冲的长度,单位微秒。如果在指定的时间内无脉冲函数返回。 此函数的计时功能由经验决定,长时间的脉冲计时可能会出错。计时范围从10微秒至3分钟。(1秒=1000毫秒=1000000微秒) 语法 pulseIn(pin, value) pulseIn(pin, value, timeout) 参数 pin:你要进行脉冲计时的引脚号(int)。 value:要读取的脉冲类型,HIGH或LOW(int)。 timeout (可选):指定脉冲计数的等待时间,单位为微秒,默认值是1秒(unsigned long)返回 脉冲长度(微秒),如果等待超时返回0(unsigned long) 例子 int pin = 7; unsigned long duration;

林锋教你一步一步玩机器人(arduino)--制作篇(入门组件A)

林锋教你一步一步玩机器人(arduino)系列 ------制作篇 (入门组件上) ----- 张林锋/文 2012-5-28

目录 1 前言 (3) 2. 准备工作 (3) 2.1 元器件准备工作 (3) 2.2 实验板子准备 (4) 3 LED 实验 (5) 4 蜂鸣器实验 (7) 5.按键实验 (9) 6 8*8点阵实验 (11) 7 串口实验 (12) 8 模拟量输入(电压输入) (16) 9 直流电机控制(L298N驱动模块) (18) 10 PMW 脉冲宽度调试 (21) 11 控制舵机 (22) 12 超声波模块 (23) 13 巡线防跌模块 (26) 14 红外遥控 (27) 说明 写这系列文章主要目的是和读者一同分享下自己的学习过程,也希望能给读者带来一些帮助,文章部分内容剪裁网络文章,部分自己撰写。文章内容用于爱好者之间学习,不得用于商业目的。当然笔者才疏学浅,所书内容难免有缺点和漏洞,还请读者多多海涵,希望能和广大电子爱好者交流心得。 本人QQ:65198204 邮箱:65198024@https://www.sodocs.net/doc/f818680987.html, 博客:https://www.sodocs.net/doc/f818680987.html,/u/2775824690

1 前言 在淘宝买的Arduino 主板套件终于在26号到了,物流也太慢了,发了4天才到。套件包含:4轮小车,Arduino MEGA 2560 主板,配套的MEGA Sensor Shield V2.0扩展板,超声波模块,红外遥控模块,寻线防跌模块,舵机。套件是在27°寒语电子工作室(https://www.sodocs.net/doc/f818680987.html,/)买的,也就是科易互动科技的子站(https://www.sodocs.net/doc/f818680987.html,/)。 备注一下:套件性价比很高,也有配套的相关资料,不过个人觉得配套资料写的不够详细和全面,对于新手制作会带来很多不便。 在制作篇系列文章中,我会对入门组件的应用,以及4轮小车套件的制作,做出详细的制作流程,图文并茂。相信会对新手入门带来一定收获。 读者在做本文章实验时可以结合阅读我的相关入门知识文章,基本篇,硬件篇,软件篇。 制作篇分:入门上篇:主要介绍一些基础配件,以及小车所要用的器件。 4轮小车篇:主要介绍小车制作全过程。 入门下篇:主要介绍一些其他外围器件应用。比如:1602,12864液晶应用,时钟模块应用等。 4轮小车改造篇:加入自己的一些元素。 2. 准备工作 2.1 元器件准备工作 本篇实验器件所用到的元器件如下:(1)发光二极管(2)蜂鸣器(3)按键(4)可变电阻(5)8*8点阵(6)串口(7)直流电机(8)伺服电机(9)超声波模块(10)寻线防跌模块(11)红外遥控。 下面给我的全家福来个图,呵呵。

Arduino 入门到精通 例程1-Hello World!

Arduino 入门到精通例程1 1、Hello World! 首先先来练习一个不需要其他辅助元件,只需要一块Arduino 和一根下载线的简单实验,让我们的Arduino 说出“Hello World!”,这是一个让Arduino 和PC 机通信的实验,这也是一个入门试验,希望可以带领大家进入Arduino 的世界。 这个实验我们需要用到的实验硬件有: Arduino 控制器 USB 下载线 我们按照上面所讲的将Arduino 的驱动安装好后,我们打开Arduino 的软件,编写一段程序让Arduino 接受到我们发的指令就显示“Hello World!”字符串,当然您也可以让Arduino 不用接受任何指令就直接不断回显“Hello World!”,其实很简单,一条

if()语句就可以让你的Arduino 听从你的指令了,我们再借用一下Arduino 自带的数字13 口LED,让Arduino 接受到指令时LED 闪烁一下,再显示“Hello World!” 下面给大家一段参考程序。 int val;//定义变量val int ledpin=13;//定义数字接口13 void setup() { Serial.begin(9600);//设置波特率为9600,这里要跟软件设置相一致。当接入特定设备(如:蓝牙)时,我们也要跟其他设备的波特率达到一致。pinMode(ledpin,OUTPUT);//设置数字13 口为输出接口,Arduino 上我们用到的I/O 口都要进行类似这样的定义。 } void loop() { val=Serial.read();//读取PC 机发送给Arduino 的指令或字符,并将该指令或字符赋给val if(val=='R')//判断接收到的指令或字符是否是“R”。 {//如果接收到的是“R”字符 digitalWrite(ledpin,HIGH);//点亮数字13 口LED。 delay(500); digitalWrite(ledpin,LOW);//熄灭数字13 口LED delay(500);

Arduino编程参考手册簿中文版

Arduino编程参考手册 控制语句 (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)

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

Arduino入门到精通例程6-按键控制

Arduino 入门到精通例程 6 6按键控制LED实验 I/O 口的意思即为INPUT接口和OUTPUT接口,到目前为止我们设计的小灯 实验都还只是应用到Arduino的I/O 口的输出功能,这个实验我们来尝试一下使用Arduino的I/O 口的输入功能即为读取外接设备的输出值,我们用一个按键和一个LED小灯完成一个输入输出结合使用的实验,让大家能简单了解I/O的作用。按键开关大家都应该比较了解,属于开关量(数字量)元件,按下时为闭合(导通)状态。完成本实验要 用到的元件如下: 按键开关*1 红色M5 直插LED*1 220 Q电阻*1 10K Q电阻*1 面包板*1 面包板跳线*1 扎 我们将按键接到数字7接口,红色小灯接到数字11接口(Arduino控制器0-13数字I/O接口都可以用来接按键和小灯,但是尽量不选择0和1接口,0和1接口为接口功能复用,除I/O 口功能外也是串口通信接口,下载程序时属于与PC 机通信故应保持0和1接口悬空,所以为避免插拔线的麻烦尽量不选用0和1 接口),按下面的原理图连接好电路。下面开始编写程序,我们就让按键按下时小灯亮起,根据前面的学习相信这个程序很容易就能编写出来,相对于前面几个实验这个实验的程序中多加了一条条件判断语句,这里我们使用if 语句,Arduino的程序便写语句是基于C语言的,所以C的条件判断语句自然也适用于Arduino,像while、swich等等。这里根据个人喜好我们习惯于使用简单易于理解的if 语句给大家做演示例程。

我们分析电路可知当按键按下时,数字7 接口可读出为高电平,这时我们使数字11 口输出高电平可使小灯亮起,程序中我们判断数字7 口是否为低电平,要为低电平使数字11 口输出也为低电平小灯不亮,原理同上。 参考源程序: int ledpin=11;// 定义数字11 接口 int inpin=7;// 定义数字7 接口 int val;// 定义变量val void setup(){pi nM ode(ledpi n,0 UTPUT);// 定义小灯接口为输出接口 pinMode(inpin,INPUT);〃定义按键接口为输入接口}void loop(){val=digitalRead(inpin);〃读取数字7 口电平值赋给val if(val==LOW)〃检测按键是否按下,按键按下时小灯亮起 { digitalWrite(ledpin,LOW);} else { digitalWrite(ledp in ,HIGH);}}下载完程序我们本次的小灯配合按键的实验就完 成了,本实验的原理很简单,广泛被用于各种电路和电器中,实际生活中大家也不难在各种设备上发现,例如大家的手机当按下任一按键时背光灯就会亮起,这就是典型应用了,下面一个实验就是一个最简单的生活中应用实例--------------- 抢答器。

arduino语言

Arduino语言 Arduino语言是建立在C/C++基础上的,其实也就是基础的C语言,Arduino语言只不过把AVR单片机(微控制器)相关的一些参数设置都函数化,不用我们去了解他的底层,让我们不了解AVR单片机(微控制器)的朋友也能轻松上手。 在与Arduino DIYER接触的这段时间里,发现有些朋友对Arduino 语言还是比较难入手,那么这里我就简单的注释一下Arduino语言(本人也是半罐子水,有错的地方还请各位指正)。 基础C语言 关键字: if...else 必须紧接着一个问题表示式(expression),若这个表示式为真,紧连着表示式后的代码就会被执行。若这个表示式为假,则执行紧接着else 之后的代码. 只使用 if不搭配else是被允许的。 范例: if (val == 1) { digitalWrite(LED,HIGH); } for 用来明定一段区域代码重复指行的次数。 范例: for (int i = 0; i < 10; i++) { Serial.print("ciao"); } switch case if叙述是程序里的分叉路口,switch case 是更多选项的路口。Swith case 根据变量值让程序有更多的选择,比起一串冗长的if叙述,使用swith case可使程序代码看起来比较简洁。 范例 : switch (sensorValue) { case 23: digitalWrite(13,HIGH); break; case 46: digitalWrite(12,HIGH);

break; default: // 以上条件都不符合时,预设执行的动作 digitalWrite(12,LOW); digitalWrite(13,LOW); } while 当while之后的条件成立时,执行括号内的程序代码。 范例 : // 当sensor值小于512,闪烁LED灯 sensorValue = analogRead(1); while (sensorValue < 512) { digitalWrite(13,HIGH); delay(100); digitalWrite(13,HIGH); delay(100); sensorValue = analogRead(1); } do... while 和while 相似,不同的是while前的那段程序代码会先被执行一次,不管特定的条件式为真或为假。因此若有一段程序代码至少需要被执行一次,就可以使用do…while架构。 范例 : do { digitalWrite(13,HIGH); delay(100); digitalWrite(13,HIGH); delay(100); sensorValue = analogRead(1); } while (sensorValue < 512); break 让程序代码跳离循环,并继续执行这个循环之后的程序代码。此外,在break也用于分隔switch case 不同的叙述。 范例 : //当sensor值小于512,闪烁LED灯 do {

Arduino知识集锦

#Arduino 语法 setup() 初始化函数 loop() 循环体函数 控制语句类似于C //if if...else for switch case while do... while break continue return got o 扩展语法类似于C //;(分号) {}(花括号) //(单行注释) /* */(多行注释) #define #include 算数运算符类似于C //=(赋值运算符) +(加) -(减) *(乘) /(除) %(模) 比较运算符类似于C //==(等于) !=(不等于) <(小于) >(大于) <=(小于等于) >=(大于等于) 布尔运算符类似于C //&&(与) ||(或) !(非) 指针运算符类似于C //* 取消引用运算符 & 引用运算符 位运算符类似于C & (bitwise and) | (bitwise or) ^ (bitwise xor) ~ (bitwise not) << (bitshift left) >> (bit shift right) 复合运算符类似于C ++ (increment) -- (decrement) += (compound addition) -= (compound subtraction) *= (compound multiplication) /= (compound division) &= (compound bitwise and) |= (c ompound bitwise or) 常量 constants 预定义的常量 BOOL true false 引脚电压定义,HIGH和LOW【当读取(read)或写入(write)数字引脚时只有两个可能的值: HIGH 和 LOW 】 HIGH(参考引脚)的含义取决于引脚(pin)的设置,引脚定义为INPUT或OUTPUT时含义有所不同。当一个引脚通过pinMode被设置为INPUT,并通过digitalRead读取(read)时。如果当前引脚的电压大于等于3V,微控制器将会返回为HIGH。引脚也可以通过pinMode

Arduino参考手册中文版

Arduino编程参考手册 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)

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

arduino语法篇

Arduino语法 Arduino语法-----基础篇 Arduino语言是建立在C/C++基础上的,基本的功能都是基于C,一些复杂的或者功能强大的库都是基于C++,c和C++的语法,大家随便找本书都可以学会。其实Arduino就是把单片机的一些常用指令和函数进行功能化、函数化、模块化。这样就可以让大家不必去了解单片机或者硬件的细节。让没有基础的初学者也可以很快入门。 关键字: if if...else for switch case while do... while break continue return goto 语法符号: ; {} // /* */ 运算符: = + - * / % == != < > <= >= && || ! ++ -- += -= *= /= 数据类型: boolean 布尔类型 char 字符类型 byte 字节类型 int 整数类型 unsigned int无符号整型 long 长整型 unsigned long 无符号长 整型 float 实数类型 double string array void 常量: HIGH | LOW 表 示数字IO 口的电平, HIGH 表示高电平 (1),LOW 表示低 电平(0)。 INPUT | OUTPUT 表示数字 IO 口的方向,INPUT 表示辒入(高阻态), OUTPUT 表示辒出 (AVR能提供5V电 压40mA电流)。 true | false true 表示真(1),false表 示假(0)。 Arduino语法-----中级篇 setup() 当一个程序开始时,会调用setup()函数,用来初始化变量,引脚模式,库文件初始化等。setup函数只会在板子上电或者复位后调用一次。 loop()

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

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)

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

Arduino知识点

#define 常量名常量值 % 取模运算符 String abc / char abc[n] 定义字符串 pinMode(pin,mode); 用于引脚的初始化 mode包括INPUT/OUTPUT/INPUT_PULLUP Arduino 数模转换器有10位精度,可以将0-5V转换为0-1023,仅用于analogRead(pin) analogWrite(n) 写的并不是真正的模拟信号,而是占空比不同的方波:电压=占空比×5V,n∈(0,255),PWM(脉冲宽度调制)波 millis()/micros() 获取系统通电或复位后的运行时间,单位是毫秒/微秒 当引脚悬空时,其电压值处于不定状态,故要根据电压值进行其他操作时应避免悬空 tone(pin,frequency,duration) 占空比为定值50%,duration默认无穷大,若无duration,则应用noTone()来停止发声,注意:同一时间tone()仅能作用于一个引脚 pulseIn(pin,value,timeout) 返回脉冲宽度,单位为微秒,timeout超时时间,默认为1s 串口监视器中的停止符是在按下“发送”后系统自动发动的 外部中断 LOW/CHANGE/RISING/FALLING 低电平/变电平/上升沿/下降沿触发 attachInterrupt(中断编号,中断函数名(返回void),中断模式) 初始化中断引脚detachInterrupt(中断编号) 禁用外部中断 编写library #if ARDUINO >= 100 //版本兼容设置 #include"Arduino.h" #else #include"WProgram.h" #endif class XXX{ //声明类 private: public: } #ifndef XXX_H //条件编译命令,判断XXX_H是不是已经存在 #define XXX_H . . . #endif #include"XXX.H" //编写cpp文件,注意应加上版本兼容语句 XXX::XXX() 返回类型 XXX::other_func() func_name1 KEYWORD1 //关键字高亮显示 func_name2 KEYWORD2 硬件串口(UART)通信 两个设备TX与RX交叉连接,GND相连 在MEGA上USB口是和引脚0,1连在一块的 Serial.available() 返回串口接收缓冲区的字节数 Serial.begin(speed,config) 初始化串口,speed波特率,config数据、校验、停止位Serial.end() 释放串口通信引脚,使其作为普通引脚

Arduino 语言常用语句

结构 void setup() 初始化变量,管脚模式,调用库函数等 void loop() 连续执行函数内的语句 功能 数字 I/O pinMode(pin, mode) 数字IO口输入输出模式定义函数,pin表示为0~13, mode表示为INPUT或OUTPUT。 digitalWrite(pin, value) 数字IO口输出电平定义函数,pin表示为0~13,value表示为HIGH或LOW。比如定义HIGH 可以驱动LED。 int digitalRead(pin) 数字IO口读输入电平函数, pin表示为0~13,value表示为HIGH或LOW。比如可以读数字 传感器。 模拟 I/O int analogRead(pin) 模拟IO口读函数,pin表示为 0~5(Arduino Diecimila为0~5,Arduino nano为0~7)。 比如可以读模拟传感器(10位AD,0~5V表示为0~1023)。 analogWrite(pin, value) - PWM数字IO口PWM输 出函数,Arduino数字IO口标注了PWM的IO口可使用该函数,

pin表示3, 5, 6, 9, 10, 11,value表示为0~255。比如可用于电机PWM调速或音乐播放。 扩展 I/O shiftOut(dataPin, clockPin, bitOrder, value) SPI 外部IO扩展函数,通常使用带SPI接口的74HC595做8个IO 扩展,dataPin为数据口,clockPin为时钟口,bitOrder为数据传输方向(MSBFIRST高位在前,LSBFIRST低位在前),value 表示所要传送的数据(0~255),另外还需要一个IO口做 74HC595的使能控制。 unsigned long pulseIn(pin, value) 脉冲长度记录函数,返回时间参数(us),pin表示为0~13,value为HIGH或LOW。比如value为HIGH,那么当pin输入为高电平时,开始计时,当pin输入为低电平时,停止计时,然后返回该时间。时间函数 unsigned long millis() 返回时间函数(单位ms),该函数是指,当程序运行就开始计时并返回记录的参数,该参数溢出大概需要50天时间。 delay(ms) 延时函数(单位ms)。 delayMicroseconds(us) 延时函数(单位us)。 数学函数

Arduino常用函数

(1)pinMode(接口名称,OUTPUT或INPUT),将指定的接口定义为输入或输出接口,用在setup()函数里。 (2)digitalWrite(接口名称,HIGH(高)或LOW(低)),将数字输入输出接口的数值置高或置低。 (3)digitalRead(接口名称),读出数字接口的值,并将该值作为返回值。 (4)analogWrite(接口名称,数值),给一个模拟接口写入模拟值(PWM脉冲)。数值取值0-255。 (5)analogRead(接口名称),从指定的模拟接口读取数值,Arduino对该模拟值进行数字转换,这个方法将输入的0~5V电压值 转换为0~1023间的整数值,并将该整数值作为返回值。 (6)delay(时间),延时一段时间,以毫秒为单位,如1000为1秒。 (7)Serial.begin(波特率),设置串行每秒传输数据的速率(波特率)。在与计算机进行通讯时,可以使用下面这些值:300、1200、2400、4800、9600、14400、19200、28800、38400、57600或115200,一般9600、57600和115200比较常见。除此之外还可以使用其他需要的特定数值,如与0号或1号引脚通信就需要特殊的波特率。该函数用在setup()函数里。 Serial.available() 的意思是:返回串口缓冲区中当前剩余的字符个数。一般用这个函数来判断串口的缓冲区有无数据,当Serial.available()>0时,说明串口接收到了数据,可以读取;

Serial.read()指从串口的缓冲区取出并读取一个Byte的数据,比如有设备通过串口向Arduino发送数据了,我们就可以用Serial.read()来读取发送的数据。 while(Serial.available()>0) { data= Serial.read(); delay(2); } (8)Serial.read(),读取串行端口中持续输入的数据,并将读入的数据作为返回值。 (9)Serial.print(数据,数据的进制),从串行端口输出数据。Serial.print(数据)默认为十进制,相当于Serial.print(数据,十进制)。 (10)Serial.println(数据,数据的进制),从串行端口输出数据,有所不同的是输出数据后跟随一个回车和一个换行符。但是该函数所输出的值与Serial.print()一样。 常用函数 数字I/O类: pinMode(pin,mode)数字IO口输入输出模式定义函数,将接口定义为输入或输出接口。

Arduino 入门到精通 例程9-模拟值

Arduino 入门到精通例程9 模拟值读取实验 本个实验我们就来开始学习一下模拟I/O 接口的使用,Arduino 有模拟0—模拟5 共计6 个模拟接口,这6 个接口也可以算作为接口功能复用,除模拟接口功能以外,这6 个接口可作为数字接口使用,编号为数字14—数字19,简单了解以后,下面就来开始我们的实验。电位计是大家比较熟悉的典型的模拟值输出元件,本实验就用它来完成。 所需元器件有: 电位计*1 面包板*1 面包板跳线*1 扎 本实验我们将电位计的阻值转化为模拟值读取出来,然后显示到屏幕上,这也是我们以后完成自己所需的实验功能所必须掌握的实例应用。我们先要按照以下电路图连接实物图

我们使用的是模拟0 接口。 程序的编写也很简单,一个analogRead();语句就可以读出模拟口的值,Arduino 328是10 位的A/D 采集,所以读取的模拟值范围是0-1023,本个实验的程序里还有一个难点就是显示数值在屏幕这一问题,学习起来也是很简单的。首先我们要在voidsetup()里面设置波特率,显示数值属于Arduino 与PC 机通信,所以Arduino 的波特率应与PC 机软件设置的相同才能显示出正确的数值,否则将会显示乱码或是不显示,在Arduino 软件的监视窗口右下角有一个可以设置波特率的按钮,这里设置的波特率需要跟程序里void setup()里面设置波特率相同,程序设置波特率的语句为Serial.begin();括 号中为波特率的值。其次就是显示数值的语句了,Serial.print();或者Serial.println();都可以,不同的是后者显示完数值后自动回车,前者不是,更多的关于语句的讲解前面有 介绍这里就不再多说了。

Arduino实验

Arduino Due开发步骤 1. Arduino IDE下载 下载网址:https://www.sodocs.net/doc/f818680987.html,/en/Main/Software,下载界面截图如图2-1所示。 图2-1 Arduino IDE下载界面截图 选择Windows(ZIP file),下载安装程序。 2. Arduino IDE安装 指向图标,双击鼠标左键解压,如图2-2所示。 图2-2 arduino-1.5.5-windows.zip解压界面安装Arduino IDE到指定盘符。 3.Arduino IDE目录结构 Arduino IDE目录结构如图2-3所示。

图2-3 Arduino IDE目录结构 4. Arduino IDE下编程 指向图标,双击鼠标左键,显示Arduino IDE界面如图2-4所示。 图2-4 Arduino IDE界面 在编程窗口中显示两个函数,setup()和loop()。在Arduino中setup()函数首先执行且只执行一遍,一般用来编写初始化程序。在setup()执行完成后,开始执行loop(),loop()循环执行。 Arduino编程使用的是gcc编译器,c语言编程的第一个函数是main()函数,为什么看 不到?因为Arduino对其进行了2次封装,打开\arduino-1.5.5\hardware\arduino\avr\cores \main.cpp,可以看到如图2-5所示的一段封装程序。

图2-5 main()函数的封装 5. Arduino IDE下软硬件开发的基本步骤 1. 指向图标,双击鼠标左键,进入Arduino IDE界面,如图2-4所示; 2. 编写或导入程序; 3. 选择使用的Arduino开发板,如选择Arduino DUE开发板,选择方法如图2-6所示。 图2-6 选择Arduino DUE开发板 Arduino DUE有两个USB接口,Programming Port 接的是A TMEGA16U2芯片,实现USB口-----串口转换,Native USB Port接的是SAM3X8E片载的USB口,口的位置如图2-7

Arduino参考手册中文版

Arduino编程参考手册 控制语句 (4) if (4) if...else (4) for (4) switch case (4) while (5) do...while .. (5) break (5) continue (5) return (5) goto (5) 相关语法 (5) 分号 (5) 大括号 (5) 注释 (5) define (5) include (5) 算术运算符 (5) 赋值 (5) 加,减,乘,除 (5) 取模 (5) 比较运算符 (5) if(条件) and ==, !=, <, > (比较运算符) (5) 布尔运算符 (5) 指针运算符 (6) 位运算 (6) 位与 (6) 位或 (6) 位异或 (7) 位非 (7) 左移、右移 (7) 复合运算符 (8) 自加++ (8) 自减-- (8) 复合加+= (8) 复合减-= (8) 复合乘*= (8) 复合除/= (8) 复合与&= (8) 复合或|= (8) 变量 (8)

宏定义 (8) 整型常量 (8) 浮点数常量 (9) 数据类型 (9) void (9) boolean (10) char (10) unsigned char (10) byte (10) int (10) unsigned int (10) word (10) long (10) unsigned long (10) float (10) double (10) string (10) String(c++) (10) array (10) 数据类型转换 (10) char() (10) byte() (10) int() (10) word() (10) long() (10) float() (10) 变量作用域&修饰符 (10) 变量作用域 (10) static (静态变量) (11) volatile (易变变量) (11) const (不可改变变量) (11) 辅助工具 (11) sizeof() (sizeof运算符) (11) ASCII码表 (11) 基本函数 (12) 数字I/O (12) pinMode() (12) digitalWrite() (12) digitalRead() (13) 模拟I/O (13) analogReference() (13) analogRead() (14) analogWrite() (14)

相关主题