Prototypischen Umsetzung: Hier ein paar Überlegungen und code-Schnipsel:
Taster
Als Replacement für die drei Taster Start (grün), Stop (rot) und Taster des rotary müssen die solder jumper A und B auf dem TTP223 breakout offen sein, das wäre dann das Verhalten eines Tasters, der normal offen ist.
Der Taster des rotary verhält sich ander als Start und Stop: high wenn nicht gedrück und low wenn gedrück. Hier haben wir drei Möglichkeiten:
- Wir schließen den solder jumper A beim touch-Modul ("touch to “off”) und imitieren so das Verhalten des ursprünglichen Tasters
- Wir ändern den code in Z. 134
#define SELECT_PEGEL LOWinHIGHund in Z. 1961attachInterrupt(outputSW, isr1, FALLING);inRISINGund ändern hardwaretechnisch am Modul nichts. - Wir deaktivieren den Schalter komplett und greifen auf die alte Funktionalität (damals Poti ohne Taster) zurück und nutzen statt des rotary-Tasters die “Start” Taste. Dazu müssen wir Z. 104 auskommentieren:
//#define USE_ROTARY_SW
Mit diese Lösung sparen wir ein Hardwareteil und da der Stop-Button auch als Abbrechen-Button funktioniert, haben wir diese beiden UI-Elemente wieder näher beisammen. Der Nachteil ist aber, dass der Schnellzugriff auf Korrekturwert k und die Schnell-Glaswahl nicht mehr möglich ist!
Rotary
Für den rotary (nur Theorie), müsste noch einiges im code geändert werden) bräuchten wir neben dem Taster auch noch zwei touch sensoren für Wert erhöhen / rechts drehen und Wert erniedrigen / links drehen. Ebenfalls momentary touch normally open, d.h. auch A und B ohne solder bridge.
[draft, todo noch genauer beschreiben was im code geändert wurde]
- isr3 für outputB definieren
– attachInterrupt(outputB, isr3, CHANGE);
– CHANGE auf RISING wechseln
– void IRAM_ATTR isr3() {…
– outputA und outputB damit entkoppeln
– state change nicht mehr relevant, sondern nur noch high
3-fach Schalter
Variante A Den 3-fach Schalter könnte man ebenfalls mit 3 touch-Sensoren ersetzen. Dabei sollte beim Einschalten der Automatikmodus aktiv sein, daher einen Schalter (im Video “self locking”, B geschlossen), der bei initialer Stromzufuhr geschlossen ist, das wäre dann A und B geschlossen. Die beiden anderen Settings / Menü und manuell wären initial low, also A offen und B geschlossen. … oder man verwendet die gleiche Hardware-Konfiguration wie oben (Taster, normal offen, d.h. A und B offen), müsste aber etwas im code ändern.
Variante B Wenn wir auf den manuellen Modus in Zukunft verzichten wollen, könnte man auch mit nur einem Schalter (sic!, Terminologie “self locking” im Video, solder jumper B geschlossen) auskommen, der mit high Setup auswählt. Der wäre beim Einschalten low und würde damit indirekt den Automatikmodus triggern. Auf den pin switch_betrieb_pin könnte man dann verzichten. Änderungen im Code:
void loop()
{
rotating = true; // debounce Management
// Betriebsmodus
if (digitalRead(switch_setup_pin) == HIGH)
processSetup(); // Setup-Menue
else {
processAutomatik(); // Automatik-Betrieb
}
// Automatik-Betrieb
// if (digitalRead(switch_betrieb_pin) == HIGH)
// processAutomatik();
// Handbetrieb
// if ((digitalRead(switch_betrieb_pin) == LOW)
// && (digitalRead(switch_setup_pin) == LOW))
// processHandbetrieb();
}
Hier der Prototyp im Test-Einsatz (ohne Servo).