#include "HX711.h"
#define DT 2
#define SCK 3
HX711 scale;
long tare_offset = 0;
float calibration_factor = 1.0;
bool calibrated = false;
void setup() {
Serial.begin(9600);
scale.begin(DT, SCK);
// Bağlantı kontrolü
if (!scale.is_ready()) {
Serial.println("❌ HX711 hazır değil!");
while (1);
}
Serial.println("✅ HX711 hazır. Lütfen slider'ı 0.0 kg konumuna getiriniz...");
delay(2000); // Sistemin oturması için bekle
// Offset (tare) al
tare_offset = scale.read_average();
Serial.print("📏 Başlangıç ofseti alındı: ");
Serial.println(tare_offset);
// Kullanıcıdan kalibrasyon için ağırlık uygulaması istenir
Serial.println("📌 Bilinen bir yük uygulayınız (örn. 1 kg = 9.81 N).");
Serial.println("🔁 Ardından Newton cinsinden değeri seri monitöre yazıp Enter'a basınız:");
}
void loop() {
if (!calibrated && Serial.available()) {
float known_force = Serial.parseFloat();
long current_reading = scale.read_average();
calibration_factor = (float)(current_reading - tare_offset) / known_force;
Serial.print("✅ Kalibrasyon tamamlandı! Katsayı: ");
Serial.println(calibration_factor, 4);
Serial.println("📐 Kuvvet ölçümüne geçiliyor...\n");
calibrated = true;
delay(1000);
}
if (calibrated) {
long raw = scale.read_average();
float force = (raw - tare_offset) / calibration_factor;
if (force < 0) force = 0;
Serial.print("Ham veri: ");
Serial.print(raw);
Serial.print(" → Kuvvet: ");
Serial.print(force, 2);
Serial.println(" N");
delay(500);
}
}