Arduino课程:02.数据类型及条件语句
今天制作一期人机互动的例子带给大家:用按钮控制LED。将开关作为延时开关来使用,按下开关后1秒钟,灯才会亮,灯亮5秒后才熄灭,这样大家就能依据这个例子,自己延伸出很多好玩的玩法出来。通过案例学习变量、运算符、条件语句三种语法知识。
2.2. 器材:开关:有按键式、滑动式、微动型,除了尺寸和外型不同,开关可分成:
常开(normal open,简称N.O):接点平常是不相连的,按下去之后才导通。常闭(normal close):接点平常是导通的开关也是传感器,微动开关(鼠标);极限开关(光驱的托盘);磁簧开关;水银开关。2.3. 电路:2.4 条件语句形式1
if (expression)
statement;
如果你有一个语句,你可以使用没有大括号{}的if语句。
if (expression) {
Block of statements;
}
if ... else语句语法
if (expression) { Block of statements; }
else { Block of statements; }
比较运算符参与运算后,会返回一个布尔值(true或false)。
-逻辑运算符处理器有D、B两个数位输出/输入接口,以及一个类比接口C。
DDRB = B00110100; //DDRB包含8、13接口,DDRD包含07接口
PORTB= B00100100;
利用按钮控制LED
/* 作用:当你按下按钮后1秒钟,灯会亮,然后维持5秒钟,熄灭 */ void setup () { pinMode(4,INPUT); //将4号数字口设置为输入状态,13号数字口设置为输出状态 pinMode(13,OUTPUT); }void loop(){ int n =digitalRead(4); //创建一个变量n,将4号数字口的状态采集出来赋值给他。 if (n==HIGH) //判断n是否为高电平,如果是执行下面的语句,不是则跳过。 { delay(1000); digitalWrite(13,HIGH); delay(5000); digitalWrite(13,LOW); }}
结果:
编译并上传代码之后,按着、放开几次微动开关试试,理论上,LED将在按着开关时被点亮,放开开关时熄灭。但实际上,LED可能在你放开开光之后,仍然点亮着,这是机械式开关的弹跳(bouncing)现象。
2.8 流水灯在arduino控制板上的3、4、5引脚上连接3个LED,通过程序依次控制3个LED灯的亮灭
const byte LED1 = 3; const byte LED2 = 4; const byte LED3 = 5; void setup() { // put your setup code here, to run once: pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); } void loop() { // put your main code here, to run repeatedly: digitalWrite(LED1,HIGH); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); delay(1000); digitalWrite(LED1,LOW); digitalWrite(LED2,HIGH); digitalWrite(LED3,LOW); delay(1000); digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,HIGH); delay(1000); }
2.9 用变量来管理代码
上例中连接在13引脚的led闪烁,如果把led接在10脚,代码需要修改2次,利用变量可简化代码的修改。
byte led = 13;void setup(){ pinMode(led, OUTPUT);}void loop(){ digitalWrite(led, HIGH);}
声明变量的语法:
数据类型 变量名
例如:
int age = 18; //预留16位的存储空间,并存入数字18;
int older = age +10; //先取出age的值,加上10之后,再赋值给older。
• 变量名称只能包含英文字母、数字和底线(_)。
• 第一个字符不能是数字。
• 变量的名称大小写有别,因此LED和led是两个不同的变量!
• 变量名称应该使用有意义的文字,如LED和pin,。让代码变得容易理解。
• 若要用两个单字来命名变量,可以用“驼峰式”记法,
• 避免用特殊意义的保留字来命名。
数据类型用于设置“数据容器”的格式和容量。在声明变量的同时,必须设置该变量所能保存的数据类型。
基础类型ATmega微处理器内部没有浮点运算处理单元,因此,执行浮点数值运算,不仅耗时且精确度不高,请避免在程序中执行大量的浮点数运算。附带一提,浮点数值可以用科学记号E或e表示,例如:
1.8E3 = 1800
在数字系统中,用四个二进制数来代表十进制的编码,又称为BCD码(Binary Coded Decimal, 二进编码十进数)
常量: 存放固定、不变量值的容器。
使用const指令(constant,常量)定义常量常量名称中的字母通常写成大写。变量设置后,就不能再更改其值。常量与“程序内存”ATmega微处理器的代码保存在内存,其内容无法在程序运行时间更改。而保存变量的容器,将在运行时间被建立在内容可随意更换的SRAM中常见的预设常量 INPUT、OUTPUT、HIGH、LOW、true、false常量定义补充说明若要让常量仅仅保存在程序内存,需要在常量声明代码中加入PROGMEM关键字。
2.13 内存类型说明计算机内存分为RAM和ROM两大类型
RAM:DRAM(Dynamic)→需搭配DRAM控制器持续刷新,存取慢,价格低廉SRAM(Static)→ 不需要持续刷新,存取速度快,价格高 #### #### ROM:mask ROM → 相当于DVD和CDPROM → Programmable,可编程EPROM → EP 代表Erasable and Programmalbe(可擦除编程)2.14. 补充阅读材料:Arduino 数据类型下表提供了你将在Arduino编程期间使用的所有数据类型。
Void Loop ( ) {// rest of the code}
Boolean 布尔值保存两个值之一,true或false。每个布尔变量占用一个字节的内存。
例子
boolean val = false ; // declaration of variable with type boolean and initialize it with falseboolean state = true ; // declaration of variable with type boolean and initialize it with false
Char
一种数据类型,占用一个字节的内存,存储一个字符值。字符文字用单引号写成:'A',对于多个字符,字符串使用双引号:"ABC"。
但是,字符是存储为数字。你可以在ASCII图表中查看特定编码。这意味着可以对使用ASCII值的字符进行算术运算。例如,'A'+1的值为66,因为大写字母A的ASCII值为65。
例子
Char chr_a = ‘a’ ;//declaration of variable with type char and initialize it with character aChar chr_c = 97 ;//declaration of variable with type char and initialize it with character 97 ASCII Char Table
unsigned char
unsigned char是一种无符号数据类型,占用一个字节的内存。unsigned char数据类型编码数字为0到255。
例子
Unsigned Char chr_y = 121 ; // declaration of variable with type Unsigned char and initialize it with character y
byte 一个字节存储一个8位无符号数,从0到255。
例子
byte m = 25 ;//declaration of variable with type byte and initialize it with 25
int
整数(int)是数字存储的主要数据类型。int存储16位(2字节)值。这产生-32768至32767的范围(最小值为-215 ,最大值为(215 )-1)。
int的大小因板而异。例如,在Arduino Due中,int存储32位(4字节)值。这产生-2147483648至2147483647的范围(最小值-231 和最大值(231 )-1)。
例子
int counter = 32 ;// declaration of variable with type int and initialize it with 32
Unsigned int
unsigned int(无符号整数)与int相同,存储2字节。然而,它们只存储正值,产生0到65535(216)-1的有效范围。Due存储4字节(32位)值,范围从0到4294967295(232-1)。
例子
Unsigned int counter = 60 ; // declaration of variable with type unsigned int and initialize it with 60
Word
在Uno和其他基于ATMEGA的板上,一个word存储一个16位无符号数。在Due和Zero上,它存储一个32位无符号数。
例子
word w = 1000 ;//declaration of variable with type word and initialize it with 1000
Long
Long变量是用于数字存储的扩展大小变量,存储32位(4字节),从-2147483648到2147483647。
例子
Long velocity = 102346 ;//declaration of variable with type Long and initialize it with 102346
unsigned long
unsigned long变量是用于数字存储的扩展大小变量,并存储32位(4字节)。与标准的long不同,unsigned long不会存储负数,它们的范围为0到4294967295(232-1)。
例子
Unsigned Long velocity = 101006 ;// declaration of variable with type Unsigned Long and initialize it with 101006
short
short是16位数据类型。在所有Arduinos(基于ATMega和ARM)上,一个short存储一个16位(2字节)值。这产生-32768至32767的范围(最小值为-215,最大值为(215)-1)。
例子
short val = 13 ;//declaration of variable with type short and initialize it with 13
float
浮点数的数据类型是具有小数点的数字。浮点数通常用于近似模拟值和连续值,因为它们的分辨率高于整数。
浮点数可以大到3.4028235E+38,也可以低到-3.4028235E+38。它们被存储为32位(4字节)信息。
例子
float num = 1.352;//declaration of variable with type float and initialize it with 1.352
double
在Uno和其他基于ATMEGA的板上,双精度浮点数占用四个字节。也就是说,double实现与float完全相同,精度没有增益。在Arduino Due上,double具有8字节(64位)精度。
例子
double num = 45.352 ;// declaration of variable with type double and initialize it with 45.352
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。