Arduino函数变量大全(长篇)
Posted 自信且爱笑‘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino函数变量大全(长篇)相关的知识,希望对你有一定的参考价值。
原文转载过来的布局太难受了,所以直接粘贴过来改一下。原文链接
别尝试了,翻不到文末,直接看目录就行!
Arduino函数、变量大全
- 一、结构部分
- 二、变量部分
- 三、函数部分
- 一、结构部分
- 一、(一)程序结构
- 1.1 setup()
- 1.2 loop()
- 一、(二)语句
- 2.1 if
- 2.2 if...else
- 2.3 for
- 2.4 switch case
- 2.5 while
- 2.6 do...while
- 2.7 break
- 2.8 continue
- 2.9 return
- 2.10 goto
- 一、(三)扩展语法
- 3.1 ;(分号)
- 3.2 {}(花括号也称大括号)
- 3.3 //(单行注释)
- 3.4 /* */(多行注释)
- 3.5 #define
- 3.6 #include
- 一、(四)算数运算符
- 4.1 =(赋值运算符)
- 4.2 +(加)
- 4.3 -(减)
- 4.4 *(乘)
- 4.5 /(除)
- 4.6 %(取模)
- 一、(五)比较运算符
- 5.1 ==(等于)比较是否等于
- 5.2 !=(不等于)
- 5.3 <(小于)
- 5.4 >(大于)
- 5.5 <=(小于等于)
- 5.6 >=(大于等于)
- 一、(六)布尔运算符
- 6.1 &&(与)
- 6.2 ||(或)
- 6.3 !(非)
- 一、(七)指针运算符
- 7.1 * 取消引用运算符
- 7.2 & 引用运算符
- 一、(八)位运算符
- 8.1 & (按位与)
- 8.2 | (按位或)
- 8.3 ^ (按位异或)
- 8.4 ~ (按位非)
- 8.5 <<(左移位运算符)
- 8.6 >> (右移位运算符)
- 一、(九)复合运算符
- 9.1 ++ (递增)
- 9.2 -- (递减)
- 9.3 += (复合加)
- 9.4 -= (复合减)
- 9.5 *= (复合乘)
- 9.6 /= (复合除)
- 9.7 &= (复合运算按位与)
- 9.8 |= (复合运算按位或)
- 二、变量部分
- 二、(一)常量
- 1.1 HIGH和LOW(引脚电压定义)
- 1.2 INPUT和OUTPUT(数字引脚(Digital pins)定义)数字引脚(Digital pins)定义,INPUT和OUTPUT
- 1.3 true 和 false(逻辑层定义)
- 1.4 integer constants(整数常量)
- 1.5 floating point constants(浮点常量)
- 二、(二)数据类型
- 2.1 void
- 2.2 boolean (布尔)
- 2.3 char(字符或字符串)
- 2.4 unsigned char(无符号数据类型)
- 2.5 byte(无符号数)
- 2.6 int(整型)
- 2.7 unsigned int(无符号整型)
- 2.8 word
- 2.9 long(长整数型)
- 2.10 unsigned long(无符号长整数型)
- 2.11 float(浮点型数)
- 2.12 double(双精度浮点数)
- 2.13 string(char array/字符串)
- 2.14 String object(String类)
- 2.15 array (数组)
- 二、(三)数据类型转换
- 3.1 char()
- 3.2 byte()
- 3.3 int()
- 3.4 word()
- 3.5 long()
- 3.6 float()
- 二、(四)变量作用域 & 修饰符换
- 4.1 variable scope(变量的作用域)
- 4.2 static(静态变量)
- 4.3 volatile
- 4.4 const
- 二、(五)辅助工具
- 5.1 sizeof()
- 三、函数部分
- 三、(一)数字 I/O
- 1.1 pinMode()
- 1.2 digitalWrite()
- 1.3 digitalRead()
- 三、(二)模拟 I/O
- 2.1 analogReference()
- 2.2 analogRead()
- 2.3 analogWrite() PWM
- 三、(三)高级 I/O
- 3.1 tone()
- 3.2 noTone()
- 3.3 shiftOut()
- 3.4 shiftIn()
- 3.5 pulseIn()
- 三、(四)时间
- 4.1 millis()
- 4.2 micros()
- 4.3 delay()
- 4.4 delayMicroseconds()
- 三、(五)数学运算
- 5.1 min()
- 5.2 max()
- 5.3 abs()
- 5.4 constrain()
- 5.5 map()
- 5.6 pow()
- 5.7 sqrt()
- 三、(六)三角函数
- 6.1 sin()
- 6.2 cos()
- 6.3 tan()
- 三、(七)随机数
- 7.1 randomSeed()
- 7.2 random()
- 三、(八)位操作
- 8.1 lowByte()
- 8.2 highByte()
- 8.3 bitRead()
- 8.4 bitWrite()
- 8.5 bitSet()
- 8.6 bitClear()
- 8.7 bit()
- 三、(九)设置中断函数
- 9.1 attachInterrupt()
- 9.2 detachInterrupt()
- 三、(十)开关中断
- 10.1 interrupts()(中断)
- 10.2 noInterrupts()(禁止中断)
- 三、(十一)通讯
- 11.1 Serial
- 11.1.1 if (Serial)
- 11.1.2 Serial.available()
- 11.1.3 Serial.begin() 初始化串口波特率
- 11.1.4 Serial.end()
- 11.1.5 Serial.find()
- 11.1.6 Serial.findUntil()
- 11.1.7 Serial.flush()
- 11.1.8 Serial.parseFloat()
- 11.1.9 Serial.parseInt()
- 11.1.10 Serial.peek()
- 11.1.11 Serial.print() 从串口打印输出数据
- 11.1.12 Serial.println()
- 11.1.13 Serial.read()
- 11.1.14 Serial.readBytes()
- 11.1.15 Serial.readBytesUntil()
- 11.1.16 Serial.setTimeout()
- 11.1.17 Serial.write()
- 11.1.18 Serial.SerialEvent()
- 11.2 Stream
- 三、(十二)USB(仅适用于 Leonardo 和 Due)
- 12.1 Mouse(键盘)
- 12.2 Keyboard(鼠标)
------------简述--------------
一、结构部分
(一)程序结构
setup() | loop() |
---|
(二)语句
if | if…else | for | switch case | while |
---|---|---|---|---|
do… while | break | continue | return | goto |
(三)拓展语法
;(分号) | {}(花括号) | //(单行注释) |
---|---|---|
/* */(多行注释) | #define | #include |
(四)算数运算符
=(赋值运算符) | +(加) | -(减) | *(乘) | /(除) | %(模) |
---|
(五)比较运算符
==(等于 ) | !=(不等于) | <(小于) |
---|---|---|
>(大于) | <=(小于等于) | >=(大于等于) |
(六)布尔运算符
&&(与) | ||(或) | !(非) |
---|
(七)指针运算符
* 取消引用运算符 | & 引用运算符 |
---|
(八)位运算符
& (按位与) | | (按位或) | ^ (按位异或) |
---|---|---|
~ (按位取反) | << (位左移) | >> (位右移) |
(九)复合运算符
++ (自增) | – (自减) | += (加赋值) | -=(减赋值) |
---|---|---|---|
*=(乘赋值) | /=(除赋值) | &=(位与赋值) | |=(位或赋值) |
二、变量部分
(一)常亮
HIGH或LOW(引脚电压定义) | INPUT或OUTPUT(数字引脚(Digita或pins)定义) | true 或false(逻辑层定义) |
---|---|---|
integer constants(整数常量) | floating point constants(浮点常量) |
(二)数据类型
void(空) | char(字符型) | unsigned char(无符号字符型) | word(字) |
---|---|---|---|
boolean(布尔) | byte(字节) | unsigned int(无符号整型) | long(长整数型) |
float(浮点型数) | double(双精度浮点数) | string(char array/字符串) | String object(String类) |
int(整型) | unsigned long(无符号长整数型) | array (数组) |
(三)数据类型转换
char() | byte() | int() | word() | long() | float() |
---|
(四)变量作用域 & 修饰符
variable scope(变量的作用域) | static(静态变量) | volatile | const |
---|
(五)辅助工具
sizeof()
三、函数部分
(一)数字 I/O
pinMode() | digitalWrite() | digitalRead() |
---|
(二)模拟 I/O
analogReference() | analogRead() | analogWrite() |
---|
(三)高级 I/O
tone() | noTone() | shiftOut() | shiftIn() | pulseIn() |
---|
(四)时间
millis() | micros() | delay() | delayMicroseconds() |
---|
(五)数学运算
min() | max() | abs() | constrain() | map() | pow() |
---|---|---|---|---|---|
sqrt() | ceil() | exp() | fabs() | floor() | fma() |
fmax() | fmin() | fmod() | ldexp() | log() | log10() |
round() | signbit() | sq() | square() | trunc() |
(六)三角函数
sin() | cos() | tan() | acos() | asin() |
---|---|---|---|---|
atan() | atan2() | cosh() | degrees() | hypot() |
radians() | sinh() | tanh() |
(七)随机数
randomSeed() | random() |
---|
(八)位操作
lowByte() | highByte() | bitRead() | bitWrite() |
---|---|---|---|
bitSet() | bitClear() | bit() |
(九)设置中断函数
attachInterrupt() | detachInterrupt() |
---|
(十)开关中断
interrupts()(中断) | noInterrupts()(禁止中断) |
---|
(十一)通讯
Serial | if (Serial) | Serial.available() | Serial.begin() |
---|---|---|---|
Serial.find() | Serial.findUntil() | Serial.flush() | Serial.parseFloat() |
Serial.end() | Serial.parseInt() | Serial.peek() | Serial.print() |
Serial.read() | Serial.readBytes() | Serial.readBytesUntil() | Serial.setTimeout() |
Serial.write() | Serial.SerialEvent() | Stream |
(十二)USB(仅适用于 Leonardo 和 Due)
Mouse(键盘) | Keyboard(鼠标 |
---|
------------详述--------------
一、结构部分
一、(一)程序结构
1.1 setup()
在Arduino中程序运行时将首先调用 setup() 函数。用于初始化变量、设置针脚的输出\\输入类型、配置串口、引入类库文件等等。每次 Arduino 上电或重启后,setup 函数只运行一次。
int buttonPin = 3;//定义一个变量buttonPin为针脚3
void setup()
{
Serial.begin(9600);//定义初始串口波特率为9600
pinMode(buttonPin, INPUT);//定义buttonPin也就是前面定义的针脚3为input输入针脚
}
void loop()
{
// ...
}
1.2 loop()
在 setup() 函数中初始化和定义了变量,然后执行 loop() 函数。顾名思义,该函数在程序运行过程中不断的循环,根据一些反馈,相应改变执行情况。通过该函数动态控制 Arduino 主控板。
int buttonPin = 3; // setup 中初始化串口和按键针脚.
void setup()
{
beginSerial(9600);
pinMode(buttonPin, INPUT);
}
// loop 中每次都检查按钮,如果按钮被按下,就发送信息到串口
void loop()
{
if (digitalRead(buttonPin) == HIGH)//通过eigitalRead读取到针脚3的电平值是否为高
serialWrite('H');//是高就通过串口写出H
else
serialWrite('L');//如果不是就通过串口写出L
delay(1000);//延时1000毫秒,也就是1秒
}
一、(二)语句
2.1 if
if(条件判断语句)和 ==、!=、<、>(比较运算符)
if 语句与比较运算符一起用于检测某个条件是否达成,如某输入值是否在特定值之上等。if 语句的语法是:
if (someVariable > 50)
{
// 执行某些语句
}
本程序测试 someVariable 变量的值是否大于 50。当大于 50 时,执行一些语句。换句话说,只要 if 后面括号里的结果(称之为测试表达式)为真,则执行大括号中的语句(称之为执行语句块);若为假,则跳过大括号中的语句。 if 语句后的大括号可以省略。若省略大括号,则只有一条语句(以分号结尾)成为执行语句。
下面几种写法都是正确的:
第一种:
if (x > 120) digitalWrite(LEDpin, HIGH);//判断x的值是不是大于120,是的话就让LEDpin这个针脚的电平成为高电平
第二种:
if (x > 120)
digitalWrite(LEDpin, HIGH);
第三种:
if (x > 120){ digitalWrite(LEDpin, HIGH); }
第四种:
if (x > 120){
digitalWrite(LEDpin1, HIGH);
digitalWrite(LEDpin2, HIGH);
}
在小括号里求值的表达式,需要以下操作符:
比较运算操作符:
x == y(x 等于 y)注意这是等于,并不是赋值,赋值是=
x != y(x 不等于 y)
x < y(x 小于 y)
x > y(x 大于 y)
x <= y(x 小于等于 y)
x >= y(x 大于等于 y)
警告:
注意使用赋值运算符的情况(如 if (x = 10))。一个“=”表示的是赋值运算符,作用是将 x 的值设为 10(将值 10 放入 x 变量的内存中)。两个“=”表示的是比较运算符(如 if (x == 10)),用于测试 x 和 10 是否相等。后面这个语句只有 x 是 10 时才为真,而前面赋值的那个语句则永远为真。
这是因为 C 语言按以下规则进行运算 if (x=10):10 赋值给 x(只要非 0 的数赋值的语句,其赋值表达式的值永远为真),因此 x 现在值为 10。此时 if 的测试表达式值为 10,该值永远为真,因为非 0 值永远为真。所以,if (x = 10) 将永远为真,这就不是我们运行 if 所期待的结果。另外,x 被赋值为 10,这也不是我们所期待的结果。
if 的另外一种分支条件控制结构是 if…else 形式。
2.2 if…else
if/else是比if更为高级的流程控制语句,它可以进行多次条件测试。比如,检测模拟输入的值,当它小于500时该执行哪些操作,大于或等于500时执行另外的操作。代码如下:
if (pinFiveInput < 500)
{
// 执行A操作
}
else
{
// 执行B操作
}
else可以进行额外的if检测,所以多个互斥的条件可以同时进行检测。
测试将一个一个进行下去,直到某个测试结果为真,此时该测试相关的执行语句块将被运行,然后程序就跳过剩下的检测,直接执行到if/else的下一条语句。当所有检测都为假时,若存在else语句块,将执行默认的else语句块。
注意else if语句块可以没有else语句块。else if分支语句的数量无限制。
if (pinFiveInput < 500)
{
// 执行A操作
}
else if (pinFiveInput >= 1000)
{
// 执行B操作
}
else
{
// 执行C操作
}
另外一种进行多种条件分支判断的语句是switch case语句。
2.3 for
描述
for语句用于重复执行一段在花括号之内的代码。通常使用一个增量计数器计数并终止循环。for语句用于重复性的操作非常有效,通常与数组结合起来使用来操作数据、引脚。
for循环开头有3个部分:
for(初始化;条件;增量计数){
//语句
}
“初始化”只在循环开始执行一次。每次循环,都会检测一次条件;如果条件为真,则执行语句和“增量计数”,之后再检测条件。当条件为假时,循环终止。
例子
//用PWM引脚将LED变暗
int PWMpin = 10; //将一个LED与47Ω电阻串联接在10号针脚
void setup()
{
//无需设置
}
void loop()
{
for (int i=0; i <= 255; i++)//定义一个变量i,并赋值为0,当i小于等于255的时候i就加1,也可写成i+=5,这样每循环一次i就加5
{
analogWrite(PWMpin, i);//让10号针脚的电平改变为i
delay(10);//延时10毫秒
}
}
编程提示
C语言的for循环语句比BASIC和其他电脑编程语言的for语句更灵活。除了分号以外,其他3个元素都能省略。同时,初始化,条件,增量计算可以是任何包括无关变量的有效C语句,任何C数据类型包括float。这些不寻常的for语句可能会解决一些困难的编程问题。
例如,在增量计数中使用乘法可以得到一个等比数列:
for(int x = 2; x < 100; x = x * 1.5){//定义X为2,当X小于100的时候X重新赋值为它自己的1.5倍
println(x);//打印输出x的值
}
生成:2,3,4,6,9,13,19,28,42,63,94
另一个例子,使用for循环使LED产生渐亮渐灭的效果:
int PWMpin = 10; //将一个LED与47Ω电阻串联接在10号针脚
void setup()
{
//无需设置
}
void loop()
{
int x = 1; //定义一个整数变量x赋值为
for (int i = 0; i > -1; i = i + x) //定义i为0当i小于负一的时候,i的值为它自己加上X,也就是加上1,灯就依次变亮了
{
analogWrite(PWMpin, i); //让PWMpin针脚的电平变为i
if (i == 255) x = -1; // 当i等于最大值255的时候,把x改变为负一,这样再循环上去的时候i的值就会依次减一,就由亮变暗了
delay(10); //延时10毫秒,如果还想让灯由暗变亮的话就再写个判断
if(i==0) x=1; //当i减小到0的时候又把x变成1,这样i就又依次加1,灯由暗变亮了
delay(10);
}
}
2.4 switch case
和if语句相同,switch…case通过程序员设定的在不同条件下执行的代码控制程序的流程。特别地,switch语句将变量值和case语句中设定的值进行比较。当一个case语句中的设定值与变量值相同时,这条case语句将被执行。
关键字break可用于退出switch语句,通常每条case语句都以break结尾。如果没有break语句,switch语句将会一直执行接下来的语句(一直向下)直到遇见一个break,或者直到switch语句结尾。
语法也是先switch然后跟括号()括号内写上变量值,后面跟大括号,大括号里写上case分支
例子:
switch (var) {
case 1: //case 1后面是冒号
//当var等于1时,执行一些语句
break;
case 2
//当var等于2时,执行一些语句
break;
default:
//如果没有任何匹配,执行default
//default可有可不有
}
语法:
switch (var) { //定义检查var的值
case label1: //如果var的值是label1的就就执行下面的语句
// 程序语句
break;
case label2: //如果var的值是label2的就就执行下面的语句
//程序语句
break;
default: //如果var的值都不在上面的里面的话就执行下面的语句
//程序语句
}
参数:
var: 用于与下面的case中的标签进行比较的变量值
label: 与变量进行比较的值
2.5 while
描述:
while循环会无限的循环,直到括号内的判断语句变为假。必须要有能改变判断语句的东西,要不然while循环将永远不会结束。这在您的代码表现为一个递增的变量,或一个外部条件,如传感器的返回值。
语法:
while(表达){
//语句
}
参数:
表达:为真或为假的一个计算结果
例子:
var = 0; //定义一个变量var赋值为0
while(var < 200){ //当var的值小于200的时候执行下面的语句
var++ //var依次加1,加200次,直到var的值不小于200为止
}
2.6 do…while
do…while循环与while循环运行的方式是相近的,不过它的条件判断是在每个循环的最后,所以这个语句至少会被运行一次,然后才被结束。
do
{
//语句
}while(测试条件);
例子:
do
{
delay(50); //延时50秒
X = readSensors(); //给X赋值
}while(X <100); //当x小于100时,继续运行,当x不小于100的时候就不运行了
2.7 break
break用于退出do,for,while循环,能绕过一般的判断条件。它也能够用于退出switch语句。
例子:
for (x = 0; x < 255; x ++)
{
digitalWrite(PWMpin, x);
sens = analogRead(sensorPin);
if (sens > threshold){
x = 0;
break; //这里用break就打断循环了,相当于在此结束了,程序就不再循环了
}
delay(50);
}
2.8 continue
continue语句跳过当前循环中剩余的迭代部分( do,for 或 while )。它通过检查循环条件表达式,并继续进行任何后续迭代。
例子
for (x = 0; x < 255; x ++)
{
if (x > 40 && x < 120){
continue; // 当x在40与120之间时,跳过后面两句,即迭代。
}
digitalWrite(PWMpin, x);
delay(50);
}
2.9 return
终止一个函数,如有返回值,将从此函数返回给调用函数。
语法
return;
return value; // 两种形式均可
参数
value:任何变量或常量的类型
例子
一个比较传感器输入阈值的函数
int checkSensor(){ //这儿定义了一个整数形函数checkSensor
if (analogRead(0) > 400) { //如果读取0针脚的数据大于400的话
return 1;} //返回1,相当于调用这个函数后得到的值是1
else{
return 0; //返回0,相当于调用这个函数后得到的值是0
}
}
return关键字可以很方便的测试一段代码,而无需“comment out(注释掉)” 大段的可能存在bug的代码。
void loop(){
//写入漂亮的代码来测试这里。
return;
//剩下的功能异常的程序
//return后的代码永远不会被执行
}
2.10 goto
程序将会从程序中已有的标记点开始运行,这个东西,少用
语法
label:
goto label; //从label处开始运行
提示
不要在C语言中使用goto编程,某些C编程作者认为goto语句永远是不必要的,但用得好,它可以简化某些特定的程序。许多程序员不同意使用goto的原因是, 通过毫无节制地使用goto语句,很容易创建一个程序,这种程序拥有不确定的运行流程,因而无法进行调试。感觉就像你明明在1上一下就跳到了8上,并 不是从上而下的过程。
的确在有的实例中goto语句可以派上用场,并简化代码。例如在一定的条件用if语句来跳出高度嵌入的for循环。
例子
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; //这儿有一个goto语句所以程序会跳转到下一个bailout
}
//更多的语句...
}
}
}
bailout: //goto语句跳转到这儿继续执行
一、(三)扩展语法
3.1 ;(分号)
用于表示一句代码的结束。
例子
int a = 13;
提示
在每一行忘记使用分号作为结尾,将导致一个编译错误。错误提示可能会清晰的指向缺少分号的那行,也可能不会。如果弹出一个令人费解或看似不合逻辑的编译器错误,第一件事就是在错误附近检查是否缺少分号。
3.2 {}(花括号也称大括号)
大括号(也称为“括号”或“大括号”)是C编程语言中的一个重要组成部分。它们被用来区分几个不同的结构,下面列出的,有时可能使初学者混乱。
左大括号“{”必须与一个右大括号“}”形成闭合。这是一个常常被称为括号平衡的条件。在Arduino IDE(集成开发环境)中有一个方便的功能来检查大括号是否平衡。只需选择一个括号,甚至单击紧接括号的插入点,就能知道这个括号的“伴侣括号”。
目前此功能稍微有些错误,因为IDE会经常会认为在注释中的括号是不正确的。
对于初学者,以及由BASIC语言转向学习C语言的程序员,经常不清楚如何使用括号。毕竟,大括号还会在”return函数”、“endif条件句”以及“loop函数”中被使用到。
由于大括号被用在不同的地方,这有一种很好的编程习惯以避免错误:输入一个大括号后,同时也输入另一个大括号以达到平衡。然后在你的括号之间输入回车,然后再插入语句。这样一来,你的括号就不会变得不平衡了。
不平衡的括号常可导致许多错误,比如令人费解的编译器错误,有时很难在一个程序找到这个错误。由于其不同的用法,括号也是一个程序中非常重要的语法,如果括号发生错误,往往会极大地影响了程序的意义。
大括号中的主要用途
功能 函数
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以上是关于Arduino函数变量大全(长篇)的主要内容,如果未能解决你的问题,请参考以下文章