Hallo Klaus,
Zitat
Ich bitte sehr um Entschuldigung für deinen Aufwand. Tut mir echt leid.
Da mach dir mal keinen Kopf, Fehler passieren halt. Das war für mich ja jetzt auch kein Aufwand, meine neue Test-HW musste ich ja eh testen.
Zu den anderen beiden Punkten bin ich auch schon weiter gekommen:
Drehencoder:
Mit einem anderen Encoder hatte ich jetzt auch kein ganz zuverlässiges Erkennen, wenn auch nicht so wie bei Dir. Schritt für Schritt ging recht gut. Bei schnellem Drehen konnte es allerdings passieren, dass da ein paar Schritte in der falschen Richtung dabei waren. Ich hatte ja schon erwähnt, dass ich inzwischen eine etwas modifizierte Erkennung geschrieben habe, und damit ist es auch zuverlässiger. Die werde ich noch einbauen.
verzögerte Schalterreaktion:
Das war etwas kniffliger. Ursache war letzendlich eine Änderung, die wir für die Programmierung der Endlagen über CV-Programmierung eingebaut hatten. Dass damit auch die Sollage des Servos geändert werden kann ( wenn man den jeweils anderen CV verstellt ) ist uns nun auf die Füsse gefallen. Das Problem ist, dass die Call-Back Routine 'NotifyCVChange' nicht nur aufgerufen wird, wenn sich der CV über einen DCC-Befehl ändert, sondern auch, wenn man ihn vom Sketch aus ändert. Das ist etwas unglücklich, denn wenn ich den CV selbst ändere weis ich das ja, und brauche da eigentlich kein 'Notify'. Als Workaround kannst Du folgendes machen:
2
3
4
5
6
7
aktuell1 = digitalRead(eingang1);
if (alt1 != aktuell1) {
dccSoll[0] = alt1;
ChkAdjEncode( 0 );
dccSoll[0] = alt1; // soll wird im ChkAdjEncode verändert, wenn die neue Position ins CV geschrieben wird.
};
Da durch das Schreiben der Endlage auch die Solllage im 'notify' wieder auf den alten Wert zurückgesetzt wird, muss Du sie nach dem ChkAdjEncode nochmal setzen. Bei Verstellung des Servos über DCC-Befehle und Endlageneinstellung mit Encoder fällt das nicht auf, da die Zentrale die Befehle mehrfach sendet, und das dann durch den wiederholten Befehl automatisch gemacht wird.
Da habe ich mir schon eine Lösung überlegt, muss ich aber noch einbauen.