Was mir persöhnlich an dem Code nicht gefällt, ist die verwendung der vielen Delays
delay()
delayMicroseconds()
PulseIn()
sind ja alles Befehle die das Programm solange anhalten bis sie fertig sind.
Das wird also ein extrem langsam reagierneder Roboter.
Da der Prozessor die meiste Zeit damit verbringt zu warten.
Duch geschickte Programmierung und Verwendung von Interrupts und Timern sowie Vergleichen, kann mann das Programm weiterlaufen lassen und somit auch andere Aufgaben ausführen.
Soll der Roboter also später mehr Funktionern bekommen wäre es sinnvoll sich frühzeitig mit den anderen Möglichkeiten zu befassen, bevor man sehr viel komplett neu entwickeln muß.

Ist halt meine persöhnliche Meinung.

Momentan lasse ich mit einem Arduino Nano, zwei hc-sr04 auf zwei RC-Microservos, drei IR Reflexlichtschranken (Für Linienfolger), 4 Schalter (Bumper für Kolisionserkennung) und zwei gehackte RC-Servos (als Getriebemotoren für die Räder), laufen.
Das sind 4 Ausgänge für die RC-Servos, 2 Ausgänge für die Trigger der HC-SR04, die beiden Interrupteingänge für die HC-SR04, 3 Digitaleingänge für die IR-Lichtschranken, und ein Analogeingang für die Bumper (ein Widerstandsnetzwerk generiert verschiedene Spannungen für die Schalterkombinationen).
Als nächstes kommt Odometrie hinzu womit nochmal 4 Digitaleingänge belegt werden.
Da der dann nicht ständig Denkpausen einlegen soll, gibt es bisher im Code kein einziges Delay.
Und es soll auch keins hinzukommen.