arduino笔记10:基本函数 数字I/O 模拟I/O

 

目录

(一)数字I/O

1)pinMode(pin,mode)

2)digitalWrite(pin,value)

3)int digitalRead(pin)

(二)模拟I/O

1)analogReference(type)

2)analogRead()

3)analogWrite()

(三)高级I/O

1)tone()

2)noTone()

3)ShiftOut()

4)shiftIn()

5)pulseIn()

(四)时间函数

1)millis()

2)micros()

3)delay()

4)delayMicroseconds()

(五)数学函数

(六)三角函数

(七)外部中断函数

(八)中断使能函数

(九)串口收发函数


(一)数字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)

  串口输出数据并带回车符。

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章