进阶之路(基础篇) - 011 arduino api基础手册

arduino 函数 api

程序结构

在Arduino中, 标准的程序入口main函数在内部被定义, 用户只需要关心以下两个函数:
void setup()
void loop()
setup() 函数用于初始化, loop() 函数用于执行. 初始化函数一般放在程序开头, 用于设置一些引脚的输出/输入模式, 初始化串口通讯等类似工作. loop() 函数中 的代码将被循环执行, 例如: 读入引脚状态, 设置引脚输出状态等.

控制语句
if,if...else,for,switch,while,do...while,break,continue,return,goto

相关语法
; (分号),(大括号),// (单行注释),/* */ (多行注释),#define,#include,

算术运算符
= (赋值),+ (加),- (减),* (乘),/ (除),% (取模)

比较运算符
== (等于),!= (不等于),< (小于),> (大于),<= (小于等于),>= (大于等于)

布尔运算符
&& (逻辑与)、|| (逻辑或)、! (逻辑非)

指针运算符

* 指针运算符 & 地址运算符

位运算

& (位与)、| (位或)、^ (位异或)、~ (位非)、<< (左移)、>> (右移)、端口操作

复合运算符

++ (自加)、-- (自减)、+= (复合加)、-= (复合减)、*= (复合乘)、/= (复合除)、&= (复合与)、|= (复合或)

常量

HIGH | LOW
INPUT | OUTPUT
true | false
整数常量
浮点数常量
数据类型

void(无类型)
word(字组) 0~65535 //16位
boolean(布尔型) 0~1 //1位
char(字符型) -128~+127 //8位
unsigned char(无符号字符型) 0~255 //8位
short -32768~+32767 //16位
byte(字节型) //8bit
int(整型) -2147483648~+2147483647 //32位
unsigned int(无符号整型) 0~65535 //16位
long(长整型) -2147483648~+2147483647 //32位
unsigned long(无符号长整型) 0~4297967295 //32位
float(单精度) -3.4028235E+38~+3.4028235E+38
double(双精度)
string(字符串)
array(数组)

数据类型转换

char(),byte(),int(),word(),long(),float()

变量作用域&修饰符

变量作用域

static (静态变量),volatile (易变变量),const (不可改变变量)

辅助工具

sizeof() (sizeof运算符)、ASCII码表

//基本函数
/**************数字I/O*************/
pinMode(pin,mode); //设置引脚输出状态
   pinMode函数用于配置引脚为输入或输出模式,该函数是一个无返回值函数,函数有两个参数 pin 和 mode,pin参数表示所要配置的引脚,mode 参数表示设置的模式——INPUT(输入模式),OUTPUT(输出模式)和INPUT_PULLUP(输入模式,且引脚点位拉高);

digitalWrite(pin,value); //设置引脚的输出数据
  digitalWrite函数的作用是设置引脚输出引脚引脚的电平为高电平或地电平。该函数是一个无返回值函数,函数有两个参数pin和value,pin参数表示所要配置的引脚,value参数表示输出电压——HIGH(高点平)和LOW(第电平)。

int digitalRead(pin); //引脚数据读取

  digitalRead函数用在函数为输入情况,可以获取引脚电压的情况——HIGH(高电平)或LOW(低电平),参数 pin参数表示要获取电压值的引脚,该函数返回值为 int 类型,表示引脚的电压情况。

/*************模拟I/O*************/
analogRead(pin); //读取引脚的电压值
  analogRead函数用于读取引脚的模拟量电压值,每一次读取需要消耗的时间为 100us。参数 pin参数表示要获取模拟量电压值的引脚,该函数返回值为 int 类型,表示模拟量电压值,范围在 0~1023。

analogWrite(pin,value); //设置引脚输出模拟量(PWM)
  通过指定引脚输出模拟量(PWM),可用于让LED以不同的亮度点亮或驱动电机以不同的速度旋转。
  analogWrite()输出结束后,该引脚将产生一个稳定的特殊PWM波形,直到下次调用 analogWrite()(或在同一引脚使用digitalRead()或 digitalWrite())。
  PWM信号的频率大约是490Hz。
  在大多 Arduino板(ATmega168或ATmega328)上,只有引脚3,5,6,9,10和11可以实现该功能。AduinoMega上,引脚2~13可以实现该功能。Arduino旧版本的板子 (ATmega8)只有9,10,11可以使用 analogWrite()。
  在使用 analogWrite()前,不需要使用 pinMode()来设定引脚。analogWrite函数与模拟引脚、analogRead函数没有直接关系。

analogReference(type); //设置模拟参考电压
  analogReference函数的作用是配置引脚的参考电压。在嵌入式应用中引脚获取模拟电压值之后,将根据参考电压将模拟值转换到0~1023。该函数为无返回值函数,参考为   mode 类型,有 3 种类型(DEFAULT/INTERNAL/EXTERNAL),具体含义如下所表示。
  NEFAULT:预设置,参考电压5V
  INTERNAL:低电压模式,使用偏内基准电压源。
  INTERNAL1V1:1V的内基准电压源(只能在 ArduinoMega使用)
  INTERNAL2V56:56V的内基准电压源(只能在 ArduinoMega使用)
  EXTERNAL:扩展模式,通过AREF引脚获取参考电压
  实际电压 = (analogRead(pin)*基准电压)/1024;

/*************高级I/O************/
shiftOut(dataPin, clockPin, bitOrder, val); //将一个数据以此移出
  这个函数的作用是将一个数据的一个字符组中的字符组中的字符以次移出。从最高有效位(最左边)或最低有效位(最右边)开始。依次向数据引脚写入每一个字符,之后时钟引脚被拉高或拉低,指示刚才的数据有效。
  注意:如果链接的设备时钟类型为上升沿,就要确定在调用 shiftOut()前时钟引脚为低电平,如调用 digitalWrite(clockPin,LOW)。
这是一个软件实现的功能。
  Arduino提供了一个硬件实现的ISP函数库,它速度更快,但只在特定引脚才会有效。
  dataPin:数据输出引脚,数据的每一个字符将逐次输出。引脚模式需要设置成输出。
  clockPin:时钟输出引脚,为数据输出提供时钟,引脚模式需要设置成输出。
  bitOrder:数据位移顺序选择字符,该参数为byte类型,有两种类型可选择,分别是高位先入 MSBFIRST 和低位先入 LSBFIRST
  val:所有输出的数据
  shiftOut函数能够将数据通过串行的方式在引脚上输出,相当于一般意义上的同步串行通信,这是控制器与控制器,控制器与传感器之间常用的一种通信方式。

pulseIn(pin, state, timeout); //读取引脚上的脉冲时长

  pin:读取脉冲的引脚编号
  state:读取引脚的脉冲的电平状态
  timeout:最大的读取时长(已um为单位)

/************时间函数************/
millis();
  millis函数可通过返回值、返回获取机器运行的时间长度,单位为ms。系统最长的记录时间为9小时22分,如果超出时间从0开始。函数返回值为unsigned long 型,无参数。

delay(ms);
  delay函数为一个延时函数,曾在Blink程序中用到,参数表示设置的延长时间,单位ms。

delayMicroseconds(us);
  delayMicroseconds函数为一个延时函数,参数表示设置的延长时间,单位us。

/**************数学库************/
min(x, y); //返回两个参数中较小的值。
max(x, y); //返回两个参数中较大的值。
abs(x); //返回参数的绝对值。
  constrain(amt, low, high); //区间
  如果 amt<low,则返回low的值。
  如果 amt>high,则返回high的值。
  如果 low<amt<high,则返回amt的值。
map(x, in_min, in_max, out_min, out_max); //区间映射
  map函数的作用是将[in_min,in_max]范围内的X等比映射到[out_min,out_max]范围内。意思是说,这个函数可以由原来的比例范围,换算成另一个比例范围。
  x:判断的数字。
  in_min:原来的数字范围最小的数值。
  in_max:原来的数字范围最大的数值。
  out_min:计算后范围最小的数值。
  out_max:计算后范围最大的数值。

pow(base, exponent); //求 base的 exponent次方
sqrt(x); //求平方根

/************三角函数***********/
sin(rad); //正弦
cos(rad); //余弦
tan(rad); //正切

/**************随机数************/
randomSeed(seed); //生成伪随机数。(调用random函数)
  long myRandomNumber = random(max);
random(howbig); //生成伪随机数。
  random函数返回一个0~howbig-1之间的随机数。可以做模拟噪声信号。

  random(howsmall, howbig);

/*********字符串(string)**********/
charAT(); //获取字符串的第 n 个字符 
  String1.charAT(n); //string是字符串的头指针

compareTo(); //比较两个字符串
  compareTo函数是比较两个字符串,相同返回两个字符串当前比较字符串的差值。前-后
  语法:string1.compareTo(string2);
  string1:第一个字符串
  string2:第二个字符串

concat(); //字符串拼接
  string1.concat(string2); //把 string2拼接到 string1后面

endsWith(); //字符串尾部判断对比
  string1.endsWith(string2); //判断 string1尾部是否是字符串 string2,当然你也可以用它来判断‘\n‘

equals(); //判断字符串是否相等。
  string1.equals(string2);
  string1:被判断的字符串
  string2:判断的字符串
  返回值是布尔类型,true 和 false

equalslgnoreCase(string2); //判读字符串口是否相等。
  string1.equalslgnoreCase(string2);
  string1:被判断的字符串
  string2:判断的字符串
  返回值是布尔类型,true 和 false

getBytes(); //字符串的复制和和函数 toCharArray()功能非常相识。
  string1.getBytes(buf,len);
  string1:原本的字符串
  buf:要搬移的目的变量
  len:字符串长度

indexOf(); //在字符串中选择特定的字符,并返回位置的功能函数。(正向)
  如果你想在一个很长的字符串中查找这个特别的关键字,可以使用这个函数。
  string1.indexOf(val);
  string1.indexOf(val,from);
  string1:原本的字符串
  val:想要找的关键字,可以是char或 string 字符串。
  from:选择性参数,你可以特别指定从那个位置开始寻找这个关键字。
  返回值:成功返回位置,失败返回-1

lastlndexOf(); //在字符串中选择特定的字符串,并返回位置的功能函数。(反向)
  string1.lastlndexOf(val);
  string1.lastlndexOf(val,from);
  string1:原本的字符串
  val:想要找到的关键字,可以是char或者 string字符串。
  from:选择性参数,你可以特别指定从那个位置回头寻找这个关键字。
  返回值:成功返回位置,失败返回-1

length(); //测量字符长度
  string1.length();
  string1:要被测量的字符串。
  返回值:字符串的长度。

replace(); //字符串替换
  string1.replace(string2,string3);
  string1:原本的字符串。
  string2:在字符串中欲被替换的字符串。
  string3:要替换之后的新字符串。
  返回值:无

setCharAt(); //字符替换
  string1.setCharAt(i,charl);
  string1:原本的字符串。
  i:字符串中欲被换掉的字符的位置。
  charl:要替换的字符,注意只有一个字符,而不是字符串。
  返回值:无

startsWith(); //判断字符串是否已某个特殊的字符串开始的
  string1.starts With(string2);
  string1:原本的字符串。
  string2:判断是不是已这个字符串开始。
  返回值:布尔代数,true 和 false

substring(); //用来截取字符串中间的某一位置。另外是决定那里结束。
  string1.substring(from); //返回 from 之后的
  string1.substring(from,to); //返回 from 和 to 之间的
  string1:原本的字符串
  from:要截取的字符串从第几个字开始。
  to:要截取后面的第几个字。
  返回值:返回的字符串。

toCharArray(); // 把string拷贝char中
  toCharArray函数是字符串处理中常用的一个函数,你可以把他当成 string 转 char[] 的转换函数,或者复制文字的函数,他的功能和 getBytes()非常相似,toCharArray()函数转换后是呈现文字,而getBytes()函数转换后是呈现数字。
  string1.toCharArray(buf,len);
  string:原本的字符串。
  buf:指定的char[]的位置,注意char[]的空间,一个要等于或大于复制的大小,不然存储器和程序都会产生不可预期的问题。
  len:要复制的字符串长度。  
  返回值:要复制的字符串长度。

toInt(); // string 转 int
  string1.toInt();
  string1:字符串,如"123"
  返回值:整数,如 123

toLowerCase(); //把英文全部转换为小写
  string1.toLowerCase();
  string1:字符串(全英文)
  返回值:字符串(小写)

toUpperCase(); //把英文全部转换为大写
  string1.toUpperCase();
  string1:字符串(全英文)
  返回值:字符串(大写)

trim(); //自动清除字符串中最前面和最后面的空白数据。
  string1.trim();
  string1:原本的字符串。
  返回值:无。

 

/**************位操作************/
lowByte();
highByte();
bitRead();
bitWrite();
bitSet();
bitClear();
bit();

/*********设置中断函数***********/
attachInterrupt(interrupt, function, mode); //中断设置函数
  attachInterrupt函数用于设置外部中断,函数有3个参数:interrupt、function、mode分别代表中断源,中断处理函数,触发模式。参数选项可选值0或1,在 Arduino中,一般对应2号和3号引脚;参数中断处理函数用来指定中段的处理函数,参数值为函数指针,
  触发模式有4种:
    LOW(低点平触发)、
    CHANGE(变化时触发)、
    RISING(低点平转为高点平)、
    FALLING(高点平转为低点平触发)。
  注意:
  在中断函数中 delay函数不能使用。
  在使用 millis函数始终返回进入中断前的值。
  读取串行数据的话,可能会丢失。
  中断函数中使用的变量需要定义为 volatile 类型。
  detachInterrupt(interrupt); //取消中断
  interrupt为所要取消的中断源。

/***********开关中断************/
interrupts(); //从新启用noInterrupts关闭的中断
noInterrupts(); //关闭已经开启的中断

/***********串口通讯************/
Serial.begin(speed); //设置串口的通信速率
  speed:int 整数,用来设定传输速率,通常是这几个数:300,600,1200,2400,4800,9600,14400,19200,28800,18400,57600或115200
  返回值:无

Serial.available(); //获取前串口缓冲池的数据量。串口的缓存区默认只有64字节,但大小是可以改变的,详情见:http://www.cnblogs.com/jikexianfeng/p/6250564.html
Serial.read(); //用来读取数据,每次只能读取一个字符。
Serial.available函数和 Serial.read函数通常是在一起使用,Serial.available函数是用来判断是否有数据送进来,我们接着用 Serial.read函数用来读取数据。
Serial.flush(); //清空缓冲区数据,Serial.flush()函数的功能在arduino1.0之前和之后版本是不一样的。之前版本是用来清除已经进入缓冲区的输入的串口数据,1.0版之后,用来等待要发送的串口数据发送完毕。详情:http://www.cnblogs.com/jikexianfeng/p/6250638.html

Serial.print(data); //串口输出
Serial.println(data); //串口输出(比print的尾部多一个换行符。)

/************扩展库************/
如果要使用一些已有的库, 可以选择菜单"Sketch->Import Library", 然后选择 相应的库. Sketch工具会自己在代码的开头包含库的头文件(#include).
在引入库之后, 程序的体积也将会增大(因为包含了库的代码). 对于不是必要的库, 直接删除对应的#include语句就可以了.
官方扩展库

以下是Arduino官方提供的扩展库, 被默认包含在开发工具中.
EEPROM - 读写EEPROM存储区.
Ethernet - 以太网支持.
Firmata - 基于串口的通讯协议.
LiquidCrystal - LCD液晶显示.
Servo - 伺服电机.
SoftwareSerial - 软件实现的串口, 可以选择任意引脚.
Stepper - 步进电机.
Wire - I2C协议支持.
Matrix - LED显示阵列控制.
Sprite - LED显示阵列中子块控制.
第三方扩展库

这里只包含了Roboduino扩展板的相关库, 其他的库信息请访问: Arduino在线文档 online~.
Roboduino扩展板:
RoboduinoMotor - Roboduino电机扩展板驱动.
如果需要设计自己的库, 请参考"arduino\hardware\libraries"目录中相关库的代码.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

参考书籍:http://blog.csdn.net/powenko/article/details/48570043#plain

参考文档:https://www.douban.com/note/493189178/

参考网站:http://wiring.org.co/reference/

参考网页:http://www.cnblogs.com/jikexianfeng/p/6031291.html

参考网页:http://www.cnblogs.com/rayray/p/3198091.html

参考网页:http://www.cnblogs.com/jikexianfeng/p/6250638.html

时间: 2024-10-07 08:12:58

进阶之路(基础篇) - 011 arduino api基础手册的相关文章

前端小白进阶之路-技巧篇(垂直水平居中)

在前端布局中居中方式可以说是家常便饭,几乎所有地方都需要用到他,我们常见的就是水平居中和垂直居中.今天小编带大家就看看常用到的这些居中方式都有哪些实现方式. 水平居中:水平居中就是为了让子元素在父元素中排列在水平中心位置,实现方式很多,我们看几种常用的. 使用display:inline-block和text-align:center 原理就是将子容器设置为行内块元素,然后给父容器设置让文字居中的属性以达到目的. 缺点就是里面文字都会居中,可单独设置样式来解决. 使用display:table和

Eclipse插件开发之基础篇(1) 插件开发的基础知识

转载出处http://www.cnblogs.com/liuzhuo 名词翻译 有一些名词在翻译的过程中可能会出现歧义,在这里统一一下. アーキテクチャ=architecture=架构 プラットフォーム=platform=平台 コンポーネント=component=组件 其余的随时补充. 1.Eclipse的架构 Eclipse被作为java的IDE(集成开发环境)被广泛的应用,但是从本质上看Eclipse是一个整合了各种开发工具的平台.因此,它采用了可以自由的增加各种功能的插件架构技术.Ecli

[转]Eclipse插件开发之基础篇(1) 插件开发的基础知识

原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/13/eclipse_plugin_1_0_2.html 名词翻译 有一些名词在翻译的过程中可能会出现歧义,在这里统一一下. アーキテクチャ=architecture=架构 プラットフォーム=platform=平台 コンポーネント=component=组件 其余的随时补充. 1.Eclipse的架构 Eclipse被作为java的IDE(集成开发环境)被广泛的应用,但是从本质上看Eclipse

老王python基础篇--python, 视频, 教程, 视频教程, 基础

老王python基础篇 基础篇11-python基本数据结构-元组和集合.rar 基础篇19-python语句与数据结构应用.rar 基础篇21-文本操作应用.rar 基础篇3-虚拟机安装xubuntu开发环境.rar 基础篇17-python语句1.2.rar 基础篇10-python基本数据结构-列表应用.rar 基础篇9-python基本数据结构-列表.rar 基础篇5-python基本数据类型讲解1.1.rar 基础篇18-基础篇综合习题.rar 基础篇8-python基本数据类型习题解

Java程序员面试题之JavaSE之基础篇

一.JavaSE之基础篇 1.JavaSE基础之语法 ######(1).简述你对JVM,JRE,JDK的理解? JVM:java虚拟机.是一个模拟的计算机,相当于真实存在的计算机(软件+硬件). JDK:是整个java的核心.程序员的产品.包括了java的运行环境.java的工具.java的基础类库. JRE:运行环境.拓展----JVM.JDK和JRE之间的关系:JDK包括JRE,JRE包括JVM######(2).一个".java"源文件中是否可以包括多个类(非内部类)?有什么限

Sass进阶之路,之一(基础篇)

Sass 学习Sass之前,应该要知道css预处理器这个东西,css预处理器是什么呢? Css预处理器定义了一种新的语言将Css作为目标生成文件,然后开发者就只要使用这种语言进行编码工作了.预处理器通常可以实现浏览器兼容,变量,结构体等功能,代码更加简洁易于维护. 那么css预处理器与Sass有什么关系呢,Sass就是属于css预处理器中的一种,还有两款他们分别是Less和 Stylus,这里就不做过多的介绍了. 什么是Sass sass是一种css的开发工具,提供了很多便利的写法,不但使css

Linux运维之路 基础篇:Linux基础命令(一)

Linux运维之路 基础篇:Linux基础命令(一) Linux哲学宗旨: 一切皆文件:把几乎所有的资源,包括硬件设备都组织为文件 有众多单一的小程序组成,一个程序制实现一个功能,组成小程序完成复杂操作 尽量避免和用户交互:实现脚本编程,以自动完成某些功能 使用纯文本文件保存配置信息 终端:用户和主机交互时用到的设备 物理终端:直接接入的设备也叫控制台/dev/console 虚拟终端:附加在物理终端上虚拟出的,默认启动六个,Ctrl+Alt(F1~F6),系统启动时,默认启动虚拟终端1,启动终

Python之路【第三篇】:Python基础(二)

Python之路[第三篇]:Python基础(二) 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作.

Python之路【第二篇】:Python基础(一)

Python之路[第二篇]:Python基础(一) 入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 1 2 3 if 1==1:     name = 'wupeiqi' print  name 下面的结论对吗? 外层变量,可以被内层变量使用 内层变量,无法被外层变量使用 二.三元运算 1 result = 值1 if 条件 else 值2 如果条件为真:result = 值1如果条件为假:result = 值2 三.进制 二进制,01 八进