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。
Sketch 代码
Section titled “Sketch 代码”将以下代码输入到 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 的逻辑很简单:
- 读取传感器:在每次循环中,
analogRead()从电位器获取一个 0 到 1023 的值。 - 映射值:
map()函数是关键。它将传感器的宽范围(0-1023)按比例转换为我们较小的输出范围(0-8,即 LED 的数量)。这告诉我们应该点亮多少个 LED。 - 更新显示:一个
for循环有效地遍历所有 LED。if语句根据映射后的值检查特定 LED 是否应该亮起或熄灭,digitalWrite()相应地设置其状态。
结果与扩展思路
Section titled “结果与扩展思路”当您上传 sketch 并转动电位器时,您应该看到点亮的 LED 数量发生变化,形成平滑的条形图效果。在此基础上,您可以:
- 使用不同的传感器:将电位器替换为光敏电阻(用于测量光线)或温度传感器。
- 改变显示样式:不使用条形图,而是只点亮一个 LED 来指示级别。
- 添加 PWM 渐变:修改代码,使用
analogWrite()使条形图中的最后一个活动 LED 平滑渐变,而不是简单地打开或关闭。