连接一个可以正常运行,但是连接上第二个之后,第二个无法正常工作,一直返回-1的值,并且发热滚烫。
代码如图

连接一个可以正常运行,但是连接上第二个之后,第二个无法正常工作,一直返回-1的值,并且发热滚烫。
代码如图

关注🕗晚上好,题主!目前:🟢[在线]
📢参考通义千问、由郭老师整理提供!
📣今日诗号:疏影横斜,暗香浮动,低酌浅唱月明中。休去,休去,惊起一枕奇梦。
你的问题在于你尝试在同一时刻初始化两个HX711模块,但Arduino Uno的数字引脚资源有限,不能同时为两个模块提供足够的I2C通信。为了解决这个问题,你需要在初始化和读取数据时进行一些调整。以下是修改后的代码,使用了两个不同的I2C地址来区分两个模块:
#include <Wire.h>
#include "HX711.h"
const int LOADCELL_DOUT_PIN1 = 4;
const int LOADCELL_SCK_PIN1 = 5;
const int LOADCELL_DOUT_PIN2 = 2;
const int LOADCELL_SCK_PIN2 = 3;
HX711 scale1(LOADCELL_DOUT_PIN1, LOADCELL_SCK_PIN1, 0x4e); // HX711默认地址是0x4e
HX711 scale2(LOADCELL_DOUT_PIN2, LOADCELL_SCK_PIN2, 0x4f); // HX711的第二个地址通常是0x4f
void setup() {
Serial.begin(57600);
// 初始化每个模块
if (!scale1.begin()) {
Serial.println("Error initializing scale1");
return;
}
if (!scale2.begin()) {
Serial.println("Error initializing scale2");
return;
}
Serial.println("HX711 modules initialized.");
}
void loop() {
if (scale1.is_ready()) {
long reading_1 = scale1.read();
Serial.print("Scale 1: ");
Serial.println(reading_1);
delay(1000);
}
if (scale2.is_ready()) {
long reading_2 = scale2.read();
Serial.print("Scale 2: ");
Serial.println(reading_2);
delay(1000);
}
}
这里我将两个模块的DOUT和SCK引脚分别分配到了不同的数字引脚,并给每个模块指定了不同的I2C地址(默认地址是0x4e和0x4f)。这样,它们就可以在不冲突的情况下独立工作。
请注意,确保你的硬件连接正确,并且每个模块的电源和地线都连接在一起。如果问题仍然存在,可能需要检查I2C通信是否稳定,或者尝试更改其中一个模块的I2C地址。