Arduino:3-模拟输出输入

模拟输出:

analogWrite(ledPin, brightness): 模拟输出,传入引脚编号及亮度级别

可变亮度LED灯

模拟输出,支持输出指定的亮度级别,所以可以通过模拟输出来控制LED灯的亮度,搭建电路如下:

CleanShot 2023-10-03 at 17.12.22@2x

LED连接到支持PWM的9号引脚上,两个开关分别连接到8号和2号引脚上,读取开关的值,如果开关1被按下就降低LED灯亮度,如果开关2被按下就增大LED灯的亮度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
bool pushButton1 = false;
bool pushButton2 = false;
int ledPin = 9;
int brightness = 128;

void setup() {
// write your initialization code here
pinMode(2, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}

void loop() {
// write your code here
digitalWrite(ledPin, HIGH);
pushButton1 = !digitalRead(2);
pushButton2 = !digitalRead(8);

// 如果按下按钮1,亮度调低
if (pushButton1 && brightness > 0) {
brightness--;
}
// 如果按下按钮2,亮度增加
if (pushButton2 && brightness < 255) {
brightness++;
}

analogWrite(ledPin, brightness);
Serial.println(brightness);
delay(10);
}
IMG_5531

PWM

脉冲宽度调制(英语:Pulse-width modulation,缩写:PWM),简称脉宽调制,是用脉波来输出模拟信号的一种技术,一般转换后脉波的周期固定,但脉波的工作周期会依模拟信号的大小而改变。

CleanShot 2023-10-03 at 17.27.33@2x

在上个示例中,就是通过PWM引脚改变脉波的工作周期来改变LED灯的亮度,如每一个周期有75%的高电平,则LED灯亮度为75%。

模拟输入

int analogRead(uint8_t pin): 本指令用于从Arduino的模拟输入引脚读取数值。Arduino控制器有多个10位数模转换通道。这意味着Arduino可以将0-5伏特的电压输入信号映射到数值0-1023。

电位器

CleanShot 2023-10-03 at 17.42.40@2x

其在电路图中可看成一个可变电阻,符号如下图,通过旋转旋钮,引脚1-2和引脚2-3之间的阻值也会相应发生变化。

CleanShot 2023-10-03 at 17.47.50@2x

通常接法如下图,1号引脚接地,3号引脚接5v电源,这样旋钮右旋则2号引脚输入电压增大。

CleanShot 2023-10-03 at 17.56.29@2x

analogRead

IMG_5532 CleanShot 2023-10-03 at 18.06.32@2x

可以看到旋钮转到最右边后数值为1023

电位器控制LED亮度

通过模拟输入和模拟输出来使用电位器控制LED亮度

CleanShot 2023-10-03 at 18.35.39@2x
1
2
3
4
5
6
7
8
9
10
11
12
13
void setup() {
// write your initialization code here
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}


void loop() {
// write your code here
int val = analogRead(A0);
int bright = map(val, 0, 1023, 0, 255);
analogWrite(ledPin, bright);
}
  • map函数,用于等比映射,将0-1023的输入等比映射到0-255中。
IMG_5533