constexpr byte ANZAHL_NOCKEN {2};
constexpr byte ANZAHL_NOCKEN_LEDS {3};

enum Leds : byte {ledDown, ledOk, ledUp};
enum Nocken : byte {nocke1, nocke2};

struct Nocke {
  const unsigned int untererGrenzwert;
  const unsigned int obererGrenzwert;
  const byte readPin;
  const byte ledPin[ANZAHL_NOCKEN_LEDS];
};

struct Nocke nocken[ANZAHL_NOCKEN] {
  {
    235, 276, 12, {2, 3, 4}
  }, // Init Struktur Nocke 1 mit unterer-, oberer Grenzwert, zugehörige Lese- und Led Pins
  {696, 737, 13, {5, 6, 7}}  // Init Struktur Nocke 2 mit unterer-, oberer Grenzwert, zugehörige Lese- und Led Pins
  //{werte Nocke 3},
  //{werte Nocke 4}
};

// Durch Ändern der Werte ANZAHL_NOCKEN, enum Nocken und der initialisierung der
// struct Nocke können beliebig viele Nocken und leds hinzugefügt werden ohne dass
// am folgenden Quellcode etwas geändert werden muss.

constexpr byte potiPin = A0; //Eingang vom Poti

// Vorwärtdeklaration Funktion(en)
void testNocke(unsigned int, struct Nocke&);

void setup() {
  Serial.begin(9600); //Ausgabe im Monitor

  // pinMode für INPUT und OUTPUT Pins setzen
  for (auto &nocke : nocken) {
    pinMode(nocke.readPin, INPUT);
    for (byte i = 0; i < ANZAHL_NOCKEN_LEDS; ++i) {
      pinMode(nocke.ledPin[i], OUTPUT);
    }
  }
}

void loop() {
  static unsigned int alterWert {1025};
  // Potiwert einlesen
  unsigned int potiWert = analogRead(potiPin);
  if (potiWert != alterWert) {
    alterWert = potiWert;
    Serial.print(potiWert); Serial.print(", ");
    Serial.print((5.0 / 1023) * potiWert, 3); Serial.println(" V");
    for (auto &nocke : nocken) { testNocke(potiWert, nocke); }
  } else {
    // LED OK schalten, wenn sich der Status der Nocke ändert ohne dass
    // der Poti Wert sich verändert hat.
    for (auto &nocke : nocken) {
      if ( (!digitalRead(nocke.readPin) && digitalRead(nocke.ledPin[ledOk])) ||
           (digitalRead(nocke.readPin) && !digitalRead(nocke.ledPin[ledOk])) ) {
        testNocke(potiWert, nocke);
      }
    } // for
  } //if
}

void testNocke(unsigned int wert, struct Nocke& nk) {
  // Erst mal alle LEDs auf LOW setzten
  digitalWrite(nk.ledPin[ledDown], LOW);
  digitalWrite(nk.ledPin[ledOk], LOW);
  digitalWrite(nk.ledPin[ledUp], LOW);
  // Nun nur noch die relevante LED auf HIGH setzen (spart 3 digitalWrite Operationen)
  if (digitalRead(nk.readPin) == HIGH && (wert >= nk.untererGrenzwert && wert <= nk.obererGrenzwert)) {
    digitalWrite(nk.ledPin[ledOk], HIGH);
  }
  else if (wert < nk.untererGrenzwert) {
    digitalWrite(nk.ledPin[ledDown], HIGH);
  } else if (wert > nk.obererGrenzwert) {
    digitalWrite(nk.ledPin[ledUp], HIGH);
  }
}
$abcdeabcde151015202530354045505560fghijfghij