pinMode()函数
形式:void pinMode(pin,mode)
参数:pin为引脚编号;mode为引脚的输入输出模式。
说明:pinMode函数用以配置引脚与输出或者输入模式,它是一个无返回值函数。函数有两个参数,pin和mode。pin参数表示配置的引脚mode参数表示设置的参数INPUT(输入)和OUTPUT(输出)。INPUT参数用于读取信号,OUTPUT用于输出控制信号。PIN的范围是数字信号0~13,也可以把模拟引脚(A0~A5)作为数字引脚使用,此时编号为14脚对应模拟引脚0,19脚对应模拟引脚5
注意:pinMode()函数常放在setup()函数中来确定引脚的功能。切记,如果在使用某引~没有设定pinMode()或者pinMode设置模式不正确,引脚输入输出过程可能会出现一些不可预料的错误。
pinMode()输出模式种类(mode说明):
- OUTPUT:数字输出
- OUTPUT_OPEN_DRAIN:开漏模式(Open-Drain),由外部上拉电阻提供输出引脚电源。某些数字输出引脚通过这个模式可以输出TTL电平的信号
- INPUT:数字输入,该状态在未接外部电路时,由于内部电路非常敏感、电磁干扰等,会让其读取值为随机的0或1
- INPUT_ANALOG:模拟输入
- INPUT_PULLUP:与数字输入相同,但是内部通过一个高阻值的电阻连接到电源,使得引脚在没有连接外部信号的时候能够读取稳定的高电平信号,防止干扰
- INPUT_PULLDOWN 与“INPUT_PULLUP”类似,只不过高阻值电阻连接到的是地而非电源,没有信号时读取的输入是稳定的低电平
- INPUT_FLOATING 和“INPUT”等效
- PWM:脉宽调制输出
- PWM_OPEN_DRAIN:开漏输出模式的脉宽调制输出
digitalWrite()
说明:digitalWrite函数也是在Blink程序中见到过的,它的作用是设置引脚的输出的电压为高电平或低电平。该函数也是一个无返回值的函数,函数有两个参数pin和value,pin参数表示所要设置的引脚,value参数表示输出的电压—HIGH(高电平)或LOW(低电平)。
注意:1.在使用digitalWrite(pin, value)函数设置引脚之前,需要将引脚设置为OUTPUT模式。 2.使用前必须先用pinMode设置
函数原型:digitalWrite(pin, value)函数原型可以在wiring_digital.c文件中找到,函数原型如下:
void digitalWrite(uint8_t pin, uint8_t val)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *out;
if (port == NOT_A_PIN) return;
// If the pin that support PWM output, we need to turn it off
// before doing a digital write.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);
out = portOutputRegister(port);
if (val == LOW)
{
uint8_t oldSREG = SREG;
cli();
*out &= ~bit;
SREG = oldSREG;
}
else
{
uint8_t oldSREG = SREG;
cli();
*out |= bit;
SREG = oldSREG;
}
}
可以在开发环境的下列实例程序中找到digitalWrite函数的应用:
ADXL3xx.pde、AnalogInput.pde、Blink.pde、BlinkWithoutDelay.pde、Button.pde、Calibration.pde、Debounce.pde、Knock.pde、Loop.pde、Melody.pde、PhysicalPixel.pde、Ping.pde
digitalRead()
说明:digitalRead函数用在引脚为输入的情况下,可以获取引脚的电压情况—HIGH(高电平)或LOW(低电平),参数pin表示所要获取电压值的引脚,该函数返回值为int型,表示引脚的电压情况。
函数原型:
int digitalRead(uint8_t pin)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
if (port == NOT_A_PIN) return LOW;
// If the pin that support PWM output, we need to turn it off
// before getting a digital reading.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);
if (*portInputRegister(port) & bit) return HIGH;
return LOW;
}
可以在开发环境的下列实例程序中找到digitalRead函数的应用: Button.pde、Debounce.pde
delay(ms)
说明:delay函数是一个延时函数,在Blink程序中用到过,参数表示延时时长,单位是ms。函数无返回值,原型如下:
void delay(unsigned long ms)
{
uint16_t start = (uint16_t)micros();
while (ms > 0)
{
if (((uint16_t)micros() - start) >= 1000)
{
ms--;
start += 1000;
}
}
}
可以在开发环境的下列实例程序中找到delay函数的应用: ADXL3xx.pde、AnalogInput.pde、Blink.pde、Fading.pde、Graph.pde、Knock.pde、Loop.pde、Melody.pde、Memsic2125.pde、Ping.pde