Hi
Wenn Du die Massen (GND/Minus) der verschiedenen Quellen verbindest, sind die Positiven Spannungen überall 'gleich' - da von GND aus 'gesehen'.
Klar: Die 12V bleiben 12V und die 5V bleiben 5V - nur der Bezugspunkt, GND (Ground) muß gleich sein.
Woher diese 5V kommen, ist egal - Hauptsache: Sie sind stabil - der Arduino braucht schon recht 'saubere' 5V.
Ok, fangen wir mit dem Daumengas an - Arduino beliebig bestromen - der Einfachheit halber per USB.
Das Daumengas-Ding bekommt GND, 5V ebenfalls (ist doch 5V??), der Ausgang an einen Analog-IN.
Im Sketch Diesen auslesen - das Maximum und das Minimum mithalten, und per map() auf den von Dir gewünschten Bereich 'aufblasen' - kann aber auch weniger werden.
Wenn der AI-Wert kleiner dem bisher gemessenem MIN-Wert ist, Diesen anpassen.
Gleiches für den MAX-Wert.
Dann outwert=map(analogwert,min,max,minout,maxout);
outwert ist Deine Ausgabe, Das bekommt der PWM oder der DAC.
analogwert der aktuell eingelesene Wert des Daumengas.
min/max die mitgehaltenen min/max-Werte des Daumengas - somit hast Du 100% Regelbereich (ggf. muß man die unteren 1...5% als Tot-Bereich annehmen, damit das Herrentags-Gefährt auch still stehen bleibt, da sich wohl unbetätigt auch einige Hausnummern einschleichen können - vll. glätten per Median?
minout MIndeswert, Der an den PWM/DAC gesendet wird, wird dann wohl 0=Stand entsprechen.
maxout, Gleiches für die andere Richtung, also 'Vollgas vorraus'.
Du schriebst noch, daß Du einen Rückwärtsgang 'gerne hättest' - habe ich zumindest so gelesen - wie willst Du die Fahrtrichtung umschalten?
Bis 6km/h sind - meines Wissen - sämtliche Gefährte führerscheinfrei auch auf öffentlichen Straßen fahrbar - natürlich nicht auf Kraftstraßen/Autobahnen.
Löse die Probleme einzeln - wie der DAC/PWM-Wert später zum Stell-Signal der Steuerung wird, ist eine ganz andere Baustelle.
Bremse: Du fragst die Bremse ab - wenn gebremst wird, Output auf outmin.
Sonst per map auf den gemapten Wert.
Das Ganze von Anfang an OHNE delay() oder andere blockierende Umwege - Deine loop() soll nahezu keine Zeit pro Durchlauf brauchen - in jedem Durchlauf wird erneut entschieden, was gemacht werden soll - Du wirst wohl nicht >>1000x die Sekunde das Daumengas auslesen müssen, auch das Umstellen des Ausgang macht nur Sinn, wenn was zu Ändern ist.
Alles, was Du nicht machst, braucht (nahezu) keine Zeit, oder eben erst, wenn Du Das machst.
MALE Dir auf, wie der Ablauf sein soll - dort kannst Du Fehler einfacher identifizieren.
MALE Dir darin ebenso auf, unter welchen Umständen Du zu einem anderen Bereich 'springst'.
Wenn hier Probleme auftreten: Vereinzele die Probleme - je kleiner die einzelnen Probleme sind, desto einfacher lassen Die sich lösen.
Dann bist Du schon recht nahe an einer State-Maschine, Dein Sketch lässt sich erweitern, ohne die bereits fertigen Funktionen abzuwürgen.
MfG
PS: Bei einem Bollerwagen zur Getränkemitnahme zur Erheiterung des mitlaufenden Bekantenkreis wird's wohl Nix mit blumenpflanzendem GPS-gestützem Gartenveränderungs-Gerät - vermindert wohl den WAF wieder etwas ... aber irgend was ist ja bekanntlich immer 