Puppenhaus mit Neopixel in den Räumen

Hallo liebe arcuino gemeinde,
ich möchte für meine Tochter ein Pupenhaus mit 8Räumen mit licht ausstatten aber nicht einfach nur mit simplen lämpchen sondern mit Neopixel stripes in jedem Raum und weil noch einige über waren auch am rhamen aussen herum.
In jedem raum wird später ein Taster verbaut sein der dann das licht im jeweiligen Raum steuern soll ich dachte da erstmal an drei Colors Weiss/grün/aus
Für die aussenumrhamung dachte ich an sowas wie die sketche zum stripe testen solche lightshows, dies soll aber mit einem taster am dach gesteuert werden z.b. start stop oder so.
Hab im netz auch ein video gefunden in dem eine bestimme menge an neopixeln ansteuerbar ist mit einem taster... das funktioniert für einen stripe und einen taster auch ausgezeichnet aber das ganze muss ich ja jetzt 8mal haben für jeden raum und da wirds irgendwie schwierig ich bekomme schon den zweiten nicht richtig ans laufen entweder reagiert ein stripe auf alle taster oder beide stripes reagieren gleich :frowning: und dann noch das Pin-Anzahl Problem....
Wenn ich 8 Neopixel Stripes mit je 20LEDs pro raum habe und alle einzeln steuere dann benötige ich dafür schonmal 8 Pins und dann noch die Taster... so kahm ich auf die idee wiedermal die Analog eingänge zu verwenden sprich auswerten welcher wert anliegt ich würde maximal 2Taster pro AI verwenden...
Auch hier geht das zwar einen stripe zu steuern mit einem taster aber sobald ich es erweitern will ist schluss :frowning:
Mein Code ist mitlerweile so unfunktional und völlig durch das ich ihn eigentlich nicht zeigen will...
In den lightshows sieht mann auch immer wieder das nur einzelne abschnitte angesprochen werden evtl. ist es ja möglich und damit für mein projekt sinnvoller die stripes später wieder als einen stripe zu behandeln in dem es dann 8 abschnitte für die zimmer gibt die dann von den tastern gesteuert werden? In diesem Fall wären auch wieder genug Digital Pins frei weil für die LEDs dann ja nur noch einer benötigt wird.
Leider steht weinachten ja schon Quasi vor der tür und das muss auch alles noch verbaut werden.
Zur anwendung kommt ein Original Arduino UNO

#include <Adafruit_NeoPixel.h>  //Libary für Neopixel
#include <Bounce2.h>            //Libary extras für Taster etc.
//////////////////////////////////////////LEDstreifen1(Zimmer1)
#define neoPixelPin 3
#define numPixels 20
#define buttonPin LED_1
/////////////////////////////////////////LEDstreifen2(Zimmer2)
#define neoPixelPin1 4
#define numPixels 20
#define buttonPin1 LED_2
/////////////////////////////////////////LEDstreifen3(Zimmer3)
#define neoPixelPin2 5
#define numPixels 20
#define buttonPin2 LED_3
/////////////////////////////////////////LEDstreifen4(Zimmer4)
#define neoPixelPin3 6
#define numPixels 20
#define buttonPin3 LED_4
/////////////////////////////////////////LEDstreifen5(Zimmer5)
#define neoPixelPin4 7
#define numPixels 20
#define buttonPin4 LED_5
/////////////////////////////////////////LEDstreifen6(Zimmer6)
#define neoPixelPin5 9
#define numPixels 20
#define buttonPin5 LED_6
/////////////////////////////////////////LEDstreifen7(Zimmer7)
#define neoPixelPin6 10
#define numPixels 20
#define buttonPin6 LED_7
/////////////////////////////////////////LEDstreifen8(Zimmer8)
#define neoPixelPin7 11
#define numPixels 20
#define buttonPin7 LED_8
/////////////////////////////////////////LEDstreifen9(HausaussenLightshow)optional
#define neoPixelPin8 12
#define numPixels 120
#define buttonPin8 LED_9
const unsigned int BUTTON_PIN         = A0;   //Anschluss Taster für Analogauswertung
const unsigned int BUTTON_PIN         = A1;   //Anschluss Taster für Analogauswertung
const unsigned int BUTTON_PIN         = A2;   //Anschluss Taster für Analogauswertung
const unsigned int BUTTON_PIN         = A3;   //Anschluss Taster für Analogauswertung
const unsigned int Taster1              = LED_1;    //Ergebnis der Tastenauswertung Taster1 übergabe als digitalwert (Raum1)
const unsigned int Taster2              = LED_2;    //Ergebnis der Tastenauswertung Taster2 übergabe als digitalwert (Raum2)
const unsigned int Taster3              = LED_3;    //Ergebnis der Tastenauswertung Taster3 übergabe als digitalwert (Raum3)
const unsigned int Taster4              = LED_4;    //Ergebnis der Tastenauswertung Taster4 übergabe als digitalwert (Raum4)
const unsigned int Taster5              = LED_5;    //Ergebnis der Tastenauswertung Taster5 übergabe als digitalwert (Raum5)
const unsigned int Taster6              = LED_6;    //Ergebnis der Tastenauswertung Taster6 übergabe als digitalwert (Raum6)
const unsigned int Taster7              = LED_7;    //Ergebnis der Tastenauswertung Taster7 übergabe als digitalwert (Raum7)
const unsigned int Taster8              = LED_8;    //Ergebnis der Tastenauswertung Taster8 übergabe als digitalwert (Raum8)
const unsigned int taster9              = LED_9;    //Ergebnis der Tastenauswertung Taster9 übergabe als digitalwert (Außen Beleuchtung /Lightshow-Start)

const unsigned int BUTTON_TOLLERANCE  = 300;   //Tollerance für analogwertabweichung

const unsigned int BUTTON[9] = {          //Array für Tasterwerte
  355,          //Analogwert Taster1
  960,          //Analogwert Taster2
  };


Adafruit_NeoPixel pixels(numPixels, neoPixelPin, NEO_GRB + NEO_KHZ800);
Bounce2::Button button = Bounce2::Button();

/////////////////INDEX für Tastendruckzälung
int index = 0;
int index1 = 0;
int index2 = 0;
int index3 = 0;
int index4 = 0;
int index5 = 0;
int index6 = 0;
int index7 = 0;
int index8 = 0;
int index9 = 0;

//////////Neopixel Farbverwaltung/zuweisung
const int MAX_COLORS = 3;

uint32_t colors[] = {
  pixels.Color(255, 200, 255),  //weiss
  pixels.Color(0, 0, 255),      //gruen
  pixels.Color(0, 0, 0),      //Aus
};

void setup() {
  Serial.begin(9600);
  pixels.begin();

  button.attach(buttonPin, INPUT_PULLUP);
  button.attach(buttonPin1, INPUT_PULLUP);
  button.attach(buttonPin2, INPUT_PULLUP);
  button.attach(buttonPin3, INPUT_PULLUP);
  button.interval(5);
  button.setPressedState(LOW);

  updateNeoPixel();

  pinMode(BUTTON_PIN, INPUT);
  pinMode(Taster1, OUTPUT);
  pinMode(Taster2, OUTPUT);
  pinMode(Taster3, OUTPUT);
  pinMode(Taster4, OUTPUT);
  pinMode(Taster5, OUTPUT);
  pinMode(Taster6, OUTPUT);
  pinMode(Taster7, OUTPUT);
  pinMode(Taster8, OUTPUT);
  pinMode(Taster9, OUTPUT);
}

void updateNeoPixel() {
  
  pixels.clear();
  //eine Schleife von 0 bis 11 zum ansteuern der einzelnen NeoPixel
  for (int i = 0; i < numPixels; i++) {
    //setzen der Farbe aus dem Array mit dem Index
    pixels.setPixelColor(i, colors[index]);
    pixels.show();
  }
}

void loop() {
  //////////////////////////////////Neopixel1
  button.update();
  if (button.pressed()) {
    if (index == (MAX_COLORS-1)){
      index = 0;
    } else {
      index = index + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////NEOpixel2
  button.update();
  if (button.pressed()) {
    if (index1 == (MAX_COLORS-1)){
    } else {
      index1 = index1 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////Neopixel3
      button.update();
  if (button.pressed()) {
    if (index2 == (MAX_COLORS-1)){
    } else {
      index2 = index2 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////Neopixel4
      button.update();
  if (button.pressed()) {
    if (index3 == (MAX_COLORS-1)){
    } else {
      index3 = index3 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////Neopixel5
      button.update();
  if (button.pressed()) {
    if (index4 == (MAX_COLORS-1)){
    } else {
      index4 = index4 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////Neopixel6
      button.update();
  if (button.pressed()) {
    if (index5 == (MAX_COLORS-1)){
    } else {
      index5 = index5 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////Neopixel7
      button.update();
  if (button.pressed()) {
    if (index6 == (MAX_COLORS-1)){
    } else {
      index6 = index6 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////Neopixel8
      button.update();
  if (button.pressed()) {
    if (index7 == (MAX_COLORS-1)){
    } else {
      index7 = index7 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////Neopixel9
      button.update();
  if (button.pressed()) {
    if (index8 == (MAX_COLORS-1)){
    } else {
      index8 = index8 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  }
  //////////////////Tastendruckauswertung von analog nach digitalwert für obige neopixel ansteuerung
    if(isButtonPressed(BUTTON[0])){
    Serial.println("Taster1");
    digitalWrite(LED_1, HIGH);
  }
  else {
    digitalWrite(LED_1, LOW);
  }
  if(isButtonPressed(BUTTON[1])){
    Serial.println("Taster2");
    digitalWrite(LED_2, LOW);
  }
  else {
    digitalWrite(LED_2, LOW);
  }
  if(isButtonPressed(BUTTON[2])){
    Serial.println("Taster3");
    digitalWrite(LED_3, LOW);
  }
  else {
    digitalWrite(LED_3, LOW);
  }
  if(isButtonPressed(BUTTON[3])){
    Serial.println("Taster4");
    digitalWrite(LED_4, LOW);
  }
  else {
    digitalWrite(LED_4, LOW);
  }
  if(isButtonPressed(BUTTON[4])){
    Serial.println("Taster5");
    digitalWrite(LED_5, LOW);
  }
  else {
    digitalWrite(LED_5, LOW);
  }
  if(isButtonPressed(BUTTON[5])){
    Serial.println("Taster6");
    digitalWrite(LED_6, LOW);
  }
  else {
    digitalWrite(LED_6, LOW);
  }
  if(isButtonPressed(BUTTON[6])){
    Serial.println("Taster7");
    digitalWrite(LED_7, LOW);
  }
  else {
    digitalWrite(LED_7, LOW);
  }
  if(isButtonPressed(BUTTON[7])){
    Serial.println("Taster8");
    digitalWrite(LED_8, LOW);
  }
  else {
    digitalWrite(LED_8, LOW);
  }
  if(isButtonPressed(BUTTON[8])){
    Serial.println("Taster9");
    digitalWrite(LED_9, LOW);
  }
  else {
    digitalWrite(LED_9, LOW);
  }
}

/////// Bool für Tastendruckermittlung ob gedrückt oder nicht mit einbeziehung der Tollerance
boolean isButtonPressed(unsigned int button){                   
  int analogValue = analogRead(BUTTON_PIN);
  Serial.println(analogValue);

  return analogValue > button - BUTTON_TOLLERANCE
         && analogValue < button + BUTTON_TOLLERANCE;
}

Das lässt sich auflösen.

Ich sehe 8 Zimmer und die Aussenwand.

Hast Du das schon fertig verbaut und verkabelt oder bist Du in der Lage mindestens die Datenpins der LED-Stripes der Zimmer alle in Reihe nacheinander zu verbinden?

Also am Ende des ersten Zimmer den Datenpin an den Anfang des nächsten Zimmer zu legen?

Dann bekommst Du mindestens 6 Pins nochmal zur freien Verwendung.

Die Analogpins liessen sich auch als DigitalPins verwenden.

Für die 9 Taster würde ich mir eine Matrix auf einem AnalogPin mit Widerständen bauen, geht aber auch konventionell und im ersten Schritt sicher erstmal Nebensache.

Was Du beschreibst ist machbar und wird nur durch Deine Kenntnisse eingeschränkt. Wie sieht es damit aus? Magst Du Felder, magst Du Klassen, oder magst Du Felder von Klassen? Oder doch lieber prozedural?

Neopixel gibt es in unterschiedlicher Bauform, beispielsweise auch als 5 mm rund.

Dein beschriebener Ist Zustand:


Welcher natürlich besser zu gestalten wäre.
Du kannst bei deinem Projekt die NEO Pixel in Reihe beschalten und so dann die Taster auf den PIN´s legen.
Desweiteren möchte ich Dir zur Button Auswertung MOBA Tolls empfehlen.

Das ist auch der Weg, den ich nehmen würde: maximal 2 pins für die LED-stripes (1 für die Zimmer, 1 für den Außenbereich "Rahmen"). Den Zimmer-Streifen bei je 20 LEDs trennen (oder jede andere Segment-Größe) und mit Kabel untereinander verlängern.
Das Programm würde dann im ersten Schritt alle Taster abfragen, danach jeder Taster-Status-Änderung das jeweilige Segment (0-19, 20-39 etc...) mit dem gewünschten Farbschema (keine Farb-Animationen, oder?) versehen (z.B. strip.fill(color, first, count);) und wenn (nach Auswertung aller Taster) es so eine Änderung in mindestens einem Segment gibt, den ganzen Streifen einmal aktualisieren (strip.show();), wobei alle anderen Segmente nicht verändert werden sollten (also kein strip.clear(); verwenden)
Parallel dazu dann den Taster für die Rahmenanimation abfragen und alle x ms den nächsten Animationsschritt auf dem zweiten Streifen ausführen.

Ja so auch mein Vorschlag dann:

Und als Lib dann die Fast LED

Button die LIB von @MicroBahner

dann 2 Extra Taster damit man unter Umständen dimmen od. ähnliches kann.

das hast oft - jedes mal wenn du den button drückst - oder auch nicht - schaltest du eine LED low. Ist das wirklich das was du machen willst?

Deine ganzen Wiederholungen rufen laut nach Arrays! Wenn man dann noch zusammen gibt, was zusammen gehört wären man bei Strukturen. Der Stetch ist dann vermutlich nur mehr ein Zehntel dessen was er heute ist.

Leider ist für mich dein Sketch noch zu undurchsichtig. Warum hast du für die "Buttons" eine Library verwendet, aber für "BUTTON_PIN" nicht?

Und was machen die Taster1 - Taster9 AUSGÄNGE wirklich?

Zeichne doch bitte mal einen Raum auf welche Komponenten so ein Raum hat und ergänze deine Variablen - Namen damit man sich da was drunter vorstellen kann.

Das ist eine Kopiervorlage.

Schaut man genau hin, passt das sowieso nicht:

Da BUTTON[] ab 2 nicht mehr erreicht wird, passiert da auch nix.

Er hat sich einfach nur mit seinen Klammern vertan und liegt nun mit der Vorbereitung auf Eis.

Wenn man das auflöst, sieht das nicht so schlimm aus.

#include <Adafruit_NeoPixel.h>  //Libary für Neopixel
#include <Bounce2.h>            //Libary extras für Taster etc.

//////////////////////////////////////////LEDstreifen1(Zimmer1)
#define neoPixelPin 3
#define numPixels 20
#define buttonPin LED_1
/////////////////////////////////////////LEDstreifen2(Zimmer2)
#define neoPixelPin1 4
#define numPixels 20
#define buttonPin1 LED_2
/////////////////////////////////////////LEDstreifen3(Zimmer3)
#define neoPixelPin2 5
#define numPixels 20
#define buttonPin2 LED_3
/////////////////////////////////////////LEDstreifen4(Zimmer4)
#define neoPixelPin3 6
#define numPixels 20
#define buttonPin3 LED_4
/////////////////////////////////////////LEDstreifen5(Zimmer5)
#define neoPixelPin4 7
#define numPixels 20
#define buttonPin4 LED_5
/////////////////////////////////////////LEDstreifen6(Zimmer6)
#define neoPixelPin5 9
#define numPixels 20
#define buttonPin5 LED_6
/////////////////////////////////////////LEDstreifen7(Zimmer7)
#define neoPixelPin6 10
#define numPixels 20
#define buttonPin6 LED_7
/////////////////////////////////////////LEDstreifen8(Zimmer8)
#define neoPixelPin7 11
#define numPixels 20
#define buttonPin7 LED_8
/////////////////////////////////////////LEDstreifen9(HausaussenLightshow)optional
#define neoPixelPin8 12
#define numPixels 120
#define buttonPin8 LED_9
const unsigned int BUTTON_PIN = A0;   //Anschluss Taster für Analogauswertung
const unsigned int BUTTON_PIN = A1;   //Anschluss Taster für Analogauswertung
const unsigned int BUTTON_PIN = A2;   //Anschluss Taster für Analogauswertung
const unsigned int BUTTON_PIN = A3;   //Anschluss Taster für Analogauswertung
const unsigned int Taster1 = LED_1;    //Ergebnis der Tastenauswertung Taster1 übergabe als digitalwert (Raum1)
const unsigned int Taster2 = LED_2;    //Ergebnis der Tastenauswertung Taster2 übergabe als digitalwert (Raum2)
const unsigned int Taster3 = LED_3;    //Ergebnis der Tastenauswertung Taster3 übergabe als digitalwert (Raum3)
const unsigned int Taster4 = LED_4;    //Ergebnis der Tastenauswertung Taster4 übergabe als digitalwert (Raum4)
const unsigned int Taster5 = LED_5;    //Ergebnis der Tastenauswertung Taster5 übergabe als digitalwert (Raum5)
const unsigned int Taster6 = LED_6;    //Ergebnis der Tastenauswertung Taster6 übergabe als digitalwert (Raum6)
const unsigned int Taster7 = LED_7;    //Ergebnis der Tastenauswertung Taster7 übergabe als digitalwert (Raum7)
const unsigned int Taster8 = LED_8;    //Ergebnis der Tastenauswertung Taster8 übergabe als digitalwert (Raum8)
const unsigned int taster9 = LED_9;    //Ergebnis der Tastenauswertung Taster9 übergabe als digitalwert (Außen Beleuchtung /Lightshow-Start)

const unsigned int BUTTON_TOLLERANCE = 300;   //Tollerance für analogwertabweichung

const unsigned int BUTTON[9] =            //Array für Tasterwerte
{
  355,          //Analogwert Taster1
  960,          //Analogwert Taster2
};

Adafruit_NeoPixel pixels(numPixels, neoPixelPin, NEO_GRB + NEO_KHZ800);
Bounce2::Button button = Bounce2::Button();

/////////////////INDEX für Tastendruckzälung
int index = 0;
int index1 = 0;
int index2 = 0;
int index3 = 0;
int index4 = 0;
int index5 = 0;
int index6 = 0;
int index7 = 0;
int index8 = 0;
int index9 = 0;

//////////Neopixel Farbverwaltung/zuweisung
const int MAX_COLORS = 3;

uint32_t colors[] =
{
  pixels.Color(255, 200, 255),  //weiss
  pixels.Color(0, 0, 255),      //gruen
  pixels.Color(0, 0, 0),      //Aus
};

void setup()
{
  Serial.begin(9600);
  pixels.begin();
  button.attach(buttonPin, INPUT_PULLUP);
  button.attach(buttonPin1, INPUT_PULLUP);
  button.attach(buttonPin2, INPUT_PULLUP);
  button.attach(buttonPin3, INPUT_PULLUP);
  button.interval(5);
  button.setPressedState(LOW);
  updateNeoPixel();
  pinMode(BUTTON_PIN, INPUT);
  pinMode(Taster1, OUTPUT);
  pinMode(Taster2, OUTPUT);
  pinMode(Taster3, OUTPUT);
  pinMode(Taster4, OUTPUT);
  pinMode(Taster5, OUTPUT);
  pinMode(Taster6, OUTPUT);
  pinMode(Taster7, OUTPUT);
  pinMode(Taster8, OUTPUT);
  pinMode(Taster9, OUTPUT);
}

void updateNeoPixel()
{
  pixels.clear();

  //eine Schleife von 0 bis 11 zum ansteuern der einzelnen NeoPixel
  for (int i = 0; i < numPixels; i++)
  {
    //setzen der Farbe aus dem Array mit dem Index
    pixels.setPixelColor(i, colors[index]);
    pixels.show();
  }
}

void loop()
{
  //////////////////////////////////Neopixel1
  button.update();

  if (button.pressed())
  {
    if (index == (MAX_COLORS - 1))
    {
      index = 0;
    }
    else
    {
      index = index + 1;
      Serial.println(index);
    }
  }

  updateNeoPixel();
  //////////////////////////////////NEOpixel2
  button.update();

  if (button.pressed())
  {
    if (index1 == (MAX_COLORS - 1))
    {
    }
    else
    {
      index1 = index1 + 1;
      Serial.println(index);
    }
  }

  updateNeoPixel();
  //////////////////////////////////Neopixel3
  button.update();

  if (button.pressed())
  {
    if (index2 == (MAX_COLORS - 1))
    {
    }
    else
    {
      index2 = index2 + 1;
      Serial.println(index);
    }
  }

  updateNeoPixel();
  //////////////////////////////////Neopixel4
  button.update();

  if (button.pressed())
  {
    if (index3 == (MAX_COLORS - 1))
    {
    }
    else
    {
      index3 = index3 + 1;
      Serial.println(index);
    }
  }

  updateNeoPixel();
  //////////////////////////////////Neopixel5
  button.update();

  if (button.pressed())
  {
    if (index4 == (MAX_COLORS - 1))
    {
    }
    else
    {
      index4 = index4 + 1;
      Serial.println(index);
    }
  }

  updateNeoPixel();
  //////////////////////////////////Neopixel6
  button.update();

  if (button.pressed())
  {
    if (index5 == (MAX_COLORS - 1))
    {
    }
    else
    {
      index5 = index5 + 1;
      Serial.println(index);
    }
  }

  updateNeoPixel();
  //////////////////////////////////Neopixel7
  button.update();

  if (button.pressed())
  {
    if (index6 == (MAX_COLORS - 1))
    {
    }
    else
    {
      index6 = index6 + 1;
      Serial.println(index);
    }
  }

  updateNeoPixel();
  //////////////////////////////////Neopixel8
  button.update();

  if (button.pressed())
  {
    if (index7 == (MAX_COLORS - 1))
    {
    }
    else
    {
      index7 = index7 + 1;
      Serial.println(index);
    }
  }

  updateNeoPixel();
  //////////////////////////////////Neopixel9
  button.update();

  if (button.pressed())
  {
    if (index8 == (MAX_COLORS - 1))
    {
    }
    else
    {
      index8 = index8 + 1;
      Serial.println(index);
    }

    updateNeoPixel();
  }

  //////////////////Tastendruckauswertung von analog nach digitalwert für obige neopixel ansteuerung
  if (isButtonPressed(BUTTON[0]))
  {
    Serial.println("Taster1");
    digitalWrite(LED_1, HIGH);
  }
  else
  {
    digitalWrite(LED_1, LOW);
  }

  if (isButtonPressed(BUTTON[1]))
  {
    Serial.println("Taster2");
    digitalWrite(LED_2, LOW);
  }
  else
  {
    digitalWrite(LED_2, LOW);
  }

  if (isButtonPressed(BUTTON[2]))
  {
    Serial.println("Taster3");
    digitalWrite(LED_3, LOW);
  }
  else
  {
    digitalWrite(LED_3, LOW);
  }

  if (isButtonPressed(BUTTON[3]))
  {
    Serial.println("Taster4");
    digitalWrite(LED_4, LOW);
  }
  else
  {
    digitalWrite(LED_4, LOW);
  }

  if (isButtonPressed(BUTTON[4]))
  {
    Serial.println("Taster5");
    digitalWrite(LED_5, LOW);
  }
  else
  {
    digitalWrite(LED_5, LOW);
  }

  if (isButtonPressed(BUTTON[5]))
  {
    Serial.println("Taster6");
    digitalWrite(LED_6, LOW);
  }
  else
  {
    digitalWrite(LED_6, LOW);
  }

  if (isButtonPressed(BUTTON[6]))
  {
    Serial.println("Taster7");
    digitalWrite(LED_7, LOW);
  }
  else
  {
    digitalWrite(LED_7, LOW);
  }

  if (isButtonPressed(BUTTON[7]))
  {
    Serial.println("Taster8");
    digitalWrite(LED_8, LOW);
  }
  else
  {
    digitalWrite(LED_8, LOW);
  }

  if (isButtonPressed(BUTTON[8]))
  {
    Serial.println("Taster9");
    digitalWrite(LED_9, LOW);
  }
  else
  {
    digitalWrite(LED_9, LOW);
  }
}

/////// Bool für Tastendruckermittlung ob gedrückt oder nicht mit einbeziehung der Tollerance
boolean isButtonPressed(unsigned int button)
{
  int analogValue = analogRead(BUTTON_PIN);
  Serial.println(analogValue);
  return analogValue > button - BUTTON_TOLLERANCE
         && analogValue < button + BUTTON_TOLLERANCE;
}

Ein Hinweis wurde noch nicht genannt und auch in den Schaltplänen nicht gezeigt. In der Datenleitung jeder Unterbrechung vom Strip, und in der Datenleitung von μC zum ersten Strip ein 330Ω Widerstand in Reihe vorsehen. Nicht das aus Versehen das erste Pixel der Abschnitte stirbt und man wieder alles am Modell ändern muss.

So dann :

Nein, in jeder Unterbrechung des Strips.

Wenn der Strip im z.B. zweiten Raum, keine Versorgung hat, versorgt sich das Pixel parasitär über die Datenleitung, was das Sterben des ersten Pixels, des zweiten Teilabschnittes bewirkt. Alle folgenden Pixel erhalten keine Daten mehr.

Ist doch wahlweise gezeichnett :wink:

Ich weiß nicht, was du damit meinst. Ein Widerstand in der Datenleitung zwischen Pixel 19 und Pixel 20 fehlt. Genauso in den anderen Unterbrechungen.

Das braucht es doch nicht. Ist unnötig. Diesen Widerstand braucht man ja nur wenn der LEd Strip noch nicht mit Spannung versorgt ist aber der Arduino schon online ist.

Bei WS2812 würde ich jedem Raum eine eigene Stromeinspeisung spendieren, was dann auch einen Widerstand zwischen den Räumen empfehlenswert macht. Die Stromeinspeisung könntest Du noch ergänzen.

Eine Lötbrücke zwischen Raum 8 am Ende und dem Außenstreifen würde die Option verdeutlichen.

Braucht aber nicht. Ich habe auch schon 12 und 5 Volt gemischt. Das ohne Widerstand bei Dout und Din. Das ist nur bei dem ersten DIN problematisch sobald die ersten Daten vom Arduino kommen und die Spannungsversorgung noch nicht für den Strip vorhanden ist.

Und was passiert, wenn der erste Raum versorgt ist, und der zweite nicht? Z.B. durch ein abgerissenes Kabel. Der Widerstand schadet nicht, er schützt nur.
Aber das abwägen, was besser ist, darf jeder selbst. Ist ein Pixel erst einmal kaputt, lässt es sich nur über einen Aufwändigen Umbau reparieren.

Und was passiert wenn Du gleich eine Spannung 50V an den Strips anlegst oder Man sich verpolt?
Grundsätzlich ist doch


das System Stille Post wo jeder Pixel seinen Anteil von 24 bit einbehält. Und ohne das erste Pixel nichts passiert. Da sind doch die D In und D Out auf LOW.

Ich hab leider nicht die Zeit die ich gerne hätte... ja ich hab mir etliche Codeschnipsel zusammen kopiert zuerst für einen stripe alös das funktionierte wollte ich eigentlich alles nur auf 9 Taster und 9Stripes erweitern :smiley: Was dann mächtig in die hose ging
mit den ansprechen einzelner abschnitte hab ich noch gar nicht gearbeitet aber den bisherigen code hab ich mal etwas zusammen geschrumpft

#include <Adafruit_NeoPixel.h>  //Libary für Neopixel
#include <Bounce2.h>            //Libary extras für Taster etc.
/////////////////////////////////////////LEDstreifenZimmer(Zimmer1-8)
#define neoPixelPin6 6    ///Anschlusspin an dem der Zimmer streifen hängen wird
#define numPixels 20      ///Anzahl der Leds 8 zimmer je 20Leds macht später 80 jetzt 16 im experiment je 2/Zimmer
/////////////////////////////////////////LEDstreifenAussen(AussenRhamen)
#define neoPixelPin9 9    ///Anschlusspin an dem der Aussen streifen hängen wird
#define numPixels 20      ///Anzahl der Leds jetzt 20 später 120Leds

///////Taster Sind wie folgt an der Hardware angeschlossen:
//Taster 1+2 An A0
//Taster 3+4 An A1
//Taster 5      2
//Taster 6      3
//Taster 7      4
//Taster 8      5
//Taster 9      7
/////////////////////////////////////////Tastereingangszuweisung für Pixelsteuerung entweder Digitalpin oder ergebnis der analogauswertung
#define buttonPin1 TasterA1
#define buttonPin2 TasterA2
#define buttonPin3 TasterA3
#define buttonPin4 TasterA4
#define buttonPin5 2
#define buttonPin6 3
#define buttonPin7 4
#define buttonPin8 5
#define buttonPin9 7

const unsigned int BUTTON_PIN1         = A0;   //Anschluss Taster1+2 für Analogauswertung
const unsigned int BUTTON_PIN3         = A1;   //Anschluss Taster für Analogauswertung
const unsigned int Tasterwert1              = TasterA1;    //Ergebnis der Tastenauswertung Taster1 übergabe als digitalwert (Raum1)
const unsigned int Tasterwert2              = TasterA2;    //Ergebnis der Tastenauswertung Taster2 übergabe als digitalwert (Raum2)
const unsigned int Tasterwert3              = TasterA3;    //Ergebnis der Tastenauswertung Taster3 übergabe als digitalwert (Raum3)
const unsigned int Tasterwert4              = TasterA4;    //Ergebnis der Tastenauswertung Taster4 übergabe als digitalwert (Raum4)

const unsigned int BUTTON_TOLLERANCE  = 300;   //Tollerance für analogwertabweichung

const unsigned int BUTTON[2] = {          //Array für Tasterwerte
  355,          //Analogwert Taster1
  960,          //Analogwert Taster2
  };


Adafruit_NeoPixel pixels(numPixels, neoPixelPin, NEO_GRB + NEO_KHZ800);
Bounce2::Button button = Bounce2::Button();

/////////////////INDEX für Tastendruckzälung
int index = 0;
int index1 = 0;
int index2 = 0;
int index3 = 0;
int index4 = 0;
int index5 = 0;
int index6 = 0;
int index7 = 0;
int index8 = 0;
int index9 = 0;

//////////Neopixel Farbverwaltung/zuweisung
const int MAX_COLORS = 3;

uint32_t colors[] = {
  pixels.Color(255, 200, 255),  //weiss
  pixels.Color(0, 0, 255),      //gruen
  pixels.Color(0, 0, 0),      //Aus
};

void setup() {
  Serial.begin(9600);
  pixels.begin();

  button.attach(buttonPin1, INPUT_PULLUP);
  button.attach(buttonPin2, INPUT_PULLUP);
  button.attach(buttonPin3, INPUT_PULLUP);
  button.attach(buttonPin4, INPUT_PULLUP);
  button.attach(buttonPin5, INPUT_PULLUP);
  button.attach(buttonPin6, INPUT_PULLUP);
  button.attach(buttonPin7, INPUT_PULLUP);
  button.attach(buttonPin8, INPUT_PULLUP);
  button.attach(buttonPin9, INPUT_PULLUP);
  button.interval(5);
  button.setPressedState(LOW);

  updateNeoPixel();

  pinMode(BUTTON_PIN1, INPUT);
  pinMode(BUTTON_PIN3, INPUT);
  pinMode(Tasterwert1, OUTPUT);
  pinMode(Tasterwert2, OUTPUT);
  pinMode(Tasterwert3, OUTPUT);
  pinMode(Tasterwert4, OUTPUT);
}

void updateNeoPixel() {
  
  pixels.clear();
  //eine Schleife von 0 bis 11 zum ansteuern der einzelnen NeoPixel
  for (int i = 0; i < numPixels; i++) {
    //setzen der Farbe aus dem Array mit dem Index
    pixels.setPixelColor(i, colors[index]);
    pixels.show();
  }
}

void loop() {
  //////////////////////////////////NeopixelZimmer1
  button.update();
  if (button.pressed()) {
    if (index == (MAX_COLORS-1)){
      index = 0;
    } else {
      index = index + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////NEOpixelZimmer2
  button.update();
  if (button.pressed()) {
    if (index1 == (MAX_COLORS-1)){
      index1 = 0;
    } else {
      index1 = index1 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////NeopixelZimmer3
      button.update();
  if (button.pressed()) {
    if (index2 == (MAX_COLORS-1)){
      index2 = 0;
    } else {
      index2 = index2 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////NeopixelZimmer4
      button.update();
  if (button.pressed()) {
    if (index3 == (MAX_COLORS-1)){
      index3 = 0;
    } else {
      index3 = index3 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////NeopixelZimmer5
      button.update();
  if (button.pressed()) {
    if (index4 == (MAX_COLORS-1)){
      index4 = 0;
    } else {
      index4 = index4 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////NeopixelZimmer6
      button.update();
  if (button.pressed()) {
    if (index5 == (MAX_COLORS-1)){
      index5 = 0;
    } else {
      index5 = index5 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////NeopixelZimmer7
      button.update();
  if (button.pressed()) {
    if (index6 == (MAX_COLORS-1)){
      index6 = 0;
    } else {
      index6 = index6 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////NeopixelZimmer8
      button.update();
  if (button.pressed()) {
    if (index7 == (MAX_COLORS-1)){
      index7 = 0;
    } else {
      index7 = index7 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  //////////////////////////////////NeopixelAussen
      button.update();
  if (button.pressed()) {
    if (index8 == (MAX_COLORS-1)){
      index8 = 0;
    } else {
      index8 = index8 + 1;
      Serial.println(index);
    }
    updateNeoPixel();
  }
  //////////////////Tastendruckauswertung von analog nach digitalwert für obige neopixel ansteuerung
    if(isButtonPressed(BUTTON[0])){
    Serial.println("Taster1");
    digitalWrite(Tasterwert1, HIGH);
  }
  else {
    digitalWrite(Tasterwert1, LOW);
  }
  if(isButtonPressed(BUTTON[1])){
    Serial.println("Taster2");
    digitalWrite(Tasterwert2, LOW);
  }
  else {
    digitalWrite(Tasterwert2, LOW);
  }
  if(isButtonPressed(BUTTON[2])){
    Serial.println("Taster3");
    digitalWrite(Tasterwert3, LOW);
  }
  else {
    digitalWrite(Tasterwert3, LOW);
  }
  if(isButtonPressed(BUTTON[3])){
    Serial.println("Taster4");
    digitalWrite(Tasterwert4, LOW);
  }
  else {
    digitalWrite(Tasterwert4, LOW);
  }
}

/////// Bool für Tastendruckermittlung ob gedrückt oder nicht mit einbeziehung der Tollerance
boolean isButtonPressed(unsigned int button){                   
  int analogValue = analogRead(BUTTON_PIN1);
  int analogValue = analogRead(BUTTON_PIN3);
  Serial.println(analogValue);

  return analogValue > button - BUTTON_TOLLERANCE
         && analogValue < button + BUTTON_TOLLERANCE;
}

Das wirft natürlich immernoch fehler beim compilieren und ich denke ich fange morgen nochmal ganz bei null an das wird wohl so nix mehr....

Einen Wiederstand mehr oder weniger einbauen tut mir nicht weh ich mach gleich mal bilder vom Gebäude Rohbau erster anstrich ist schon drauf eigentlich würde ich jetzt gerne die Kabelschlitze fräsen und die löcher für die taster aber erst möchte ich die software am laufen haben...

Der interne Chip des Pixels, bereitet das Signal auf, gibt es an das nächste Pixel weiter. Wenn der interne Chip durch parasitäre Versorgung zerstört wird, werden keine Daten aufgearbeitet und weitergesendet. Das ergibt, das darauf folgende Pixel keine Daten mehr erhalten und in dem Zustand bleiben, wie sie vorher waren, meist aus.