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

Arduino中HCPCA9685与LiquidCrystal_I2C引脚冲突问题求助

解决HCPCA9685与LiquidCrystal_I2C共用I2C引脚的问题

核心原理:I2C总线的多设备特性

HCPCA9685和LiquidCrystal_I2C均为I2C协议设备,Arduino的A4对应SDA(数据引脚)、A5对应SCL(时钟引脚)——这是硬件I2C的默认引脚,绝大多数Arduino模块库会直接调用硬件I2C资源,无需手动在库文件内声明引脚。

问题原因拆解

  1. 找不到库的引脚声明:硬件I2C引脚由Arduino核心库管理,模块库仅负责与I2C总线通信,不会单独声明引脚。
  2. analogRead()无效:A4/A5作为I2C引脚时,硬件资源会被I2C总线占用,无法同时用作模拟输入,因此模拟读取操作自然失效。

具体解决方案

硬件连接

将两个模块的SDA接Arduino A4,SCL接A5,各自的VCC、GND对应连接(注意:HCPCA9685驱动舵机时电流较大,建议外接5V电源,不要直接使用Arduino主板的5V引脚供电)。

代码实现

  1. 基础初始化代码(无需指定引脚,仅需确认设备I2C地址):

    #include <Wire.h>
    #include <Adafruit_PWMServoDriver.h>
    #include <LiquidCrystal_I2C.h>
    
    // HCPCA9685默认I2C地址为0x40
    Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
    // LiquidCrystal_I2C常见地址为0x27或0x3F,需根据显示屏型号调整
    LiquidCrystal_I2C lcd(0x27, 16, 2);
    
    void setup() {
      pwm.begin();
      lcd.init();
      lcd.backlight();
    }
    
    void loop() {
      // 控制通道0的舵机示例
      pwm.setPWM(0, 0, 300);
      // 液晶显示示例
      lcd.setCursor(0, 0);
      lcd.print("Servo Running");
      delay(1000);
    }
    
  2. 确认设备I2C地址(解决潜在地址冲突):
    如果出现设备无响应,可先上传I2C扫描代码确认实际地址:

    #include <Wire.h>
    void setup() {
      Wire.begin();
      Serial.begin(9600);
      while (!Serial);
      Serial.println("\nI2C Scanner");
    }
    void loop() {
      byte error, address;
      int nDevices;
      Serial.println("Scanning...");
      nDevices = 0;
      for(address = 1; address < 127; address++ ) {
        Wire.beginTransmission(address);
        error = Wire.endTransmission();
        if (error == 0) {
          Serial.print("I2C设备地址:0x");
          if (address < 16) Serial.print("0");
          Serial.print(address, HEX);
          Serial.println("");
          nDevices++;
        }
      }
      if (nDevices == 0) Serial.println("未找到I2C设备\n");
      else Serial.println("扫描完成\n");
      delay(5000);
    }
    

    打开串口监视器即可查看两个设备的实际地址,确保初始化代码中地址匹配。

额外注意事项

  • 若两个设备I2C地址相同,可通过模块上的跳线修改(比如LiquidCrystal_I2C的A0-A2引脚、HCPCA9685的ADDR引脚)。
  • 舵机供电不足会导致抖动或无响应,务必保证HCPCA9685的外接电源功率足够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:58:17