Hallo zusammen,
@Rolf: Ich hatte - wie wohl jeder, der die Arduino-Welt kennenlernt, mit der Arduino-IDE begonnen. Verwöhnt von Eclipse/Java suchte ich immer nach einer besseren IDE und probierte Slober aus. War etwas zickig, ging aber prinzipiell. espressifs Original-IDE habe ich nicht zum Laufen bekommen. Jetzt bin ich bei PlatformIO (auf Basis von Visual Studio Code/VSC) gelandet. Was mir hier gut gefällt ist das automatische Installieren aller Abhängigkeiten (Boardmanager, Libraries) und die Github-Integration. Debuggen geht wohl auch, ich finde auch das von dir genannte JTAG (https://docs.platformio.org/en/latest/pl...mex-arm-usb-ocd) beschrieben. Gut, dass du mich auf die vermutete Nicht-M5Stack-Kompatibilität hinweist, dieses Board fehlt auch in der verlinkten Liste, leider. Du hast recht, erst mit Debuggen ist man so richtig leistungsfähig. Klar, mit einem normalen ESP32 könnte ich es testen, aber ich brauche halt auch die Peripherie (TFT, Buttons, Encoder) - das würde ein Krampf werden ...
Das mit dem Programmieren war auf CV-Programmierung gemünzt, die Franky demnächst kann. Programmieren für den Anwender wird dadurch "unterstützt", dass jeder den Quellcode haben kann und selbst modifizieren. Allerdings ist Franky gewuchert, den Code finde ich nicht mehr schön. Ich mache gerade einen objektorientierteren Ansatz, der ist besser verständlich und wartbar.
@Bernhard: Leider äußert sich der Fehler genau so, wie du es beschrieben hast. Ich mag ihn genausowenig wie du. Die Erklärung folgt unten. Im parallel angefangenen Franky2 wird das anders sein: man kann mit einer einzigen Taste wechseln zwischen "Franky bremst/beschleunigt" und "die gewählte Fahrstufe wird genau so ausgeführt". Ersterer Modus wird, so lang mir nichts besseres einfällt, sich noch fehlerhaft verhalten, siehe aber unten für eine Lösungsdiskussion. Zweiterer Modus ist wie ein normaler Handregler. Mit diesem Modus fahre ich gerade. Dazu habe ich bei einer Lok CV3 und CV4 auf 0 gesetzt. Mit einem normalen Handregler lässt sich dei Lok so nicht ruckfrei fahren, da z.B. bei der Multimaus nur eine halbe Drehung des Knopfes für 126 Fahrstufen herhalten muss - und - die Multimaus keinen Encoder benutzt sondern ein schlichtes Drehpoti, d.h. man kann hier überhaupt gar nicht lückenlose Fahrstufen von 0, 1, 2, 3, 4, ... bis 126 auslösen! Franky hat einen Encoder, der 20 Datenpunkte pro Umdrehung hat. D.h. um auf 126 zu kommen, muss man 6mal drehen. Mir gefällt das immer besser: man schafft es nicht, die Lok ruckelig zu fahren, und kann viel zielgenauer bremsen und beschleunigen (langsamer oder schneller drehen). Ein wenig mehr Grip könnte der Drehknopf haben, aber es gelingt ganz gut, einhändig mit dem Daumen kontinuierlich zu kurbeln ...
@alle: Nun die Erklärung des Problems. Achtung: langer Text und vielleicht schwer verdaulich:
Fahrbefehle seitens Franky auszusenden ist trivial. Aber bei Lokübernahme soll ja nicht von z.B. Fahrstufe 0 gestartet werden, sondern von der aktuellen, mit der die Zentrale die Lok gerade fährt, ausgegeben von einem anderen Handregler. Ferner soll das Display der Lok durch andere Handregler parallel geänderte Fahrstufen auch sofort ausgeben. Wie geht das? Am X-Bus kann sich ein Handregler für solche Notifikationen der Zentrale an ihn anmelden, ferner erhält der Handregler zur durch ihn gefahrenen Lok ohnehin Notifikationen, wenn diese von einem anderen Handregler gefahren wird. Wird eine Lok von einem anderen Regler übernommen, wird das durhc ein Übernahmeflag gekennzeichnet. Ihr kennt das von der Multimaus, wenn das Loksymbol beginnt zu blinken. Soweit so gut.
Nun habe ich leider beobachten müssen, dass die Zentrale nach einer gewissen Zeit (oder Notifikationszahl) aufhört, Franky Notifikationen zu senden. Blöd! Ich will, im Extremfall für immer, für die eingestellte Lok sehen, welche Fahrstufe ihr von einem Fremdregler angewiesen wurde! Ausweg: alle 5 Sekunden (ich könnte die Zeit kürzer oder länger wählen) frage ich den aktuellen Zustand an. Das führt dazu, dass die Zentrale wieder für einen gewissen Zeitraum/Notifikationszahl Franky mit Notifikationen versorgt. ABER. Die letzte Notifikation tut so, als ob die Lok von einem anderen Regler übernommen wurde (Flag ist gesetzt). Das habe ich bei der DR5000 festgestellt. Ich halte das für ein Bug. Deshalb die Frage an euch, bei welcher Zentrale ihr den Fehler seht. Statt zu blinken zeigt Franky die Fahrstufe in blau. D.h. ihr müsstet am Ende der 5 Sekunden eine blaue Fahrstufe sehen.
Warum ist das ein Problem, warum hört Franky auf, weiter zu beschleunigen/zu bremsen? Wenn eine Lok wirklich fremdübernommen wurde, muss Franky aufhören, selbst zu bremsen/zu beschleunigen, sonst würde Franky dem fremden Regler immer querschießen. Und das Unterscheidungskriterium ist eben das Flag. Wenn das also von der Zentrale falsch gesetzt wird, kann Franky nicht unterscheiden, ob die Lok wirklich von einem fremden Regler übernommen wurde oder nicht. Und genau darin liegt das Problem.
Lösung 1: Komplett auf eigenes Bremnsen/Beschleunigen verzichten. Ich weigere mich noch anzuerkennen, dass ich diesen Fehler nicht umschiffen kann.
Lösung 2: Die 5s verlängern. Dann tritt das später auf. Aber auf welche Zeit verlängern? So lang, wie längstens gebremst wird, ok. Aber dann kann wieder passieren, dass die Zentrale weitere Notifikationen nicht schickt und man am fremden Regler dreht und Franky davon nichts mitbekommt. Ein klassischer Zielkonflikt.
Lösung 3: Nur beim Wechsel der Adresse die Lokdaten abfragen (damit nahtlos weitergefahren werden kann). Dann tritt der Fehler nicht auf. Nachteil: wird die Lok fremdgefahren, ignoriert Franky wegen des geschilderten Problems die Aktualisierungen. D.h. Frank wäre z.B. der Meinung, die Lok fährt Fahrstufe 40, der Fremdregler hat aber inzwischen auf 60 erhöt. Franky fährt nun 41 und ein Sprung der fahrenden Lok entsteht. Vor meinem Auge formt sich folgende
Lösung 4: WIrd die Adresse gewechselt, fragt Franky die Lokdaten ab. Das gewährleistet ein nahtloses Weiterfahren. Um dem Stehlen der Lok zu begegnen (der Bediener weiß das ja), kann eine neue, spezielle Taste gedrückt werden, sich die Lokdaten wieder aktuell zu holen. Dann kann wieder nahtlos weitergefahren werden. Dieser zusätzliche Tastendruck stört mich zwar, das wäre aber ein Kompromiss.
Lösung 4 wäre immer noch besser als jeder mir bekannte Lokregler. Auch die Z21-App ist nicht gut darin, Veränderungen durch Fremdregler zu erkennen.
Was meint ihr?