You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Arduino中创建IO条形图?Tinkercad中LED条形图故障排查求助

解决LED条形图故障 + Arduino IO条形图创建指南

我来帮你排查黄色和橙色LED不工作的问题,同时详细讲讲怎么在Arduino里实现IO条形图功能~

一、先搞定黄色/橙色LED不工作的问题

咱们从硬件和代码两个维度逐一排查:

硬件排查要点

  • 先确认接线:黄色LED的长脚(阳极)要通过220Ω电阻接到引脚2,短脚(阴极)接GND;橙色LED对应引脚1,接线逻辑一样。接反的话LED肯定不亮,这是新手常犯的错~
  • 核对引脚对应:别实际接线时把黄色LED接到了引脚4,代码里却写的是引脚2,这种 mismatch 也会导致LED没反应。
  • 单独测试LED:把黄色LED直接接到3.3V和GND,看能不能点亮,排除LED本身损坏的可能。

代码排查与优化

  1. 避开引脚1(TX串口引脚)
    Arduino的引脚1是默认的串口发送(TX)引脚,只要你的Arduino和电脑通过USB连在一起,这个引脚就会被串口通信占用,橙色LED自然没法正常工作。建议换成空闲的引脚,比如引脚4:

    // 修改setup里的引脚初始化
    pinMode(4, OUTPUT);
    // 然后把loop里的引脚1全部替换成4
    if (outputValue > 91) {
      digitalWrite(4, HIGH);
    } else {
      digitalWrite(4, LOW);
    }
    
  2. 调低阈值,让LED更容易触发
    你代码里黄色LED需要outputValue > 51才亮,橙色要>91,这意味着传感器得输出超过一半、接近满量程的数值才会触发。如果你的传感器实际输出范围没这么大,LED当然不会亮。可以先调低阈值测试:

    // 红色LED(引脚3):超过10就亮
    if (outputValue > 10) {
      digitalWrite(3, HIGH);
    } else {
      digitalWrite(3, LOW);
    }
    // 黄色LED(引脚2):超过40就亮(从51下调)
    if (outputValue > 40) {
      digitalWrite(2, HIGH);
    } else {
      digitalWrite(2, LOW);
    }
    // 橙色LED(引脚4):超过70就亮(从91下调)
    if (outputValue > 70) {
      digitalWrite(4, HIGH);
    } else {
      digitalWrite(4, LOW);
    }
    
  3. 加调试输出,搞清楚传感器实际数值
    加入串口打印,看看sensorValue和outputValue的真实范围,这样调整阈值更有依据:

    void setup() {
      // 原有的pinMode代码...
      Serial.begin(9600); // 初始化串口通信
    }
    void loop() {
      sensorValue = analogRead(A0);
      outputValue = map(sensorValue, 0, 1023, 0, 100);
      // 打印数值到串口监视器
      Serial.print("传感器数值: ");
      Serial.print(sensorValue);
      Serial.print(" | 映射后数值: ");
      Serial.println(outputValue);
      // 原有的LED控制代码...
    }
    

    打开Arduino IDE的串口监视器(右下角那个放大镜图标),就能看到实时数值,判断是不是没达到LED的触发条件。

二、如何在Arduino中创建IO条形图

IO条形图就是根据输入值(比如传感器读数),点亮对应数量的LED,形成类似进度条的效果。下面分两种场景给你方案:

场景1:LED数量少(3-5个)—— 基础版(单个IO控单个LED)

这种方式代码直观,容易理解:

  1. 硬件搭建:每个LED串联220Ω电阻,阳极接数字引脚,阴极接GND。比如用引脚3、2、4分别控制红、黄、橙LED。
  2. 优化代码(用数组简化逻辑):
    用数组存储引脚和阈值,以后加LED只需要修改数组,不用重复写if-else,更简洁:
    // 存储LED引脚和对应阈值
    const int ledPins[] = {3, 2, 4};
    const int thresholds[] = {10, 40, 70};
    int sensorValue = 0;
    int outputValue = 0;
    // 自动计算LED数量,不用手动数
    int ledCount = sizeof(ledPins) / sizeof(ledPins[0]);
    
    void setup() {
      pinMode(A0, INPUT);
      // 批量初始化LED引脚
      for (int i = 0; i < ledCount; i++) {
        pinMode(ledPins[i], OUTPUT);
      }
      Serial.begin(9600);
    }
    
    void loop() {
      sensorValue = analogRead(A0);
      outputValue = map(sensorValue, 0, 1023, 0, 100);
      // 逐个控制LED亮灭
      for (int i = 0; i < ledCount; i++) {
        digitalWrite(ledPins[i], outputValue > thresholds[i] ? HIGH : LOW);
      }
      delay(20); // 适当延长延迟,避免LED闪烁
    }
    

场景2:LED数量多(8个以上)—— 移位寄存器版(节省IO)

如果需要8个甚至更多LED,用74HC595移位寄存器,只需要3个Arduino引脚就能控制8个LED,非常节省IO资源:

  1. 硬件连接:
    • 74HC595的VCC接5V,GND接Arduino的GND
    • SER(数据输入引脚)接Arduino引脚11
    • SRCLK(移位时钟引脚)接引脚12
    • RCLK(锁存时钟引脚)接引脚13
    • 每个LED串联220Ω电阻,一端接74HC595的Q0-Q7引脚,另一端接GND
  2. 代码实现:
    const int dataPin = 11;   // 74HC595的数据引脚
    const int clockPin = 12;  // 移位时钟引脚
    const int latchPin = 13;  // 锁存时钟引脚
    int sensorValue = 0;
    int outputValue = 0;
    
    void setup() {
      pinMode(dataPin, OUTPUT);
      pinMode(clockPin, OUTPUT);
      pinMode(latchPin, OUTPUT);
      Serial.begin(9600);
    }
    
    void loop() {
      sensorValue = analogRead(A0);
      // 把传感器数值映射到0-8(对应0到8个LED点亮)
      outputValue = map(sensorValue, 0, 1023, 0, 8);
      // 生成要发送给移位寄存器的二进制数据
      byte ledState = 0;
      for (int i = 0; i < outputValue; i++) {
        bitSet(ledState, i); // 点亮第i个LED
      }
      // 发送数据到移位寄存器
      digitalWrite(latchPin, LOW); // 打开锁存,准备接收数据
      shiftOut(dataPin, clockPin, MSBFIRST, ledState); // 发送数据
      digitalWrite(latchPin, HIGH); // 关闭锁存,更新LED状态
      delay(20);
    }
    
    这样,传感器数值越高,点亮的LED数量越多,完美实现条形图效果。

内容的提问来源于stack exchange,提问作者kaluaaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 04:07:30