Nöö...
Zurück zum Anfang:
void Lock::setRing() {
Serial.println("activeSensors " +activeSensors); //Ausgabe: "sensorCount "
for (int i = 0; i < activeSensors; i++)
leds[i].setColor(blue); //leds werden nicht geschaltet
Serial.Println() bekommt das Additionsergebnis aus Adresse des Strings und der Variablen activeSensors.
Diese neue/berechnete Adresse wird von Println als char * akzeptiert.
Stinknormale Pointer Arithmetik.
Im Grunde völlig ok, wenn es denn so gewollt wäre.
Aber das ist es wohl nicht.
Da activeSensors in dem Fall Null ist, wird die Zeichenkette "sensorCount " ausgegeben.
Die Schleife wird nicht durchlaufen, weil activeSensors == 0
Damit ist auch klar, warum die LEDs nicht reagieren.
In meinem Beispiel habe ich activeSensors = 4 gesetzt.
Dann wird der String auch erwartungsgemäß vorn abgeschnitten.
Ich will gar nicht wissen, was ausgegeben wird, wenn die berechnete Adresse irgendwann über den String hinweg zeigt.