这里给你提供一个Arduino语法函数的操作指令讲解。

详细内容请参考:http://arduino.cc/en/Reference/HomePage

程序结构

一个Arduino程序分为两部分:

void setup()

在这个函数里防止初始化Arduino的程序,使主循环程序在开始之前设置好相关参数。

void loop()

这是Arduino的主函数。这套程序会一直重复执行,直到电源被断开。

特殊标点及符号

Arduino语言运用了一些符号来描绘程序代码,例如,注释和程序部分。

;(分号)

Arduino每条指令(代码行)都以分号结束。这样的语法可以让你自由安排车刚需代码,甚至可以将两条指令放在同一行,只要你用一个分号把它们隔开就行了(然而,这样做会让你的程序代码更难以阅读)。

例如:

delay(100);

{}(大括号)

用来注释程序代码的分区。例如,当你为loop()函数编写代码时,必须咱编码的前后用大括号括起来。

例如:

void loop(){

serial.println(“TSRobot”);

}

注释

这是Arduino程序编译中忽略的一部分,但是它有助于提醒你自己或别人这小段程序代码的功能。

在Arduino里有两种形式的注释。

//单行注释:这行会被忽略掉

/*多行注释:

你可以

在这里

写出

一整首诗

*/

常量

Arduino语言有一些特殊意义的关键字。

例如:

HIGH和LOW用来表示你打开或关闭(高电平或者低电平);

Arduino的一个引脚(pin),INPUT和OUTPUT用来设定某个特定引脚是输入接口还是输出接口;

INPUT_PULLUP用来设定某个引脚为输入,并且被拉高;

True和False,像它们的字面意思一样;表示一个条件或一个运算是真还是假。

变量

变量保存在Arduino内存中,它可以用来保存数据,你可以应用这个变量的数据来计算或者将这个数据应用到程序中。正如字面意思,变量在程序中是可以随便更改的。

因为Arduino是一个非常简单的微处理器,所以当你声明一个变量时,还必须指定它的类型。这意味着告诉处理器为你所要存储的数据留出多大的空间。

下面是一些常见的数据类型:

Boolean(布尔)

只能是真或者假两种值。

char(字符)

保存一个字符,如“A”。和任何计算机一样,Arduino将字符存储为一个数字,虽然你拷打的是文字。当字符用数字里存储时,数值范围是-128到127。

注意:在计算机系统里主要有两组有效字符:ASCII和UNICODE。ASCII有127个可用字符,主要用于串行终端之间文本的传输,相应的计算机系统的例子如大型机、小型机之间传送文本。UNICODE在现代计算机操作系统中有大量的实用字符,可以代表多种语言。在传输短字节语言方面,ASCII仍很实用,如只用拉丁文(意大利语、英语)、阿拉伯数字、常见的打印机符号、标点符号等情况。

byte(字节)

存储0-255的数字。像char一样,byte只能用一个字节(8位)的存储空间。

int(整型)

用2个字节表示一个内存空间,从-32768到32767之间的整数,这是用于Arduino的最普遍的数据类型之一。

unsigned int(无符号整型)

像int一样,也用2个字节的空间,但是无符号的前缀意味着它不能存储负数,它的范围是0-65535。

long(长整型)

它是int的两倍大小。能够存储-2147483648到2417483647之间的数字。

unsigned long(无符号长整型)

无符号长整型的范围是0到4294967295

float(浮点型)

它的存储空间很大,能够存储浮点值,你能用它存储带小数的数字,每个浮点型会用掉四个字节,所以要谨慎使用。

double(双精度浮点型)

双精度浮点数最大值为1.797 693 134 862 315 7乘以10的308次方。哇,非常大!

string(字符串)

用一组ASCII字符来存储文本信息(你可以用字符串通过串口发送一条信息、或者在LCD显示屏上展示)。字符串的每一个字符会占用一个字节的存储空间,加上一个零字符。表示字符串的结束。

用两种表达方:

char string1[] = “Arduino”; //7个字符 + 1个零字符

char string2[] = “Arduino”; //同上

array(数组)

数组就是通过索引存取的变量列表,它们用来建立数值的表格。例如,如果你想存储不同亮度的LED值,你固然可以创立6个变量,分别为light01、light02等,但更好的方法是用一个像int light[6] = {0,20,50,75,100,150};这样的数组。

array这个词实际上不用在变量声明:数组用符号[]和{}来表示即可。

控制指令

Arduino利用了一些关键字控制了程序的执行流程。

If…else

If后面的括号里必须要有一个表示判断的表达式。如果表达式为真,则继续执行下面的语句;如果是假,则下面的代码将被跳过,执行else下的指令代码。你也可以只用if而不搭配else。

例如:

If(val == 1){

digtalWrite(LED,HIGH);

}

for

用来指明一段代码重复的次数。

例如:

for(int I = 0; i< 10; i++){

Serial.print(“TSRobot”);

}

switch case

如果说if就像程序的岔路口,那么switch case就像一个多选择环形路口。switch case根据变量的数值让程序有了更多的选择,比起一长串的if函数,switch case可以让程序看上去更为简洁。

例如:

switch (sensorValue){

case 23:

digitalWrite(13,HIGH);

break;

case 46:

digitalWrite(12,HIGH);

break;

default: //以上条件都不满足时执行预设指令

digitalWrite(13,LOW);

digitalWrite(12,LOW);

}

While

当whileh后的条件成立时,执行大括号内的程序代码。

例如:

// 当sensor值小于512时,让LED闪烁

sensorValue = analogRead(1);

while(sensorValue < 512){

digitalWrite(13,HIGH);

delay(100);

digitalWrite(13,LOW);

delay(100);

sensorValue = aalogRead(1);

}

do…while

与while相似,但不同之处在于:while函数是先判断while后的表达式;而do…while是先执行do后的程度段,再对while后的表达式进行判断。因此do…while的主程序段至少会被执行一次。

例如:

do {

digtialWrite(13,HIGH);

delay(100);

digtialWrite(13,LOW);

delay(100);

sensorVaule = analogRead(1);

} while(sensorVaule < 512);

break

这个语句可以让程序跳出一个循环,然后继续执行循环之后的程序代码段。也用于分隔switch case语句的不同部分。

例如:

// 当sensor值小于512时,让LED闪烁。

do {

// 当按键按下时跳出循环

If(digitalRead(7) == HIGH)

Break;

digtialWrite(13,HIGH);

delay(100);

digtialWrite(13,LOW);

delay(100);

sensorVaule = analogRead(1);

} while(sensorVaule < 512);

continue

在循环程序中使用,能让你跳过程序里的某些部分,然后再次判断表达式。

例如:

for( light = 0; light <255; light++){

// 忽略介于140至200之间的数值

If((x > 140) && (x < 200))

continue;

analogWrite(PWMpin, light);

delay(10);

}

return

用return在一个函数的结尾返回一个数值。例如,现在有一个函数叫做computeTemperature(),你想要传回储存在目前变量中的温度值,你可以这样写程序:

int computeTemperature(){

int temperature = 0;

temperature = (analogRead(0) + 45) / 100;

return temperature;

}

运算符

你可以通过特殊语法让Arduino去做一些复杂的运算。+和–就是我们在学校学习的加减法,乘法用*表示,除法用/表示。

例如:

a = 2 + 2;

light = ((12 * sensorValue) – 5 ) / 2;

remainder = 3 % 2; // 返回1,因为3除以2余1

比较运算符

当你在运用if,while,for,函数时,可以用到下列比较运算符:

==等于

!=不等于

<小于

>大于

<=小于等于

>=大于等于

布尔运算符

当你要结合多个判断条件时,可以用到布尔运算符。

例如,你要检测一个传感器的返回值是否是5至10之间的数,你可以这样写程序:

if((sensor >= 5) && (sensor <= 10))

布尔运算符有三种:&&逻辑与、||逻辑或、!逻辑非

复合运算符

这些运算符常用唉类似于“递增”这些常见的函数中,让程序代码看上去更整洁。

例如,让变量自身加1可以写成:

value = value + 1;

但也可以使用复合运算符把上面的式子简化成:

value++;

递增和递减(++和 —)

当对一个数值进行递增或递减时,要注意一点,那就是i++和++i之间的不同。i++是将i的值加1使i的值等于i+1;而当使用++i时,i在第一次执行程序时是i,直到第二次执行程序时才会被加1。这个原理同样适用于—。

+=,-=,*=及/=

这些运算符可以使程序运算式更加精简,下面是两个等价式:

a = a + 5;

a += 5;

输入输出函数

Arduino有一些处理输入输出功能的函数,在书中的一些例程里我们已经用到了一些。

pinMode(pin, mode)

将一个引脚配置成输入或者输出。

例如:

pinMode(7, INPUT); // 将引脚7定义为输入接口

digitalWrite(pin, value)

打开一个数值引脚并将其赋值高电平或者低电平,此引脚必须是前面定义过的输入或者输出模式,否则digitalWrite不生效。

例如:

digitalWrite(8, HIGH); // 给8号引脚高电平

int digitalRead(pin)

读取一个输入状态的引脚值。当引脚处于高电平状态时返回HIGH,否则返回LOW。

例如:

val = digitalRead(7); // 读取7号引脚的值并赋值给val

int analogRead(pin)

读取模拟输入引脚的值,并将其表示为0至1023之间的数值,对应0至5V的电压。

例如:

val = analogRead(0); // 读取模拟接口0的值,并赋值给val

analogWrite(pin, value)

改变该引脚的PWM输出数值,引脚(pin)可以是3、5、6、9、10、11。PWM值的改变范围是0至255,对应的电压输出值是0至5V。

例如:

analogWrite(9, 128); // 将9号引脚的LED点亮至50%亮度

shiftOut(dataPin, clockPin, bitOrder, value)

发送数据到移位寄存器,用来扩大数字输出范围,此函数使用时有一个引脚作为数据输出,另一个引脚用来表示时钟,bitOrder用来表示字节的格式(LSBFIRST是最低有效位,MSBFIRST是最高有效位),value则要输出字节的值。

例如:

shiftOut(dataPin, clockPin, LSBFIRST, 255);

unsigned long pulseIn(pin, value)

读取一个引脚的脉冲持续时间,例如使用红外传感器或者加速度计时。它们都是利用单位时间不同的脉冲来获得状态值的传感器。

例如:

time = pulseIn(7,HIGH); // 读取7号引脚持续为高电平的时间

时间函数

计算与控制芯片执行程序的时间。

unsigned long millis()

检测程序执行开始到当前的时间。

例如:

duration = millis()-lastTime; //表示从lastTime到当前的时间

delay(ms)

延迟一定毫秒的时间。

例如:

delay(500); // 延迟500ms

delayMicroseconds(us)

延迟一定微秒的时间。

例如:

delayMicroseconds(1000); //延时1000us

数学函数

Arduino也有很多自带的数学函数,包括三角函数等。

min(x, y)

x和y中返回最小值。

例如:

val = min(10, 20); // val 的值为10

max(x, y)

x和y中返回最大值。

例如:

val = max(10, 20); // val 的值为20

abs(x)

传回x的绝对值,正数的绝对值是其本身,负数的绝对值是其相反的数。例如:

val = abs(-5); // val 的值是5

constrain(x, a, b)

判断x与a和b的关系,若x小于a,则传回a;若x介于a与b之间,则传回x本身;若大于b,则传回b。

例如:

val = constrain(analogRead(0), 0, 255); // 忽略大于255的数

map(value, fromLow, fromHigh, toLow, toHigh)

将value的值按照fromLow与fromHigh的范围,对等转换至toLow与toHigh的范围。通常应用于读取相似信号,并将其转换到程序中所需的范围。

例如:

val = map(analogRead(0), 0,1023, 100, 200);

//将模拟接口0读取的0~1023的值转换成0~100的值

double pow(base, exponent)

传回一个数(base)的指数(exponent)的值

例如:

double x = pow(y, 32); //使x是y的32次方

double sqrt(x)

去x的平方根。

例如:

double a = sqrt(1138); // 1138的平方根是33.73425674438

double sin(rad)

传回某个角度(用弧度单位)的正弦值。

例如:

double sine = sin(2); // 2弧度的正弦值近似为0.90929737091

double cos(rad)

传回某个角度(用弧度单位)的余弦值。

例如:

double cosine = cos(2); // 2弧度的余弦值近似为 -0.41614685058

double tan(rad)

传回某个角度(用弧度单位)的正切值。

例如:

double tangent = tan(2); // 2弧度的正切值近似为 -2.18503975868

随机数函数

如果你需要随机数,你可以利用Arduino的随机数函数来产生随机数。

randomSeed(seed)

复位Arduino的随机数发生器,会产生一系列的随机数,虽然这些数字貌似是随机产生,但是它们的顺序其实还是可以被预测的。所以如果我们需要真正的一组随机数,我们就要重新设定随机数的种子。若我们没有连接一个模拟值引脚,它可以从周围环境(无线电波、宇宙射线、手机或者荧光灯的电磁干扰等)获得随机噪声。

例如:

randomSeed(analogRead(5)); // 利用5号引脚的噪声

long random(max)

long random(min, max)

传回指定区间的长整型随机数。如果没有规定最小值,则默认最小值为0。

例如:

long randnum = random(o, 100); //传回一个介于0~100之间的数

long randnum = random(11); //传回一个介于0~10之间的数

串行通信

前面实验课我们介绍过,可以通过USB与Arduino进行串口通信。下面我们介绍一些相关串口通信的函数。

Serial.begin(speed)

为与Arduino串口通信做准备,我们可以通过Arduino的上位机软件检测返回值,这里设置通信的波特率,我们通常使用9600,我们也可以使用其他的通信波特率,但最大值是115200.

例如:

Serial.begin(9600);

Serial.print(data)

Serial.print(data, encoding)

将数据通过串口传回,encoding指明数据传回类型,默认为纯文本格式。

例如:

Serial.print(75); //显示75

Serial.print(75, DEC); //同上

Serial.print(75, HEX); //“4B”(75的十六进制表达)

Serial.print(75,OCT); //“113”(75的八进制表达)

Serial.print(75, BIN); //“1001011”(75的二进制表达)

Serial.print(75, BYTE); //“K”(K的ASCII码值是75)

Serial.println(data)

Serial.println(data, encoding)

与Serial.print(data)相同,只是在传回数据的末尾多加一个换行符(\r\n)。换行符的意义就等于你在输入一些文字后敲入的回车键。

例如:

Serial.println(75); //显示“75\r\n”

Serial.println(75, DEC); //同上

Serial.println(75, HEX); //“4B\r\n”

Serial.println(75,OCT); //“113\r\n”

Serial.println(75, BIN); //“1001011\r\n”

Serial.println(75, BYTE); //“K\r\n”

int Serial.available()

传回一个数值,告诉上位机有多少字节没有被read()函数读取,若Serial.available()返回值是0,则代表串行数据都已被read()读取。

例如:

int count = Serial.available();

int Serial.read()

读取一个字节的串行数据

例如:

int data = Serial.read();

Serial.flush()

因为数据传输的速度要大于Arduino程序处理速度,所以Arduino会将数据先存放在缓存区中。如果有需要,我们可以利用Serial.flush()函数来清空缓存区,以确保缓存区的数据是最新的。

例如:

Serial.flush();

语法的学习很重要,它是我们与Arduino主板交流互动的桥梁,当然你也不用一口气全学会,可以先学习基础的,以后的实验中再累积!

转载请注明:More » Arduino语法参考

Arduino 基本语法相关推荐

  1. Arduino基础语法

    前言:只要有点C语言基础,学Arduino语法就不难,只是有点常量和数据类型以及函数跟C语言不大一样,下面,我将向大家介绍一下Arduino的基础语法.我用的是Arduino UNO的板子,Ardui ...

  2. Arduino 函数语法详解(含示例)三

    一.数字 I/O 1.1 pinMode() 1.2 digitalWrite() 1.3 digitalRead() 二.模拟 I/O 2.1 analogReference() 2.2 analo ...

  3. Arduino基本语法

    总结一下常用的arduino语法 详细内容请参考:http://arduino.cc/en/Reference/HomePage 首先Arduino机构由两个部分组成: void setup() vo ...

  4. Arduino 变量语法详解(含示例)一

    一.常量 1.1 HIGH | LOW(引脚电压定义) 1.2 INPUT | OUTPUT(数字引脚(Digital pins)定义) 1.3 true | false(逻辑层定义) 1.4 int ...

  5. arduino代码_纯纯小白开发arduino--我的调试经验

    arduino 是什么我就不做介绍了.这里的小白并不是说我没有嵌入式开发经验而是说从来没有实际开发过arduino.虽然它在世界范围内都很流行,可是不知为何国内专业做嵌入式开发的人对它大多都嗤之以鼻. ...

  6. danpianji与ros通信_ROS和Arduino通讯新模式——StandardFirmata

    我们在ROS使用的过程当中,上位机ROS系统和单片机之间的通讯控制是在所难免的.目前大多数是基于ROS-Serial,又或者是ROS和STM32的库,而且目前大部分ROS机器人的驱动板均为STM32系 ...

  7. 【Arduino实验02 LED流水灯】

    目录 一.实验目的 二.实验设备与环境 三.实验重点 四.实验难点 五.实验内容 5.1实验任务 5.2实验原理 5.3实验内容 5.4实验结果 5.5思考题 一.实验目的 1熟练掌握Arduino实 ...

  8. 单片机原理及应用——Arduino四驱四路循迹小车

    摸摸鱼,把大二的课堂作业总结一下发出来,很基础的小白代码,希望能给入门的同学一点参考. 由于实物卖掉啦,只能尽量用文字配上接线图等,写详细一点. 一.元器件清单 Arduino UNO R3开发板(带 ...

  9. ESP32+Arduino+VS code开发环境搭建+BLINK

    关于ESP32开发工具 之前一直都有在看关于这个芯片的内容,这个国产的芯片有两种开发方式,一个是内置的ESP-IDF,一个是Arduino开发方式.之前一直没搞懂这两者的区别. 后来发现其实说白了ES ...

最新文章

  1. Spartan-6的存储元件、多路复用器、快速先行进位逻辑、算术逻辑
  2. 网站的线下活动如何组织
  3. CTFshow php特性 web127
  4. dll可以在linux下使用吗_Linux下安装和使用杀毒软件AntiVir
  5. vue-day02-vue常用特性
  6. 图解 Scala 基本语法 V2018.12.17
  7. CentOS6编译装载nbd模块
  8. Kubernetes详解(二十五)——Deployment控制器扩容
  9. 多个JVM之间,能否共用同样的类?
  10. 【pytorch图像分类】ResNet网络结构
  11. MFC 鼠标光标资源 及 更换
  12. 工具1:DNS隧道检测工具BotDAD
  13. 通知 | 2021 中国高校计算机大赛 —— 微信大数据挑战赛
  14. 适用于 Windows 10/11 电脑 的 5 大好用的离线录屏软件
  15. MAC OS下免费下载YouTube
  16. ISTQB- TTA大纲
  17. shell 的一个小 脚本模板实现hosts添加
  18. Intel系列CPU架构的发展史
  19. 跟我学Android之十一 列表和适配器
  20. coreldraw2019天气滤镜_coreldraw2019为什么值得下载

热门文章

  1. Java历史及其介绍
  2. 苏州初中生计算机学校有哪些,盘点苏州有哪些优秀寄宿中学
  3. nginx expires 缓存
  4. ImportError: /home/whut/anaconda2/bin/../lib/libgomp.so.1: version `GOMP_4.0' not found (required by
  5. 李默芳:女性管理者成功要素与中国移动公司情况分析
  6. MacOS开发环境配置
  7. 安全运维 | 通过拦截页面辨别WAF产品!
  8. 20221213英语学习
  9. Sparse 3D convolution
  10. rocksdb原理_看图了解RocksDB