Ja, funktioniert, Akte kann geschlossen werden.
Der Code ist Mist.
a) was soll das
if(a >= 280) s = - a + 500 ;
gibt es einen Grund diese Unlinearität zu machen?
b) der uC "kann" natürlich keine Fließkommazahlen, sondern das macht
eine C-Bibliothek für dich, die Fließkomma mit Integer macht ->
furchtbar langsam.
Du willst doch eigentlich nur einen Eingangswert a, der von 300 bis 0
läuft auf einen Ausgangswert s, der von 200 bis 550 läuft linear
skalieren.
Wie du richtig erkannt hast, ist der Faktor dieser Funktion 350/300, was
man gleich mal auf 7/6 kürzen kann.
Damit ergibt sich die Funktion, die deine Umrechnung komplett in Integer
und auch komplett linear macht:
s = 550 - ((a * 7) / 6);
Ohne if's und but's.