Für den nachfolgenden Programmcode und die Weichenmatrix hier die Übersicht der Nummerierungen:
Die Weichenmatrix - bei welcher Taster-Kombination welche Relais geschalten werden müssen:
// Globale Variablen mit EingangsPins deklarierenint Input1 = 52;int Input2 = 50;int Input3 = 48;int Input4 = 46;int Input5 = 44;int Input6 = 42;int Input7 = 40;int Input8 = 38;int Input9 = 36;int Input10 = 34;int Input11 = 32; // Globale Variablen mit AusgangsPins deklarierenint Servo_1_Rel_1 = 53;int Servo_1_Rel_2 = 51;int Servo_2_Rel_1 = 49;int Servo_2_Rel_2 = 47;int Servo_3_Rel_1 = 45;int Servo_3_Rel_2 = 43;int Servo_4_Rel_1 = 41;int Servo_4_Rel_2 = 39;int Servo_5_Rel_1 = 37;int Servo_5_Rel_2 = 35;int Servo_6_Rel_1 = 33;int Servo_6_Rel_2 = 31;int Servo_7_Rel_1 = 29;int Servo_7_Rel_2 = 27;int Servo_8_Rel_1 = 25;int Servo_8_Rel_2 = 23;// Einmaliger Setup-Aufruf beim Programmstartvoid setup() { // EingangsPins als Eingang definieren: // INPUT_PULLUP = Eingang wird intern auf +5V gelegt, // dadurch Aktivierung durch "mit GND verbinden". pinMode(Input1, INPUT_PULLUP); pinMode(Input2, INPUT_PULLUP); pinMode(Input3, INPUT_PULLUP); pinMode(Input4, INPUT_PULLUP); pinMode(Input5, INPUT_PULLUP); pinMode(Input6, INPUT_PULLUP); pinMode(Input7, INPUT_PULLUP); pinMode(Input8, INPUT_PULLUP); pinMode(Input9, INPUT_PULLUP); pinMode(Input10, INPUT_PULLUP); pinMode(Input11, INPUT_PULLUP); // AusgangsPins als Ausgang definieren: pinMode(Servo_1_Rel_1, OUTPUT); pinMode(Servo_1_Rel_2, OUTPUT); pinMode(Servo_2_Rel_1, OUTPUT); pinMode(Servo_2_Rel_2, OUTPUT); pinMode(Servo_3_Rel_1, OUTPUT); pinMode(Servo_3_Rel_2, OUTPUT); pinMode(Servo_4_Rel_1, OUTPUT); pinMode(Servo_4_Rel_2, OUTPUT); pinMode(Servo_5_Rel_1, OUTPUT); pinMode(Servo_5_Rel_2, OUTPUT); pinMode(Servo_6_Rel_1, OUTPUT); pinMode(Servo_6_Rel_2, OUTPUT); pinMode(Servo_7_Rel_1, OUTPUT); pinMode(Servo_7_Rel_2, OUTPUT); pinMode(Servo_8_Rel_1, OUTPUT); pinMode(Servo_8_Rel_2, OUTPUT);}// loop() wird nach setup() fortwährend ausgeführt:void loop() { // Abfrage der Eingänge auf die gültigen Kombinationen // (digitalRead(EingangsPin, LOW), da LOW-aktiv) und // entsprechendes Schalten der Ausgänge (digitalWrite(AusgangsPin, HIGH)). if (digitalRead(Input1)==LOW) { if (digitalRead(Input2)==LOW) { digitalWrite(Servo_1_Rel_1, HIGH); waitForSwitchOff(Input2); } else if (digitalRead(Input5)==LOW) { digitalWrite(Servo_1_Rel_2, HIGH); digitalWrite(Servo_2_Rel_2, HIGH); digitalWrite(Servo_3_Rel_1, HIGH); waitForSwitchOff(Input5); } else if (digitalRead(Input6)==LOW) { digitalWrite(Servo_1_Rel_2, HIGH); digitalWrite(Servo_2_Rel_1, HIGH); digitalWrite(Servo_4_Rel_2, HIGH); waitForSwitchOff(Input6); } else if (digitalRead(Input7)==LOW) { digitalWrite(Servo_1_Rel_2, HIGH); digitalWrite(Servo_2_Rel_1, HIGH); digitalWrite(Servo_4_Rel_1, HIGH); waitForSwitchOff(Input7); } else if (digitalRead(Input8)==LOW) { digitalWrite(Servo_1_Rel_2, HIGH); digitalWrite(Servo_2_Rel_2, HIGH); digitalWrite(Servo_3_Rel_1, HIGH); digitalWrite(Servo_5_Rel_1, HIGH); digitalWrite(Servo_6_Rel_2, HIGH); waitForSwitchOff(Input8); } else if (digitalRead(Input9)==LOW) { digitalWrite(Servo_1_Rel_2, HIGH); digitalWrite(Servo_2_Rel_1, HIGH); digitalWrite(Servo_4_Rel_2, HIGH); digitalWrite(Servo_7_Rel_1, HIGH); waitForSwitchOff(Input9); } else if (digitalRead(Input10)==LOW) { digitalWrite(Servo_1_Rel_2, HIGH); digitalWrite(Servo_2_Rel_1, HIGH); digitalWrite(Servo_4_Rel_2, HIGH); digitalWrite(Servo_7_Rel_1, HIGH); digitalWrite(Servo_8_Rel_1, HIGH); waitForSwitchOff(Input10); } else if (digitalRead(Input11)==LOW) { digitalWrite(Servo_1_Rel_2, HIGH); digitalWrite(Servo_2_Rel_1, HIGH); digitalWrite(Servo_4_Rel_2, HIGH); digitalWrite(Servo_7_Rel_1, HIGH); digitalWrite(Servo_8_Rel_2, HIGH); waitForSwitchOff(Input11); } } else if (digitalRead(Input3)==LOW) { if (digitalRead(Input5)==LOW) { digitalWrite(Servo_3_Rel_2, HIGH); waitForSwitchOff(Input5); } else if (digitalRead(Input8)==LOW) { digitalWrite(Servo_3_Rel_2, HIGH); digitalWrite(Servo_5_Rel_1, HIGH); digitalWrite(Servo_6_Rel_2, HIGH); waitForSwitchOff(Input8); } else if (digitalRead(Input9)==LOW) { digitalWrite(Servo_3_Rel_2, HIGH); digitalWrite(Servo_5_Rel_2, HIGH); digitalWrite(Servo_6_Rel_2, HIGH); digitalWrite(Servo_7_Rel_2, HIGH); waitForSwitchOff(Input9); } else if (digitalRead(Input10)==LOW) { digitalWrite(Servo_3_Rel_2, HIGH); digitalWrite(Servo_5_Rel_2, HIGH); digitalWrite(Servo_6_Rel_2, HIGH); digitalWrite(Servo_7_Rel_2, HIGH); digitalWrite(Servo_8_Rel_1, HIGH); waitForSwitchOff(Input10); } else if (digitalRead(Input11)==LOW) { digitalWrite(Servo_3_Rel_2, HIGH); digitalWrite(Servo_5_Rel_1, HIGH); digitalWrite(Servo_6_Rel_1, HIGH); digitalWrite(Servo_7_Rel_2, HIGH); digitalWrite(Servo_8_Rel_2, HIGH); waitForSwitchOff(Input11); } } else if (digitalRead(Input4)==LOW) { if (digitalRead(Input8)==LOW) { digitalWrite(Servo_5_Rel_1, HIGH); digitalWrite(Servo_6_Rel_1, HIGH); waitForSwitchOff(Input8); } else if (digitalRead(Input9)==LOW) { digitalWrite(Servo_5_Rel_2, HIGH); digitalWrite(Servo_6_Rel_1, HIGH); digitalWrite(Servo_7_Rel_2, HIGH); waitForSwitchOff(Input9); } else if (digitalRead(Input10)==LOW) { digitalWrite(Servo_5_Rel_2, HIGH); digitalWrite(Servo_6_Rel_1, HIGH); digitalWrite(Servo_7_Rel_2, HIGH); digitalWrite(Servo_8_Rel_1, HIGH); waitForSwitchOff(Input10); } else if (digitalRead(Input11)==LOW) { digitalWrite(Servo_5_Rel_2, HIGH); digitalWrite(Servo_6_Rel_1, HIGH); digitalWrite(Servo_7_Rel_2, HIGH); digitalWrite(Servo_8_Rel_2, HIGH); waitForSwitchOff(Input11); } } else if (digitalRead(Input5)==LOW) { if (digitalRead(Input8)==LOW) { digitalWrite(Servo_5_Rel_1, HIGH); digitalWrite(Servo_6_Rel_2, HIGH); waitForSwitchOff(Input8); } else if (digitalRead(Input9)==LOW) { digitalWrite(Servo_5_Rel_2, HIGH); digitalWrite(Servo_6_Rel_2, HIGH); digitalWrite(Servo_7_Rel_2, HIGH); waitForSwitchOff(Input9); } else if (digitalRead(Input10)==LOW) { digitalWrite(Servo_5_Rel_2, HIGH); digitalWrite(Servo_6_Rel_2, HIGH); digitalWrite(Servo_7_Rel_2, HIGH); digitalWrite(Servo_8_Rel_1, HIGH); waitForSwitchOff(Input10); } else if (digitalRead(Input11)==LOW) { digitalWrite(Servo_5_Rel_2, HIGH); digitalWrite(Servo_6_Rel_2, HIGH); digitalWrite(Servo_7_Rel_2, HIGH); digitalWrite(Servo_8_Rel_2, HIGH); waitForSwitchOff(Input11); } } else if (digitalRead(Input6)==LOW) { if (digitalRead(Input9)==LOW) { digitalWrite(Servo_7_Rel_1, HIGH); waitForSwitchOff(Input9); } else if (digitalRead(Input10)==LOW) { digitalWrite(Servo_7_Rel_1, HIGH); digitalWrite(Servo_8_Rel_1, HIGH); waitForSwitchOff(Input10); } else if (digitalRead(Input11)==LOW) { digitalWrite(Servo_7_Rel_1, HIGH); digitalWrite(Servo_8_Rel_2, HIGH); waitForSwitchOff(Input11); } } else if (digitalRead(Input9)==LOW) { if (digitalRead(Input10)==LOW) { digitalWrite(Servo_8_Rel_1, HIGH); waitForSwitchOff(Input10); } else if (digitalRead(Input11)==LOW) { digitalWrite(Servo_8_Rel_2, HIGH); waitForSwitchOff(Input11); } } // Alle Ausgänge wieder ausschalten turnOffOutputs();}// Funktion wartet, bis angegebene Taste losgelassen wird.void waitForSwitchOff(int InputPin) { do { delay(200); } while (digitalRead(InputPin)==LOW);}// Funktion zum Ausschalten aller benutzten Ausgänge.void turnOffOutputs() { digitalWrite(Servo_1_Rel_1, LOW); digitalWrite(Servo_1_Rel_2, LOW); digitalWrite(Servo_2_Rel_1, LOW); digitalWrite(Servo_2_Rel_2, LOW); digitalWrite(Servo_3_Rel_1, LOW); digitalWrite(Servo_3_Rel_2, LOW); digitalWrite(Servo_4_Rel_1, LOW); digitalWrite(Servo_4_Rel_2, LOW); digitalWrite(Servo_5_Rel_1, LOW); digitalWrite(Servo_5_Rel_2, LOW); digitalWrite(Servo_6_Rel_1, LOW); digitalWrite(Servo_6_Rel_2, LOW); digitalWrite(Servo_7_Rel_1, LOW); digitalWrite(Servo_7_Rel_2, LOW); digitalWrite(Servo_8_Rel_1, LOW); digitalWrite(Servo_8_Rel_2, LOW);}