Hallo!
Ich habe ein Projekt mit einem ESP32 und dem 9Dof-LSM303, und will den Öffnungswinkel herausfinden. Das habe ich mithilfe des Magnetometers gemacht, indem ich den geschlossenen Wert einlese und von dem die Referenz nachher nimm. Jetzt ist das Problem aber so das bei jedem Fenster ein anderer winkel angezeigt wird. Teilweise wird 90 ° angezeigt wo 90° sein sollte, aber manchmal zeigt er nicht 90° an sondern so 50...
Ich hoffe mir kann jemand weiterhelfen
Grüsse leon
// Berechnung des offenen Zustands mit X- und Z-Werten des Magnetometers
String getWindowOpenState(sensors_event_t magEvent, float openAngle, bool isTilted) {
// Berechne den Rohwinkel aus den Magnetometerdaten
float rawAngle = atan2(magEvent.magnetic.z, magEvent.magnetic.x) * (180.0 / M_PI);
// Berechne den relativen Winkel, indem der Startwinkel abgezogen wird
float relativeAngle = rawAngle - startAngle;
// Stelle sicher, dass der relative Winkel immer im Bereich von -180 bis 180 bleibt
while (relativeAngle > 180) relativeAngle -= 360;
while (relativeAngle < -180) relativeAngle += 360;
// Berechne den absoluten Wert des Öffnungswinkels
openAngle = fabs(relativeAngle) ;
// Wenn das Fenster geneigt ist, wird der Öffnungswinkel angepasst
if (isTilted) {
if (lastOpenAngle < minOpenAngleThreshold) {
lastOpenAngle = 0.0;
}
openAngle = lastOpenAngle;
} else {
lastOpenAngle = openAngle;
}
// Wenn der Öffnungswinkel den Schwellenwert überschreitet, wird der Zustand als "Offen" betrachtet
return (openAngle > magOpenThreshold) ? "Offen" : "Geschlossen";
}