Weichensteuerung Schritt für Schritt

Mehr Erläuterungen im Thema Anleitung: Weichensteuerung mit Klasse

Das ist der Konstruktor, der die Instanzen zusammenbastelt:

      : reedPinA(reedPinA), reedPinG(reedPinG), stromRpin(stromRpin), weicheApin(weicheApin), weicheGpin(weicheGpin)
    {}

Hier habe ich gleichlautende Konstantennamen verwendet, was für mich einfach, zum Lernen aber blöd ist. Im anderen Thema habe ich daher mit einem Unterstrich versehene Namen zur Unterscheidung benutzt.

Nein, der mögliche Inhalt wird nur nicht genutzt.

Man schreibt es für eine Weiche und nutze es in jeder Instanz von Neuem, ganz getrennt.

Ja, switch/case.

Durch enum ist WARTEN==0 und IMPULSAUS == 1, das sind "sprechende" Nummern.

Nee if ( weichenImpuls.expired() ) wartet auf die Eieruhr.

Ohne break läuft der Schritt in den nächsten. Dies wäre möglich:

        case IMPULSAUS:
          if ( weichenImpuls.expired() ) {
            digitalWrite(weicheGpin, HIGH);              // Weiche Impuls auf Gleis Gerade ein
            digitalWrite(weicheApin, HIGH);              // Weiche Impuls auf Gleis Abzweig ein
        default:
          schritt = WARTEN;
      }

Wenn bei case nichts Passendes gefunden wird, ist default der "Notausstieg". Da sollte die Schrittkette nie hinkommen.

Das ist nur eine verkürzte Schreibweise einer for-Schleife, die automatisch alle Elemente von gleis[] abarbeitet. Man könnte auch schreiben:

gleis[0].init();
gleis[1].init();

oder auch

for (byte j = 0; j < 2; j++) gleis[j].init();