Balance de centrage : firmware ATmega32u4

Écrit par

dans

// Balance de centrage : acquisition sur l'ATmega32u4 de la LattePanda (PlatformIO, carte « leonardo »)
// Bibliothèques : olkal/HX711_ADC, adafruit/Adafruit MPU6050
#include <HX711_ADC.h>
#include <Adafruit_MPU6050.h>

HX711_ADC cell1(7, 8), cell2(9, 10), cell3(11, 12);   // (DOUT, SCK) de chaque HX711
Adafruit_MPU6050 mpu;
const unsigned long PERIOD_MS = 50;                    // 20 trames par seconde
float f1, f2, f3;

void setup() {
  Serial.begin(115200);
  mpu.begin(0x68);
  mpu.setAccelerometerRange(MPU6050_RANGE_2_G);        // seule la gravité nous intéresse
  mpu.setFilterBandwidth(MPU6050_BAND_10_HZ);          // filtre numérique interne
  cell1.begin(); cell2.begin(); cell3.begin();
  cell1.start(2000, true); cell2.start(2000, true); cell3.start(2000, true); // stabilisation + tare
  // facteur d'échelle fixe : le vrai étalonnage est fait côté PC
  cell1.setCalFactor(1000.0); cell2.setCalFactor(1000.0); cell3.setCalFactor(1000.0);
}

void loop() {
  static unsigned long last = 0;
  if (cell1.update()) f1 = cell1.getData();            // chaque HX711 a son propre rythme
  if (cell2.update()) f2 = cell2.getData();
  if (cell3.update()) f3 = cell3.getData();

  if (millis() - last >= PERIOD_MS) {
    last = millis();
    sensors_event_t a, g, t;
    mpu.getEvent(&a, &g, &t);
    Serial.print("{\"cells\":["); Serial.print(f1); Serial.print(',');
    Serial.print(f2); Serial.print(','); Serial.print(f3); Serial.println("]}");
    Serial.print("{\"mpu\":{\"accel\":{\"X\":"); Serial.print(a.acceleration.x);
    Serial.print(",\"Y\":"); Serial.print(a.acceleration.y);
    Serial.print(",\"Z\":"); Serial.print(a.acceleration.z); Serial.println("}}}");
  }

  // commandes du PC : "t1", "t2", "t3" (tare d'une jauge) ou "t-" (les trois)
  if (Serial.available() >= 2 && Serial.read() == 't') {
    switch (Serial.read()) {
      case '1': cell1.tareNoDelay(); break;
      case '2': cell2.tareNoDelay(); break;
      case '3': cell3.tareNoDelay(); break;
      case '-': cell1.tareNoDelay(); cell2.tareNoDelay(); cell3.tareNoDelay(); break;
    }
  }
  if (cell1.getTareStatus()) Serial.println("{\"msg\":\"Tare 1 complete\"}");
  if (cell2.getTareStatus()) Serial.println("{\"msg\":\"Tare 2 complete\"}");
  if (cell3.getTareStatus()) Serial.println("{\"msg\":\"Tare 3 complete\"}");
}