Fahrzeugelektrik mit Arduino steuern

Mahlzeit,
kurz zu meinem Wissensstand, in der Uni mal C+ programiert aber nur mit viel Abschreiben bestanden. if else sind grob bekannt mehr leider nicht. Durch Videos und Lesen wirds nicht wircklich besser...
Daher kommen die Codes vom Chatbot.

Zum Projek:
Es wird eine BMW R 65 bj. 1979 zu einer Sportenduro Rally Enduo umgebaut.
Um die Uralten Schalter und den massigen Kabelbaum zu verschlanken möchte ich die Beleuchtung über einen Arduino Nano steuern. Hierzu habe ich schon den Schaltplan gezeichnet.
Der Arduino bekommt die Signale von Tastern am Lenker und soll Relais im Arbeitskreis schalten.
Das ganze wird modular aufgebaut, die einzelnen Komponenten werden mit Superseal Steckern miteinander verbunden. Wenn ein Teil aufgibt kann es so schnell getauscht werden.

Zu meinem Problem:
Ich habe angefangen da Program zusammen zu basteln. Leider klappt das Blinken und die Warnblinkanlage nicht.
Beim blinken Taster drücken Ausgang soll blinken bis Taster wieder gedrückt.
Bei der Warnblinkanlage soll Taster für blinker link und Rechts gedrückt werden, bis Taster links gedrückt wird.

Angehängt habe ich mal den Code.

Über Tipps und hilfe würde ich mich sehr freuen.

Gruß Michal

const int BLR = A0;
const int BLL = A1;
const int Hupe = A2;
const int FernL = A3;
const int Licht = A4;
const int BrLi = A5;
const int FlutL = A6;


const int AusgBLR = 2;
const int AusgBLL = 3;
const int AusgHupe = 4;
const int AusgFernL = 5;
const int AusgLicht = 6;
const int AusgBrLi = 7;
const int AusgFlutL = 8;


void setup() {
  // put your setup code here, to run once:
  pinMode(BLR, INPUT);
  pinMode(BLL, INPUT);
  pinMode(Hupe, INPUT);
  pinMode(FernL, INPUT);
  pinMode(Licht, INPUT);
  pinMode(BrLi, INPUT);
  pinMode(FlutL, INPUT);
  pinMode(AusgBLR, OUTPUT);
  pinMode(AusgBLL, OUTPUT);
  pinMode(AusgHupe, OUTPUT);
  pinMode(AusgFernL, OUTPUT);
  pinMode(AusgLicht, OUTPUT);
  pinMode(AusgBrLi, OUTPUT);
  pinMode(AusgFlutL, OUTPUT);
}
// für Warnblinkanlage
bool flashingWARN = false;         // Flag, um zu speichern, ob die AusgBLR und der AusgBLRL gerade blinken
bool BLRPressed = false;           // Flag, um zu speichern, ob der BLR gedrückt wurde
unsigned long flashStartTime = 0;  // Zeitpunkt, zu dem das Blinken gestartet wurde

// Warnblinker ENDE

// Blinker Rechts
bool flashingBLR = false;  // Flag, um zu speichern, ob der AusgBLR gerade
// Blinker Rechts ENDE

// Blinker Links
bool flashingBLL = false;  // Flag, um zu speichern, ob der AusgBLL gerade blinkt
// Blinker Links ENDE

void loop() {
  // Blinker Rechts
  {
    if (digitalRead(BLR) == HIGH) {  // Prüfe, ob der BLR gedrückt wurde
      flashingBLR = !flashingBLR;    // Schalte den flashingBLR-Flag um
      if (flashingBLR) {             // Wenn der flashingBLR-Flag gerade gesetzt wurde...
        flashStartTime = millis();   // Speichere den Zeitpunkt, zu dem das Blinken gestartet wurde
      }
    }
    if (flashingBLR) {                                   // Wenn der flashingBLR-Flag gesetz
      unsigned long currentTime = millis();              // Aktuelle Zeit in Millisekunden
      if (currentTime - flashStartTime >= 1000) {        // Wenn seit dem Start des Blinkens mehr als 1 Sekunde vergangen ist...
        digitalWrite(AusgBLR, HIGH);                     // Schalte den AusgBLR ein
        flashStartTime = currentTime;                    // Aktualisiere den Zeitpunkt, zu dem das Blinken gestartet wurde
      } else if (currentTime - flashStartTime >= 500) {  // Wenn seit dem Start des Blinkens mehr als 0,5 Sekunden vergangen sind, aber weniger als 1 Sekunde...
        digitalWrite(AusgBLR, LOW);                      // Schalte den AusgBLR aus
      }
    }
  }

  // Blinker Links

  {
    if (digitalRead(BLL) == HIGH) {  // Prüfe, ob der BLL gedrückt wurde
      flashingBLL = !flashingBLL;    // Schalte den flashingBLL-Flag um
      if (flashingBLL) {             // Wenn der flashingBLL-Flag gerade gesetzt wurde...
        flashStartTime = millis();   // Speichere den Zeitpunkt, zu dem das Blinken gestartet wurde
      }
    }
    if (flashingBLL) {                                   // Wenn der flashingBLL-Flag gesetzt ist...
      unsigned long currentTime = millis();              // Aktuelle Zeit in Millisekunden
      if (currentTime - flashStartTime >= 1000) {        // Wenn seit dem Start des Blinkens mehr als 1 Sekunde vergangen ist...
        digitalWrite(AusgBLL, HIGH);                     // Schalte den AusgBLL ein
        flashStartTime = currentTime;                    // Aktuelle Zeit
      } else if (currentTime - flashStartTime >= 500) {  // Wenn seit dem Start des Blinkens mehr als 0,5 Sekunden vergangen sind, aber weniger als 1 Sekunde...
        digitalWrite(AusgBLL, LOW);                      // Schalte den AusgBLL aus
      }
    }
  }


  // Hupe

  if (digitalRead(Hupe) == HIGH) {  // Prüfe, ob der Button gedrückt wurde
    digitalWrite(AusgHupe, HIGH);   // Schalte die LED ein
  } else {
    digitalWrite(AusgHupe, LOW);  // Schalte die LED aus
  }

  // Fernlicht

  if (digitalRead(FernL) == HIGH) {                    // Prüfe, ob der Button gedrückt wurde
    digitalWrite(AusgFernL, !digitalRead(AusgFernL));  // Schalte die LED um
  }

  // Licht

  if (digitalRead(Licht) == HIGH) {                    // Prüfe, ob der Button gedrückt wurde
    digitalWrite(AusgLicht, !digitalRead(AusgLicht));  // Schalte die LED um
  }

  // Bremslicht

  if (digitalRead(BrLi) == HIGH) {  // Prüfe, ob der Button gedrückt wurde
    digitalWrite(AusgBrLi, HIGH);   // Schalte die LED ein
  } else {
    digitalWrite(AusgBrLi, LOW);  // Schalte die LED aus
  }

  // Flutlicht

  if (digitalRead(FlutL) == HIGH) {                    // Prüfe, ob der Button gedrückt wurde
    digitalWrite(AusgFlutL, !digitalRead(AusgFlutL));  // Schalte die LED um
  }

  // Warnblinker

  if (digitalRead(BLR) == HIGH && digitalRead(BLR) == HIGH) {  // Prüfe, ob der BLR und der BLRL gedrückt wurden
    if (BLRPressed) {                                          // Wenn der BLR zuvor nicht gedrückt war...
      flashingWARN = !flashingWARN;                            // Schalte den flashing-Flag um
      if (flashingWARN) {                                      // Wenn der flashing-Flag gerade gesetzt wurde...
        flashStartTime = millis();                             // Speichere den Zeitpunkt, zu dem das Blinken gestartet wurde
      }
      BLRPressed = true;  // Setze den BLRPressed-Flag
    }
  } else {
    if (BLRPressed) {        // Wenn der BLR zuvor gedrückt war...
      flashingWARN = false;  // Setze den flashing-Flag zurück
      BLRPressed = false;    // Setze den BLRPressed-Flag zurück
    }
  }
  if (flashingWARN) {                            // Wenn der flashing-Flag gesetzt ist...
    unsigned long currentTime = millis();        // Aktuelle Zeit in Millisekunden
    if (currentTime - flashStartTime >= 1000) {  // Wenn seit dem Start des Blinkens mehr als 1 Sekunde vergangen ist...
      digitalWrite(AusgBLR, HIGH);               // Schalte den AusgBLR ein
      digitalWrite(AusgBLL, HIGH);               // Schalte den AusgBLRL ein
      flashStartTime = currentTime;              // Aktualisiere den Zeitpunk
    }
  }
}

Hier noch der Schaltplan für das Projekt.

Vergiß es.
Wenn das Motorrad kein Schaufensterobjekt ist oder werden soll, kannst Du damit nicht fahren oder auf öffentlichen Straßen dieses überhaupt schieben.
Bei jedem Umbau erlischt die Zulassung.

Grüße Uwe

Warum sollte die Zulassung erlöschen, das ist totaler Blödsinn.
Wenn ich ein die Motogadget Unit einbaue sagt ja auch keiner was .

Wenn Du das nicht wahrhaben willst dann mach es doch aber frag uns nicht Dir zu helfen.
Grüße Uwe.

Erklähr es mir doch, anscheinend hast du andere Quellen...

Es gibt keinen Kabelbaum mehr bzw der lieg schon lange auf dem Müll.

Es gibt ja das hier

aber die 400€ sind mir etwas zu viel, daher wollte ich es selber bauen, nur mit dem Program komme ich nicht so klar. Thema zuverlässigkeit ist bedacht und bewertet, daher Frage ich hier.

PS das ist das fragliche Gefährt. Die Elektrik muss bis März stehen, dann gehts zum TÜV.

Ausgeschlossen.
Ebenso wie die blue.moto wäre Dein Bau eintragungspflichtig, da sonst die Betriebserlaubnis erlischt.
Du wirst den Nachweis bis dahin nicht erbringen können, das Dein Bau fehlerfrei läuft. Die Kosten für ein Prüfverfahren bei einer akreditierten Stelle übersteigen zudem die 400 Euro für das gekaufte Teil um ein weites.
Ich hatte irgendwann mal im letzten Jahr einen fernbedienbaren Truck(?) mit genausowas in der Mache. Such in meinen Posts. Irgendwo findet sich da was....

Vielen Dank von den netten Tüv Sachverständigen.

Kann mir vielleicht jemand bei meinem genannten Problem helfen?

Ich hab doch geschrieben, Du sollst in meinen Posts nach einem Truck-Projekt suchen. Hast Du gemacht? Und warum nicht? Search results for ' @my_xy_projekt truck' - Arduino Forum
Ja, den Blinker musst Du da rausfummeln.
Und nachlesen solltest Du ggfls. auch etwas. Aber da steht alles drin, wie das geht.

Wenn Du das extrahiert hast, was Du für wichtig hälst und dann Fragen hast, frag.

Hallo Michal

Schaue dir am Besten dazu das EVA-Prinzip an.

Input: Schalter einlesen
Processing: Schalter auswerten und Aktionen daraus festlegen
Output: die Ausgänge gemäß den Aktionen ansteuern

Ich wünsche einen geschmeidigen Abend und viel Spass beim Programmieren in C++.

Gleich bei meinem ersten Käfer habe ich an der Elektrik gebastelt. Ein Nachbar gab mir den Rat, vorher beim TÜV zu fragen, was erlaubt ist. Der Prüfer freute sich über meine Frage und meine Bastelei wurde gleich beim ersten Mal durchgewunken. Das ist jetzt ein paar Jahrzehnte her.

Dinge ändern sich, aber den Rat meines Nachbarn gebe ich gerne an Dich weiter.

Ja gerne, meine Hilfe lautet: Dein Plan ist Murks!

Ich könnte Dir mehrere Gründe aufzählen, aber vermutlich wirst Du mir keinen Glauben schenken. Daher frage bitte jemanden, der das Wissen hat und dem Du vertraust.

Das Programm wäre die kleinste Hürde.

Wenn DAS der vollständige Schaltplan sein sollte, wünsche ich dir viel Spaß dabei, alle Nase lang Arduinos zu ersetzen.
Es gibt keine saubere Spannungsversorgung, die in einem KFZ länger funktionieren würde, dann sind die Eingänge überhaupt nicht geschützt und vom Anschluss der Reials will ich noch nicht einmal reden.

Jemand, der schon länger Schaltungen entwickelt und auch weiß, worauf es im KFZ-Bereich ankommt, wird die Schaltung vermutlich in weniger als einem Monat entwickeln können, so daß sie sicher funktioniert. Aber wie lange es dauert, eine Betriebserlaubnis dafür zu bekommen, kann ich nicht sagen.

Für einen absoluten Anfänger halte ich es für unmöglich, innerhalb von 3 Monaten eine sicher funktionierende Schaltung hinzubekommen.

Wenn die m.unit eine ABE hat, sehe ich gute Chancen, daß der TÜV das Ganze abnimmt. Vorausgesetzt, auch die Verdrahtung ist ordentlich gemacht.
Wenn die ABE fehlt, wird dich der Prüfer zurecht wieder nach Hause schicken.

Ich will ja nicht schwarzmalen, aber es könnte das passieren was bei unserem Fahrzeug passiert ist.
Mein Chef ist nach einem Motorradunfall ein wenig körperlich eingeschränkt. Also haben wir ein Fahrzeug umgebaut und auch teilweise mit selbstgebauter Elektronik nachgerüstet. Das Ergebnis der Überprüfung beim TÜV-Süd war ein Angebot über eine EMV Prüfung beim TÜV in Straubing über 3415 Euro + MwSt.!

Da es sowas wie er braucht nicht gibt, müssen wir das wohl machen. Hoffentlich geht das Ding beim ersten Mal durch die EMV Prüfung, sonst müssen wir das wiederholen...

Wartezeit für solche speziellen Sachen beim TÜV-Süd derzeit rund 3-4 Monate...

Gruß, Jürgen

Leute kommt mal wieder ein wenig runter, - und vor allem: interpretiert nicht irgendwelche Sachen in die "TüV Geschichte" rein die so nicht stimmen.
Kabel, Blech und ähnliche Dinge dürfen sehr wohl ersetzt werden ohne dass dafür eine ABE vorliegt. Den Kabelstrang erneuern (auch wenn er anders wird als der Originale) ist kein Problem.

Wo Ihr recht habt, das ist die Blinker Geschichte, - die ist so nicht zulässig, denn für die Warnblinkfunktion muss definitiv ein eigener Schalter vorgesehen sein.
Ob die Ausführung der Schalter als Taster zulässig ist, - da bin ich nicht sicher, ich denke aber eher nicht.
Aber alles andere ist pillepalle und wie lange die Schaltung überlebt ist dem TüV relativ egal. Alles was umgebaut wird muss halt der Strassenverkehrszulassungsordnung entsprechen.

Es geht hier um ein KFZ Bj 1979, zu der Zeit hatten Fahrzeuge noch fast keine Elektronik die "ABE relevant" war, weil üblicherweise die komplette Motor- und Fahrzeugsteuerung noch mechanisch erfolgte. (Wenn die neu eingebaute Steuerung daran etwas ändert ist das allerdings eine andere Geschichte...)
Es geht hier um einen Oldtimer, für welche sehr häufig keine den Original entsprechenden Ersatzteile mehr verfügbar sind. Solche nicht mehr verfügbaren Teile durch modernere zu ersetzen gilt als Reparatur, was bei nicht unmittelbar sicherheitsrelevanten Bauteilen (wie Bremsen oder Fahrwerksteilen) zulässig ist.
Wäre das nicht so, würden mindestens 90% der Oldtimer die herumfahren dies "ohne Zulassung" tun... ;-))

Und falls es jemand interessiert: Das letzte Fzg. das ich mit vollkommen runderneuerter Elektrik (nicht nur) durch den TüV bekommen habe war im September letzten Jahres ein Eicher Bj. 1958

Nicht ohne Grund schreibt u.a. motogadget, das die Box EINTRAGUNGSPFLICHTIG ist.
Also egal wie. Das Teil kommt in seiner Selbstbauversion nicht durch den TÜV ohne entsprechende Nachweise.

Hier 2 Taster als Warnblinkanlage an einer BMW R1200 GS Adventure von 2007.

Ich habe mittlerweile 10 motogadget an ähnlichen Umlauten zu Sportenduros aus 2 Ventilern gemacht alle mit Einzelabnahme darunter eine für den Prüfer, solange die Anlage funktioniert muss nix eingetragen werden.

ABER egal ich habe anderweitig Hilfe bekommen.
Danke für, naja nichts.

Das sieht der Hersteller offensichtlich anders

Und der TÜV wohl auch:

Wenn Du Deinen Arduino da eingebaut und der einer Einzelabnahme unterzogen wurde, meld Dich bitte nochmal.
Das würde ich gerne live sehen wollen.

Nur jetzt nach dein Umbau fällt das nicht mehr unter Bestandschutz, somit gelten heutige Vorschriften, hier ist der Haken. Schätze mall in 90% ist die Arbeit um sonst

und wie macht man aus den 10% wieder 100%?