Den Code den Du angegeben hast, kann ich so nicht prüfen,
Bei Verwendung von newping.h gehört der Aufruf von sonar.ping(); innerhalb der void loop(); und es muß zwichen zwei Aufrufen mindesten 29ms vergehen, was in den Beispielcodes per Delay gelöst wird.
Ob Du die Randbedingungen einhält oder nicht ist aus Deinem Code nicht erkennbar.

Bei dem IF Konstrukt wird geprüft ob us1 kleiner 16 ist. Die Zählschleife, erhöht bei jedem Durchlauf us1 um 1, bis us1 > 30 ist. Ein vergleich des tatsächlichen Messwerts mit einem Sollwert findet nicht statt.
Also: Messe us1, setze us1 gleich us1 geteilt durch roundtrip, wenn us1 kleiner 16 ist zähle us1 hoch bis us größer 30 ist.

Was Du für Ausgänge setzt, beachte ich absichtlich nicht, denn die Motoren sind physikaliach vorhanden, haben also Masse und Trägheit.
Du kannst ja mal eine For Schleife nehmen und bei jedem Durchlauf den Wert der Zählervariable mit serial.print ausgeben.
Von 16 bis 30 zu zählen dauert nur ein paar Nanosekunden da hat sich kein Motor auch überhaupt nur angefangen zu drehen bis die Abbruchbedingung erfüllt ist.

Für einen Soll-Ist Vergleich ist ein Zählschleife so nicht zu gebrauchen.

Also ergeben sich folgende Fragen:
- Wie implementierst Du die minimale Wartezeit von 29ms die sonar.ping(); benötigt?
- Was hattest du vor mit der Zählschleife an dieser Stelle zu erreichen?
- Warum enthällt der Else Zweig eine entgegengesetzte Drehung wie die Zählschleife die im IF Zweig steckt? (Das würde den Roboter doch grade wieder in das Hinderniss hineindrehen.)

Eine gleichzeitige Überprüfung (z.B. mit switch case) wäre sinnvoller, um ein Festfahren in einer engen Bucht zu verhindern, da kann in einem Entscheidungskonstrukt auf alle Sensoren Rücksicht genommen werden, und je nach Fall entschieden werden, ob Linksdrehen, Rechtsdrehen oder Rückwärtsfahren sinnvoller ist.
Bei sequentieller Auswertung und Reaktion, sind diese Teile unabhängig voneinander.
Wird also erst links ein Hinderniss erkannt und nach rechts gedreht und dann rechts ein Hinderniss erkannt und nach links gedreht, hängt der Roboter in einer Loop aus der er selbst nicht mehr rauskommt.
Ein Gedächtniss (Merker) die es ihm erlauben zu erkennen, das er die selbe Handlung grade schon mal durchgeführt hat ohne das es Erfolg brachte ist also sinnvoll um ein Verzweigen in andere Verhaltensmuster zu ermöglichen.