#include <Wire.h>
#include <Arduino.h>
#include <Adafruit_GFX.h> // 添加Adafruit_GFX.h库
#include <Adafruit_SSD1306.h>
#include "HX711.h"
#include "soc/rtc.h"
#define LOADCELL_DOUT_PIN 16
#define LOADCELL_SCK_PIN 4
HX711 scale;
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(115200);
rtc_clk_cpu_freq_set(RTC_CPU_FREQ_80M);
Serial.println("HX711 诊断程序");
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
// 等待HX711稳定
delay(3000);
// 检查HX711是否就绪
if (!scale.is_ready()) {
Serial.println("HX711未就绪!请检查接线");
while (1) {
delay(1000);
}
}
Serial.println("HX711已连接");
// 不设置校准因子,直接读取原始值
for (int i = 0; i < 10; i++) {
long raw = scale.read();
Serial.print("原始读数 #");
Serial.print(i + 1);
Serial.print(": ");
Serial.println(raw);
delay(500);
}
// 读取平均值
long raw_average = scale.read_average(20);
Serial.print("20次读数平均值: ");
Serial.println(raw_average);
if (abs(raw_average) < 1000) {
Serial.println("警告:读数异常!请检查:");
Serial.println("1. DOUT和SCK接线是否正确");
Serial.println("2. 传感器是否正确连接到HX711");
Serial.println("3. 传感器是否损坏");
while(1) {
delay(1000);
}
}
// 如果读数正常,设置校准因子
float calibration_factor = 500.0; // 使用较小的校准因子
scale.set_scale(calibration_factor);
// 读取当前重量
float current_weight = scale.get_units(10);
Serial.print("当前重量(g): ");
Serial.println(current_weight);
// 设置零点
scale.tare();
Serial.println("零点已设置");
}
void loop() {
// 读取原始值和计算后的重量
long raw = scale.read();
float weight = scale.get_units(5);
Serial.print("原始值: ");
Serial.print(raw);
Serial.print("\t重量: ");
Serial.print(weight, 1);
Serial.println(" g");
delay(1000);
}