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的频率运行。
实验一:控制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) ; }
实验二:利用电位器控制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);}
视频
自己试试这个项目吧!BOM。
教得好极了,干得好!
我认为你应该使用引脚3,5,6,9,10,或11为pwm -而不是数字引脚2。
同样,对于PWM输出,你不应该在那个引脚上使用pinMode()。pinMode()用于指定数字输入或输出。
对于“教学”的抱负:
不应该先创建const int adc,然后再创建局部int adc(同名)
这是可怕的和令人困惑的,当你以后这样做
adc analogWrite (pwm)