arduino基本函数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
pinMode(pin, mode)函数原型:
void pinMode(uint8_t pin, uint8_t mode) {
uint8_t bit = digitalPinToBitMask(pin); uint8_t port = digitalPinToPort(pin); volatile uint8_t *reg; if wk.baidu.comport == NOT_A_PIN) return; reg = portModeRegister(port); if (mode == INPUT) {
if (digitalPinToTimer(pin) == TIMER1A) {
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(); *reg &= ~bit; SREG = oldSREG; } else { uint8_t oldSREG = SREG; cli(); *reg |= bit; SREG = oldSREG; } } 可以在开发环境中的下列实例程序中找到 pinMode 函数的应用: ADXL3xx.pde、AnalogInput.pde、Blink.pde、BlinkWithoutDelay.pde、Button.pde、Calibration.pde、 Debounce.pde 、 Dimmer.pde 、 Knock.pde 、 Loop.pde 、 Melody.pde 、 Memsic2125.pde 、 PhysicalPixel.pde、Ping.pde
int analogRead(uint8_t pin) {
uint8_t low, high; // set the analog reference (high two bits of ADMUX) and select // the channel (low 4 bits). this also sets ADLAR (left-adjust // result) to 0 (the default). ADMUX = (analog_reference << 6) | (pin & 0x07);
3.2.3 analogWrite(pin, value)
analogWrite 函数通过 PWM 的方式在引脚上输出一个模拟量,较多的应用在 LED 亮度控制、 电机转速控制等方面。
PWM(Pulse Width Modulation,脉冲宽度调制)方式是通过对一系列脉冲的宽度进行调制, 来等效地获得所需要的波形或电压。脉冲宽度调制是一种模拟控制方式,其根据相应载荷的 变化调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改 变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出 来对模拟电路进行控制的一种非常有效的技术。图 3.3 是一个简单的 PWM 波示意图。 其中,VCC 是高电平值,T 是 PWM 波的周期,D 是高电平的宽度,D/T 是 PWM 波的占空比, 当上述 PWM 波通过一个低通滤波器后,波形中高频的部分被滤掉得到所需的波形,其平均 电压为 VCC×D/T。因此,可通过调节 D 的大小来改变占空比,产生不同的平均电压;同样, 调节 PWM 波的周期 T 也可以改变占空比,从而得到不同的平均电压值。
3.1.1 pinMode(pin, mode)
3.1 数字 I/O 3.1.1 pinMode(pin, mode) pinMode 函数在第 2 章中已经出现过了,用以配置引脚为输出或输出模式,它是一个无返回 值函数,函数有两个参数 pin 和 mode,pin 参数表示所要配置的引脚,mode 参数表示设置 的模式—INPUT(输入)或 OUTPUT(输出)。 注意:Arduino 板上的模拟引脚也可以当做数字引脚使用,编号为 14(对应模拟引脚 0)到 19(对应模拟引脚 5)。 由于 Arduino 项目是完全开源的,所以 pinMode(pin, mode)函数原型可直接在 Arduino 开发 环境目录下的 hardware\arduino\cores\arduino 文件夹里的 wiring_digital.c 文件中查看。 函数原型有助于我们深入了解 Ardnino 的基本函数的底层实现方式,但这部分的内容需要在 单独深入学习 AVR 单片机的基础上进行,本书将这些函数原型从文件中提取出来,有兴趣 的读者可以参考一下。一般只要能够熟练地使用这些 Arduino 基本函数就可以了,本书对函 数原型没有进行过多讲解。
3.1.3 digitalRead(pin)
digitalRead 函数用在引脚为输入的情况下,可以获取引脚的电压情况—HIGH(高电平)或 LOW (低电平),参数 pin 表示所要获取电压值的引脚,该函数返回值为 int 型,表示引脚的电压 情况。函数原型如下:
int digitalRead(uint8_t pin) {
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
// start the conversion sbi(ADCSRA, ADSC); // ADSC is cleared when the conversion finishes while (bit_is_set(ADCSRA, ADSC)); // we have to read ADCL first; doing so locks both ADCL // and ADCH until ADCH is read. reading ADCL second would // cause the results of each conversion to be discarded, // as ADCL and ADCH would be locked when it completed. low = ADCL; high = ADCH; // combine the two bytes return (high << 8) | low; } 注意:函数的参数 pin 范围是 0~5,表示 6 个模拟量 I/O 口中的一个。 可以在开发环境中的下列实例程序中找到 analogRead 函数的应用: ADXL3xx.pde 、 AnalogInput.pde 、 Calibration.pde 、 Graph.pde 、 Knock.pde 、 Smoothing.pde 、 VirtualColorMixer.pde
uint8_t timer = digitalPinToTimer(pin); uint8_t bit = digitalPinToBitMask(pin); uint8_t port = digitalPinToPort(pin);
if (port == NOT_A_PIN) return LOW;
值之后,将根据参考电压将模拟值转换到 0~1023。该函数为无返回值函数,参数为 type 类型,有 3 种类型(DEFAULT/INTERNAL/EXTERNAL),具体含义如下: DEFAULT:默认值,参考电压为 5V。 INTERNAL:低电压模式,使用片内基准电压源。 EXTERNAL:扩展模式,通过 AREF 引脚获取参考电压,AREF 引脚位置见图 3.2。
在 Arduino 中执行该操作后,应该等待一定时间后才能对该引脚进行下一次操作。Arduino 中的 PWM 的频率大约为 490Hz。该函数支持以下引脚:3、5、6、9、10、11。在 Arduino 控制板上引脚号旁边标注~的就是可用作 PWM 的引脚,如图 3.4 所示。
analogWrite 函数为无返回值函数,有两个参数 pin 和 value,参数 pin 表示所要设置的引脚, 只能选择函数支持的引脚;参数 value 表示 PWM 输出的占空比,范围在 0~255 的区间,对 应的占空比为 0%~100%,函数原型如下: void analogWrite(uint8_t pin, int val) {
3.1.2 digitalWrite(pin,value)
digitalWrite 函数也是在 Blink 程序中见到过的,它的作用是设置引脚的输出的电压为高电平 或低电平。该函数也是一个无返回值的函数,函数有两个参数 pin 和 value,pin 参数表示所 要设置的引脚,value 参数表示输出的电压—HIGH(高电平)或 LOW(低电平)。 注意:在使用 digitalWrite(pin, value)函数设置引脚之前,需要将引脚设置为 OUTPUT 模式。 digitalWrite(pin, value)函数原型同样也可以在 wiring_digital.c 文件中找到,函数原型如下: void digitalWrite(uint8_t pin, uint8_t val) {
// 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; }
注意:如果引脚没有链接到任何地方,那么将随机返回 HIGH 或 LOW。
可以在开发环境的下列实例程序中找到 digitalRead 函数的应用:
Button.pde、Debounce.pde
3.2.1 analogReference(type)
3.2 模拟 I/O 3.2.1 analogReference(type) analogReference 函数的作用是配置模拟引脚的参考电压。在嵌入式应用中引脚获取模拟电压
注意:如果在 AREF 引脚加载外部参考电压,需要使用一个 5KW 的上拉电阻,这会避免由于 设置不当造成控制芯片的损坏。
3.2.2 analogRead(pin)
analogRead 函数用于读取引脚的模拟量电压值,每读一次需要花 100ms 的时间。参数 pin 表示所要获取模拟量电压值的引脚,该函数返回值为 int 型,表示引脚的模拟量电压值,范 围在 0~1023。函数原型可在 wiring_analog.c 文件中查看,如下:
相关文档
最新文档