Zitat Zitat von i_make_it Beitrag anzeigen
Bei deinem Code defienierst Du ein Array mit 24 Werten, aber ohne dem Array mitzugeben das auch 24 Speicherplätze haben soll.
Ist unschöner Code. Wurde das nicht beim Compilieren angemeckert?
wenn du also 24 verschiedene Kanäle hast, warum hast Du dann nur einmal State und auch nur einmal preMills ?
Wann enthält State den Status von welchem der 24 Kanäle und wann enthällt preMills die Startzeit von welchem Kanal?

Anzahl2 ist ja der Index mit dem du alles was in
if(buttonState == Anzahl[Anzahl2])
drin ist zu 24 verschiedenen Programmteilen machst.
nur kannst Du mit State nicht 24 Verscheidene Zustände gleichzeitig speichern State[Anzahl2] könnte das.
Genau das Selbe bei preMills: --> preMills[Anzahl2].

Gehe Deinen Code erst mal durch und führe ihn auf Papier aus. Schreib Dir dazu immer auf welche Variable welchen Wert hat.
Dann fallen Dir solche Sachen sofort auf. denn die eine Variabel wird halt ständig neu befüllt und liefert dann für index 1 den Wert zurück der ihr vorher bei index 24 eingeschrieben wurde und schon lange nicht mehr den Wert der beim letzten Durchlauf von Index1 geschrieben wurde.
Also mir war es erstmal wichtig das es funktioniert! Schönmachen kann man es danach immer noch... Habe es jetzt komplett fertig aber anders gelöst. Falls es dich interessiert:
Code:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Conceptinetics.h>

DMX_Master        dmx_master ( 24 , 2 );

RF24 radio(7, 8); // CNS, CE
const byte address[6] = "00001";
long kanal;
#define ANZAHL_KANAL 24
uint32_t anschaltzeit[ANZAHL_KANAL];
int Anzahl[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24};
const uint32_t OnTime = 300;


void setup() {
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  dmx_master.enable ();
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MAX);
  radio.startListening();
}

void loop() {
  checkKanal();  
  if (radio.available()){
    radio.read(&kanal, sizeof(kanal));
      if(kanal == Anzahl[kanal-1]) {   
        kanalEinschalten(kanal);
      }
  }
}

void kanalEinschalten(byte nummer) { // 1 bis 24
   anschaltzeit[nummer-1] = millis();
   digitalWrite(nummer,HIGH);
   dmx_master.setChannelValue (nummer , 255);
}
void kanalAusschalten(byte nummer) { // 1 bis 24
   anschaltzeit[nummer-1] = 0;
   digitalWrite(nummer,LOW);
   dmx_master.setChannelValue (nummer , 0);
}
void checkKanal() {
  uint32_t aktMillis = millis();
  for(byte i=0; i<ANZAHL_KANAL; i++) {
    if (anschaltzeit[i] != 0 && aktMillis - anschaltzeit[i] >= OnTime) kanalAusschalten(i+1); 
  }
}
Ist zwar noch nicht ganz schön aber macht was es soll.

Trotzdem nochmal vielen dank!