So mit der Elektronik ging es nun auch endlich weiter.
Ich habe das bisherige Programm einmal komplett auf den Kopf gestellt.
Noch ist es nicht fertig aber es funktioniert schonmal das meiste am lebenden Objekt.
Ich denke es wird im Lauf der Zeit auch stetig erweitert werden, um neue Funktionen je nach Anforderungen, die sich ergeben.
Was ich grundlegend geändert habe ist der Aufbau. Ich habe das Programm in einzelne Dateien mit spezifischen Aufgaben unterteilt. Damit will ich den Code übersichtlicher gestalten.
Mir ist es sehr wichtig eine gute übersicht zu haben, um den Code auch in Zukunft gut verstehen zu können.
Wie gehabt findet sich der aktuelle Stand auf GitHub:
Lkw Funktionsmodul
https://github.com/SheepCreativeSoftware/truckLightAndFunction
Trailer Funktionsmodul
https://github.com/SheepCreativeSoftware/trailerLightAndFunction
Rundumleuchtenmodul
https://github.com/SheepCreativeSoftware/truckBeaconLightModule
So gibt es nun in allen Programmen eine config.h Datei in welcher grundlegende Konfiguration für das jeweilige Modell vorgenommen werden kann.
Dann gibt es die ioMapping.h in welcher die I/Os des arduinos zugeordnet werden.
Die Auswertung des PPM Signals habe ich etwas überarbeitet, um möglichst effizient diesen Code abzuarbeiten. Da es bei interrupts wichtig ist, diese schnell wieder zu beenden. Das geht sicher noch besser, aber das Ergebnis ist aktuell mehr als zufriedenstellend.
Die Idee den Lenkservo für den Blinker zu nutzen habe ich verworfen, da ich ohnehin nur einen 3 Positions-Schalter dafür vorgesehen habe und mir das so besser gefallen hat. Stattdessen Werte ich den schaltkanal der Soundelektronik aus, um alle Lichter zu dimmen wenn der Anlasser angeht. Das funktioniert auch schon gut, aber es fehlt noch an Feinheiten.
Der Starter des Soundmodul reagiert unterschiedlich in Abhängigkeit, wie lange der Taster gedrückt wird. Diese Feinheiten muss ich noch mit in Bezug setzen. Außerdem wird auch gedimmt beim Ausschalten, was mit noch nicht gefällt.
Grundlegende Funktionen fürs Licht sind jetzt implementiert:
- Alle Lichtausgänge lassen sich individuell dimmen.
- Alles Ausgänge gehen mit leichtem Glimm Effekt an und aus (ähnlich einer glühbirne)
- Standlicht
- Ablendlicht (im Fall des SK kombiniert mit Standlicht via Dimmung)
- Fernlicht (kombiniert mit Ablendlicht oder einzeln)
- Fernlicht Lichthupe über separaten Taster (eine Art blink Effekt solange gehalten wird)
- Nebelscheinwerfer
- Blinker in jede Richtung inklusive Warnblinker (warnblinker hat Priorität)
- Blinker beginnt und endet immer mit einer vollständigen blinkphase (Blinker wird nicht während der Leuchtdauer unterbrochen).
- Rundumlicht Ein/Aus
Darüber hinaus habe ich ein Kommunikations Treiber geschrieben für je Master und Slave.
Aktuell kommuniziert nur der Master (Truckmodul) und ein jeweiliger Slave antwortet nicht auf ein Telegramm. Es ist schlicht nicht notwendig die Antwort zu bekommen und es ist mir wichtig vom Master möglichst in kurzen Zeitabständen Daten zu senden (um kritische Dinge, wie den Blinker, synchron zu halten).
Das Telegram was gesendet wird ist relativ simpel und schlank in einzelne Bytes aufgebaut.
1. Byte Funktionscode
2. Byte Daten (kann mehr als ein Byte sein)
3. zweit letztes und letztes Byte sind eine CRC Prüfsumme gebildet aus allen Bytes des Telegramms
So wird es verschiedene Funktionscode für verschiedene Arten von Funktionen geben, welche gesendet werden können.
Zum aktuellen Zeitpunkt gibt es nur einen aktiven Functionscode für Lichtfunktionen.
Dieses ist ein Byte, welches Binär auf den 8 Bits die einzelnen Funktionen abbildet.
Bit 0: Standlicht
Bit 1: Bremslicht
Bit 2: Rückfahrlicht
Bit 3: Blinker Rechts
Bit 4: Blinker Links
Bit 5: Zusatzlicht
Bit 6: Rundumlicht
Bit 7: Starter Dimmfunktion aktiv
Jedes Telegramm hat einen Versatz von wenigen Millisekunden zueinander. So ist es dem Slave möglich, den Start des Telegramms zu erkennen.
Die beiden Module für Rundumlicht und den Auflieger benötigen aktuell nur dieses Telegramm, um ihre Funktionen abzubilden.
Hier Mal eine Vorführung der Funktionen von vorne (Dimmfunktionen sind leider schwer zu filmen; daher kann es hier und da auch Mal flackern, was es in echt nicht tut).
Besonders gut sieht man hier auch, wie schnell das Licht angeht, nach betätigung des Schalters.
Zu Anfang sieht man eine Failsafe Funktion, welche aktuell nur den Warnblinker aktiviert und alles abschaltet.
Und von hinten. Hier sieht man das Zusammenspiel mit dem Auflieger. Man muss wirklich sehr gezielt kucken um eine Verzögerung zu erkennen, die fast nicht existent ist.
- - - Aktualisiert - - -
Ich wollte noch ein drittes Video mit der Dimmfunktion zeigen, aber ich bekomme immer den Fehler, dass ich nur 3 Videos Posten darf. Und in der Nachricht steht immer der Text vom vorherigen Beitrag.
Naja ich Versuch das zu späterer Zeit nochmal.
Ansonsten war's das fürs erste.
Mal schauen wie ich in nächster Zeit weiter komme, es steht privat nämlich ein Umzug an (aber dafür mit zukünftig besseren Möglichkeiten fürs Hobby
)