Skip to content

Arduino - LED 条形图

Arduino 项目:电位器控制的 LED 条形图

Section titled “Arduino 项目:电位器控制的 LED 条形图”

这个项目演示了物理计算中一个强大且常见的模式:读取模拟传感器并使用一系列数字输出将其值可视化。我们将构建一个 LED 条形图,它能实时响应电位器的转动。

  • 1 × Arduino Uno R3 或兼容板
  • 1 × 面包板
  • 1 × 10kΩ 电位器(可变电阻)
  • 8 × LED(任意颜色)
  • 8 × 220Ω 电阻(用于限流)
  • 跳线

按照以下说明,仔细将组件连接到面包板上。每个 LED 都必须串联一个电阻以防止损坏。

1. 电位器:

  • 将其中一个外侧引脚连接到 Arduino 的 GND 引脚。
  • 将另一个外侧引脚连接到 Arduino 的 5V 引脚。
  • 将中间引脚(滑动端)连接到 Arduino 的模拟引脚 A0。

2. LED:

  • 对于 8 个 LED 中的每一个,将其阴极(短引脚)连接到面包板的接地轨道(该轨道应连接到 Arduino 的 GND 引脚)。
  • 将第一个 LED 的阳极(长引脚)连接到一个 220Ω 电阻的一端。将该电阻的另一端连接到数字引脚 2。
  • 对其余 7 个 LED 重复此操作,通过各自的电阻将它们分别连接到引脚 3、4、5、6、7、8 和 9。

将以下代码输入到 Arduino IDE 或您首选的编辑器中。此代码设计为易于阅读和调整。

/*
LED 条形图控制器
这个 sketch 从电位器读取模拟值,并以条形图的方式点亮相应数量的 LED。
它演示了数组、for 循环、模拟输入和值映射。
*/
// --- 配置常量 ---
const int analogSensorPin = A0; // 连接到电位器滑动端的引脚
const int ledCount = 8; // 条形图中的 LED 总数
// 用于存储每个 LED 引脚号的数组。这使得代码具有可扩展性。
const int ledPins[ledCount] = {2, 3, 4, 5, 6, 7, 8, 9};
// --- setup 函数(运行一次) ---
void setup() {
// 使用 for 循环遍历我们的 LED 引脚数组
// 并将每个引脚设置为输出模式。
for (int i = 0; i < ledCount; i++) {
pinMode(ledPins[i], OUTPUT);
}
// 可选:启动串口通信用于调试
Serial.begin(9600);
}
// --- loop 函数(重复运行) ---
void loop() {
// 1. 从电位器读取原始传感器值(0-1023)
int sensorReading = analogRead(analogSensorPin);
// 2. 将传感器的 10 位范围(0-1023)映射到 LED 数量(0-8)。
// map() 函数能很好地处理这种转换。
int ledsToLight = map(sensorReading, 0, 1023, 0, ledCount);
// 可选:将值打印到串口监视器,用于调试和理解
Serial.print("Sensor: ");
Serial.print(sensorReading);
Serial.print("\t -> LEDs to light: ");
Serial.println(ledsToLight);
// 3. 循环遍历 LED 并打开或关闭它们。
for (int i = 0; i < ledCount; i++) {
// 如果索引 'i' 小于我们想要点亮的 LED 数量,
// 则打开此 LED。
if (i < ledsToLight) {
digitalWrite(ledPins[i], HIGH);
} else {
// 否则,关闭它。
digitalWrite(ledPins[i], LOW);
}
}
delay(10); // 少量延迟以保持稳定性
}

该 sketch 的逻辑很简单:

  1. 读取传感器:在每次循环中,analogRead() 从电位器获取一个 0 到 1023 的值。
  2. 映射值:map() 函数是关键。它将传感器的宽范围(0-1023)按比例转换为我们较小的输出范围(0-8,即 LED 的数量)。这告诉我们应该点亮多少个 LED。
  3. 更新显示:一个 for 循环有效地遍历所有 LED。if 语句根据映射后的值检查特定 LED 是否应该亮起或熄灭,digitalWrite() 相应地设置其状态。

当您上传 sketch 并转动电位器时,您应该看到点亮的 LED 数量发生变化,形成平滑的条形图效果。在此基础上,您可以:

  • 使用不同的传感器:将电位器替换为光敏电阻(用于测量光线)或温度传感器。
  • 改变显示样式:不使用条形图,而是只点亮一个 LED 来指示级别。
  • 添加 PWM 渐变:修改代码,使用 analogWrite() 使条形图中的最后一个活动 LED 平滑渐变,而不是简单地打开或关闭。