yaboPP电子
项目

如何使用Arduino的模拟和数字输入/输出(I/O)

2015年6月10日通过蒂姆血性小子

Arduino可以输入和输出模拟信号,也可以输出数字信号。

Arduino可以输入和输出模拟信号,也可以输出数字信号。

模拟信号可以有任意数量的值,不像数字信号只有两个值:HIGH和LOW。为了测量模拟信号的值,Arduino内置了一个模数转换器(ADC)。ADC将模拟电压转换为数字值。用来获取模拟信号值的函数是analogRead(销)。这个函数转换模拟输入引脚上的电压值,并返回相对于参考值从0到1023的数字值。默认参考电压为5v (Arduino板为5v)或3.3 V (Arduino板为3.3 V)。它有一个参数,就是pin号。

Arduino没有内置的数字-模拟转换器(DAC),但它可以脉宽调制(PWM)数字信号来实现一些模拟输出的功能。用于输出PWM信号的函数是analogWrite(销值)。引脚是用于PWM输出的引脚编号。值是一个与信号占空比成正比的数字。当value = 0时,信号总是关闭。当值= 255时,信号总是亮的。在大多数Arduino板上,PWM功能可在引脚3、5、6、9、10和11上使用。大多数引脚上的PWM信号的频率约为490 Hz。在Uno和类似的板上,引脚5和6的频率约为980hz。列奥纳多上的引脚3和11也以980hz的频率运行。

要映射一个模拟输入值,其范围从0到1023到PWM输出信号,其范围从0到255,可以使用map(value, fromLow, fromHigh, toLow, toHigh)函数。这个函数有5个参数,一个是存储模拟值的变量,其他分别为0、1023、0、255。

实验一:控制LED的亮度

在这个实验中,我们将用一个模拟输出引脚上的PWM信号来控制LED的亮度


硬件要求

  • 1 x领导
  • 1 x电阻器
  • 1 x Arduino UNO R3
  • 1 x电路试验板
  • 2 x跳线


接线图

如下图所示,Arduino的引脚2连接了一个LED。为了改变LED的亮度,程序将改变引脚2输出的PWM信号的占空比。


代码

Const int PWM = 2;//初始化pin2为“pwm”变量void setup() {pinMode(pwm,OUTPUT);//设置引脚2为输出}void loop() {analogWrite(pwm,25);//设置PWM到25延迟(50);//延迟50ms类推写(pwm,50);延迟(50);analogWrite (pwm, 75);延迟(50);analogWrite (pwm, 100);延迟(50); analogWrite(pwm,125) ; delay(50) ; analogWrite(pwm,150) ; delay(50) ; analogWrite(pwm,175) ; delay(50) ; analogWrite(pwm,200) ; delay(50) ; analogWrite(pwm,225) ; delay(50) ; analogWrite(pwm,250) ; }

Using_Arduino_Analog_IO.zip

实验二:利用电位器控制LED亮度

在这个实验中,我们将使用一个电位器来控制LED的亮度。我们将使用analoggread()函数读取电压,使用analogWrite()函数输出PWM信号,其占空比与模拟电压成正比。


硬件要求

  • 1 x电位计
  • 1 x领导
  • 1 x电阻器
  • 1 x Arduino Uno R3
  • 1 x电路试验板
  • 6 x跳线

接线图

如图所示连接电路。当你旋转电位器时,引脚A0上的电压将会改变。然后程序将改变引脚2上的PWM信号的占空比,改变LED的亮度。



代码

Const int PWM = 2;//命名pin 2为' pwm '变量const int adc = 0;//将模拟输入端0引脚命名为“adc”//设置引脚2作为输出}void loop() {int adc = analogRead(0);//读取模拟电压并存储在一个整数adc = map(adc, 0, 1023, 0, 255);/* ----------映射函数------------以上函数缩放adc的输出,这是10位,并给出值btw 0到1023,在值btw 0到255形式的analogWrite函数,它只接收值btw这个范围*/ analogWrite(pwm,adc);}

analog_input_output.ino.zip

视频

自己试试这个项目吧!BOM。

7评论
  • 年代
    schedulemike 2015年9月5日

    教得好极了,干得好!

    喜欢的。 回复
  • G
    greenmoonart 2016年9月27日

    我认为你应该使用引脚3,5,6,9,10,或11为pwm -而不是数字引脚2。

    同样,对于PWM输出,你不应该在那个引脚上使用pinMode()。pinMode()用于指定数字输入或输出。

    喜欢的。 回复
  • T
    tonys_0 2018年8月26日

    对于“教学”的抱负:
    不应该先创建const int adc,然后再创建局部int adc(同名)
    这是可怕的和令人困惑的,当你以后这样做
    adc analogWrite (pwm)

    喜欢的。 回复