Hallo!
Der Code hatte das Problem, dass die Verwendung von int und float Variablen zu Präzisionsverlust und falschen Berechnungen führte. Durch die Änderung von Gradkorrektur zu float bleibt die Präzision erhalten. Die Verwendung von 100.0 anstatt 100 sorgt dafür, dass die Division als Float-Division behandelt wird. Dadurch werden die Werte korrekt berechnet, und Gradkorrektur liefert die erwarteten Ergebnisse.
Korrigierte Version deines Codes:
// Variablen für Potentiometer
int Potentiometerwert = 0;
int Potentiometerminimum = 125;
float Potentiometerproz = 0;
int Potentiometeranz = 0;
int Potentiometermax = 896 - Potentiometerminimum;
int Potentiometerdifferenz = 0;
float Gradkorrektur = 0; // Ändere dies zu float
// Potiprozente berechnen
Potentiometerwert = analogRead(A6);
Potentiometerdifferenz = Potentiometerwert - Potentiometerminimum;
Potentiometerproz = 100.0 / Potentiometermax * Potentiometerdifferenz; // Verwende 100.0 für float Division
Potentiometeranz = 100 - Potentiometerproz; // Lass Potentiometerproz als float
Gradkorrektur = Potentiometeranz - 50.0; // Verwende float subtraction
// Ausgabe zur Überprüfung
Serial.print("Potentiometerwert: ");
Serial.println(Potentiometerwert);
Serial.print("Potentiometerdifferenz: ");
Serial.println(Potentiometerdifferenz);
Serial.print("Potentiometerproz: ");
Serial.println(Potentiometerproz);
Serial.print("Potentiometeranz: ");
Serial.println(Potentiometeranz);
Serial.print("Gradkorrektur: ");
Serial.println(Gradkorrektur);
~ Mr.Callidus