目录
(一)数字I/O
1)pinMode(pin,mode)
描述:将指定的引脚配置成输出或输入。
语法:pinMode(pin,mode)。
参数:pin,要设置模式的引脚;mode,INPUT或OUTPUT。
程序示例:
LEDPin = 13
void setup()
{
pinMode(LEDPin,OUTPUT);
}
void loop()
{
digitalWrite(LEDPin,HIGH);
delay(1000);
digitalWrite(LEDPin,LOW);
delay(1000);
}
其实还可以设置为上拉电阻模式。
注意:模拟输入引脚也能当作数字引脚使用。
2)digitalWrite(pin,value)
描述:给一个数字引脚写入HIGH或者LOW。如果一个引脚已经使用pinMode()函数配置为OUTPUT模式,其电压将被设置为相应的值,HIGH为5V(3.3V控制板上为3.3V),LOW为0V。
如果引脚配置为INPUT模式,使用digitalWrite()写入HIGH值,将使内部20k欧姆上拉电阻接入。写入LOW将会禁用上拉。上拉电阻可以点亮一个LED,让其微微亮。如果出现LED工作,但是亮度很低,这种情况可能即使由上拉电阻引起的。补救的办法是使用pinMode()函数设置为输出引脚。
数字13号引脚难以作为数字输入使用,因为大部分的控制板上使用了一颗LED和一个电阻与其链接。如果启动内部的20k欧姆的上拉电阻,其电压将在1.7V左右,而不是正常的5V,因为板载LED串联的电阻使其电压降了下来,因此其返回值总是LOW。如果必须使用数字13号引脚的输入模式,则需要使用外部上拉和下拉电阻。
3)digitalRead(pin)
描述:读取指定引脚的值,HIGH或LOW。
语法:digitalRead(PIN)。
参数:pin,想读取数值的引脚号(int)。
返回:HIGH或者LOW。
程序示例:
//将引脚13设置为输入引脚7的值
LEDPin = 13 //LED连接到引脚13
int inPin = 7; //按钮连接道数字引脚7
int val = 0; //定义变量以存储读取值
void setup()
{
pinMode(LEDPin,OUTPUT);
pinMode(inPin,INPUT);
}
void loop()
{
val = digitalRead(inPin); //读取输入引脚的值
digitalWrite(LEDPin,val);
}
(二)模拟I/O
1)analogReference(type)
描述:设定用于模拟输入的基准电压(输入范围的最大值)。
type的可选值为:
-
DEFAULT - 5伏(5V Arduino板)或3.3伏(3.3V Arduino板)的默认模拟参考值
-
INTERNAL - 内置参考,在ATmega168或ATmega328上等于1.1伏特,在ATmega8上等于2.56伏特(不适用于Arduino Mega)
-
INTERNAL1V1 - 内置1.1V参考(仅限Arduino Mega)
-
INTERNAL2V56 - 内置2.56V参考(仅限Arduino Mega)
-
EXTERNAL - 施加到AREF引脚的电压(仅限0到5V)用作参考
注意:改变基准电压后,之前从analogRead()读取的数据可能不准确。
注意:对AREF引脚的外部参考电压,请勿使用小于0V或大于5V的任何值。如果在AREF引脚上使用外部参考,则必须在调用 analogRead()函数之前将模拟参考设置为EXTERNAL。否则,将短路有效参考电压(内部产生的)和AREF引脚,可能会损坏Arduino板上的微控制器。
或者,你可以通过5K电阻将外部参考电压连接到AREF引脚,从而允许在外部和内部参考电压之间切换。
注意,电阻将改变用作参考的电压,因为AREF引脚上有一个内部32K电阻。两者用作分压器。例如,通过电阻器施加的2.5V将在AREF引脚处产生2.5*32/(32+5)=〜2.2V电压。
2)analogRead()
描述:从指定的模拟引脚读取数据值。Arduino板包含一个6通道(Arduino ProMinn和Arduino Nano有8个通道,Arduino Mega有16个通道)、10位模拟/数字转换器,这表示它将0~5V的输入电压映射到0~1023的整数值,即每个读数对应电压值为5V/1024,每个单位0.0049V(4.9mV)。输入范围和精度可以通过analogReference()改变,其大约需要0.0001s来读取模拟输入,所以最大的阅读速度是每秒10000次。
语法:
analogRead(pin);
pin - 要读取的模拟输入引脚的编号(大多数电路板上为0至5,Mini和Nano上为0至7,Mega上为0至15)
示例:
int analogPin = 3;//potentiometer wiper (middle terminal)
// connected to analog pin 3
int val = 0; // variable to store the value read
void setup() {
Serial.begin(9600); // setup serial
}
void loop() {
val = analogRead(analogPin); // read the input pin
Serial.println(val); // debug value
}
Serial.print()是打印之后不换行,Serial.println()是打印之后换行。
3)analogWrite()
描述:从一个引脚输出PWM模拟值(Plulse Width Modulation,脉冲宽度调整),让LED以不同的亮度点亮或驱动电机以不同的速度旋转。analogWrite()输出结束后,该引脚将产生一个稳定的特定占空比的PWM,该PWM输出继续到下次调用analogWrite()(或在同一引脚调用digitalRead()或digitalWrite())。
PWM信号的频率大约是490Hz。大多数Arduino板(ATmega168或ATmega328)只有引脚3、5、6、9、10和11可以实现该功能。在Arduino Mega上,引脚2~13可以实现该功能。旧版本的Arduino板(ATmega8)只有引脚9、10、11可以使用analogWrite()。在使用analogWrite()之前,不需要调用pinMode()来设置引脚为输出引脚。analogWrite函数与模拟引脚、analogRead函数没有直接关系。
这里从开发板上也是可以区分的,一般模拟值的引脚下面有一个~。
语法:analogWrite(pin,value)。
-
pin - 你希望设置模式的引脚的编号
-
value - HIGH或LOW。
注意事项:引脚5和6的PWM输出将高于预期的占空比(输出的数值偏高),这时因为millis()、delay()功能和PWM输出共享相同的内部定时器。这将导致大多时候处于低占空比状态(如0~10),并可能导致在数值为0时,没有完全关闭引脚5和6。
程序示例:
int LED = 6; // LED connected to pin 6
void setup () {
pinMode(LED, OUTPUT); // set the digital pin as output
}
void setup () {
digitalWrite(LED,HIGH); // turn on led
delay(500); // delay for 500 ms
digitalWrite(LED,LOW); // turn off led
delay(500); // delay for 500 ms
}
下面的可能不经常用到,但是也可以提前了解一下。
(三)高级I/O
1)tone()
描述:在一个引脚上产生一个特定频率的方波(50%占空比)。
2)noTone()
描述:停止由tone()产生的方波。如果没有使用tone()将不会有变化。
3)ShiftOut()
描述:将数据的一个字节一位一位地移除。
4)shiftIn()
描述:将数据的一个字节一位一位地移入。
5)pulseIn()
描述:读取一个引脚的脉冲(HIGH或LOW)。
(四)时间函数
1)millis()
描述:返回Arduino开发板运行当前程序开始的毫秒数,这个数字将在约50天后溢出(归零)。
2)micros()
描述:返回Arduino开发板从运行当前程序开始的微妙数,这个数字将在70min后溢出(归零)。
3)delay()
描述:是程序设定的暂停时间(单位毫秒)。
4)delayMicroseconds()
描述:使程序暂停指定的一段时间(单位为毫秒)。
(五)数学函数
1、min(x,y):传回最小值
例如:val=min(10,20)
2、max(x,y):传回最大值
例如:val=max(10,20)
3、abs(x):回传该数的绝对值
例如:val=abs(-10)
4、constrain(x,a,b):判断x和a b两者之间的状态。
若x<a则回传a;若x>b则回传b;若a<x<b则回传x
5、map(value,fromLow,fromHigh,toLow,toHigh)
例如:map(analogRead(0),0,1023,100,200):将analog0引脚所读的信号进行对等转换至100~200之间的值
6、double pow(x,y)
例如:pow(2,3):表示2的3次方
7、double sqrt(x)
例如:double a=sqrt(10):表示10的算术平方根
8、double sin(rad)
9、double cos(rad)
10、double tan(rad)
例如:sin(2)=0.9092……
(六)三角函数
double sin(double x); //returns sine of x radians
double cos(double y); //returns cosine of y radians
double tan(double x); //returns the tangent of x radians
double acos(double x); //returns A, the angle corresponding to cos (A) = x
double asin(double x); //returns A, the angle corresponding to sin (A) = x
double atan(double x); //returns A, the angle corresponding to tan (A) = x
(七)外部中断函数
(1)attachInterrupt(interrupt, mode)
外部中断只能用到数字IO 口2 和3,interrupt 表示中断口初始0 或1,表示一个功能函数,mode:LOW低电平中断,CHANGE 有变化就中断,RISING 上升沿中断,FALLING 下降沿中断。
(2)detachInterrupt(interrupt)
中断开关,interrupt=1 开,interrupt=0 关。
(八)中断使能函数
(1)interrupts()
使能中断
(2)noInterrupts()
禁止中断
(九)串口收发函数
(1) Serial.begin(speed)
串口定义波特率函数,speed 表示波特率,如9600,19200 等。
(2) int Serial.available()
判断缓冲器状态。
(3)int Serial.read()
读串口并返回收到参数。
(4)Serial.flush()
清空缓冲器。
(5)Serial.print(data)
串口输出数据。
(6)Serial.println(data)
串口输出数据并带回车符。