Hallo,

Code:
dtostrf(erg,7,3,buf);
[...]
usartprint(buf,8);
also das gibt bei einem 16bit Wert sonstwas aus, aber sicherlich kein brauchbares Ergebnis. Warum nicht ein einfaches printf, das tut's mit Sicherheit besser.

Die I2C-Routinen sehen sehr komplex aus, aber wozu in den beiden Riesen-switches die Moduladresse (sla) nach adr konvertiert wird (mit offensichtlichem Doppelfehler bei 0xf6) habe ich bis jetzt noch nicht verstanden. Aber die Routinen sollten so eigentlich funktionieren.
Wichtig ist beim Lesen des Entfernungswertes, dass der Wert als 16bit Wert zur Verfügung gestellt wird, deshalb sind 2 Leseoperationen notwendig (fortgesetztes Lesen funktioniert auch).

HTH und Viele Grüße
Jörg