Fehlersuche bei globaler Varablen

Hallo,
mal wieder ein für mich nicht nachvollziehbares Problem.
Ich nutze die Z_OSC Library um mittels iPhone und Ethernet board mit meinem Arduino zu kommunizieren.
Den ganzen Code hänge ich zunächst nicht an,hoffe die folgenden Parts reichen aus.

Hier lege ich die globalen Variablen fest:

int ram[12];
int color;
int fader[17];
int settingsfader[12];
int power = 0;
int fans = 0;
int inByte;
String devicename[30] = { "/LEDfader/", "/LEDsettings/", "/refresh", "/power", "/setblue", "/setwhite", "/setred", "/setviolet", "/writeToLED", 
                    //     1             2                3           4         5           6            7          8             9           
                          "/StrModAuto", "/StrModMan", "/StrModFeed", "/StrModeDef", "/StrDefModes", "/synch",  "/strIntLow", "/strIntHigh",  "/jebaoPump", "/tunzePump", "/strStop", "/strLowms", "/strHighms",
                    //     10             11            12             13             14              15         16            17              18            19            20          21           22
                          "/lighttime", "/contrtime", "/temp", "/heater", "/LEDfans", "/moon" ,"/v", "/a"}; 
                    //     23            24            25       26         27          28       29    30
boolean manualmode=0;  
boolean defaultmodes=0;

Hier lese ich die Daten vom iPhone / TouchOSC / Z_OSC Library ein:

void readSERVER() {
  if(server.available()){
    rcvMes=server.getMessage();
    writeXBEE(rcvMes->getZ_OSCAddress(),rcvMes->getFloat(0));  
  }
}

Hier werte ich die Daten aus (habe nicht alle aufgeführt):

void writeXBEE(String text,float val) {
 //SETBLUE
  if(text==devicename[4] && val==1) {
    sendDataOut (4, 0, 0);
    color=0; 
  }
  //SETWHITE
  if(text==devicename[5] && val==1) {
    sendDataOut (4, 1, 0);
    color=1;
  }
  //SETRED
  if(text==devicename[6] && val==1) {
    sendDataOut (4, 2, 0);
    color=2; 
  }
  //SETVIOLET
  if(text==devicename[7] && val==1) {
    sendDataOut (4, 3, 0);
    color=3;
  }
  
  //WRITE
  if(text==devicename[8] && val==1) {
    Serial.println(devicename[8]);
    Serial.println(color);
    if (color==0) {
      for (int i=1; i<13; i++) sendDataOut (5, (i+6), ram[i]);
    }
    if (color==1) {
      for (int i=1; i<13; i++) sendDataOut (6, (i+6), ram[i]);
    }
    if (color==2) {
      for (int i=1; i<13; i++) sendDataOut (7, (i+6), ram[i]);
    }
    if (color==3) {
      for (int i=1; i<13; i++) sendDataOut (8, (i+6), ram[i]);
    }
  }

Mein Problem ist folgendes:
Ich habe die globale Variable ‘color’ festgelegt. wenn ich über OSC nun die Info “/setblue” schicke, wird die Variable auf 0 gesetzt. Das klappt auch soweit, konnte ich über Serial.print reproduzieren.
Wenn ich nun über ‘/writeToLED’ die Variable auf ihren Wert überprüfe, erhalte ich einen komplett anderen Wert.
Was ich herausgefunden habe:
Ich schicke bei ‘setblue’ Daten über XBEE an einen zweiten XBEE:

if(text==devicename[4] && val==1) {
    sendDataOut (4, 0, 0);
    color=0; 
  }

Dort wird 4,0,0 ausgewertet und antworten so:

    if (incomingByte[0]==4) {    
      if (incomingByte[1]==0) {
        for (int i=7; i<19; i++) {
          unsigned int mapvalue = map(lightArray[0][i],255,0,0,255);
          writeToXBEE(2, (i-7), mapvalue);  
        }
      }

Er schicktmir also 12 Werte (payloads mit drei bytes) als Byte zurück.
Das klappt auch alles wunderbar. Wenn ich mir nun den Wert für color ausgeben lasse, entspricht color genau dem Wert, der mit i=18 zurückgesendet wurde.
und das kann ich einfach nicht nachvollziehen. Color müsste doch noch auf Wert 0 (oder 1, 2, 3 je nach Farbe) stehen.

Hoffe, dass mir irgendjemand weiterhelfne kann.
VG
Thorsten

Der Vollständigkeit halber hier doch mal beide Sketches.
Wenn ihr irgendwo Optimierungspotenzial seht, wäre das auch sehr hilfreich, da es doch schon sehr viele Abfragen sind.
Hier der Sketch, der direkt über das <ethernet Board mit OSC kommuniziert:

//ETHERNET
#include <Ethernet.h>
#include <SPI.h>
byte myMac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte myIp[]  = { 192,168,0,110 };  //Arduino Ethernet IP
byte destIp[] =  { 192,168,0,101 }; //iPhone IP
int  serverPort  = 8000; //Arduino Port
int  destPort = 9000; //iPhone Port

//Z OSC
#include <Z_OSC.h>

// Initialisierung des OSC-Servers
Z_OSCClient client;
Z_OSCServer server;
Z_OSCMessage *rcvMes;
Z_OSCMessage message;

//XBEE
byte incomingByte[3] = {0, 0, 0};
#include <XBee.h>
XBee xbee = XBee();
XBeeResponse response = XBeeResponse();
uint8_t payload[] = { 0, 0, 0 };
Tx16Request tx1113 = Tx16Request(0x1113, payload, sizeof(payload)); //LIGHT 
Tx16Request tx1112 = Tx16Request(0x1112, payload, sizeof(payload)); //CONTROL
TxStatusResponse txStatus = TxStatusResponse();
Rx16Response rx16 = Rx16Response();


//CHANNEL C0
//PanID=2222
//BAUDRATE 57600
//API2 ENABLED 
//XBEE SERVER: MY=1111; COORDINATOR
//XBEE LIGHT: MY=1113; END DEVICE
//XBEE CONTROL: MY=1112; END DEVICE

//sonstige Variablen
int ram[12];
int color;
int fader[17];
int settingsfader[12];
int power = 0;
int fans = 0;
int inByte;
String devicename[30] = { "/LEDfader/", "/LEDsettings/", "/refresh", "/power", "/setblue", "/setwhite", "/setred", "/setviolet", "/writeToLED", 
                    //     1             2                3           4         5           6            7          8             9           
                          "/StrModAuto", "/StrModMan", "/StrModFeed", "/StrModeDef", "/StrDefModes", "/synch",  "/strIntLow", "/strIntHigh",  "/jebaoPump", "/tunzePump", "/strStop", "/strLowms", "/strHighms",
                    //     10             11            12             13             14              15         16            17              18            19            20          21           22
                          "/lighttime", "/contrtime", "/temp", "/heater", "/LEDfans", "/moon" ,"/v", "/a"}; 
                    //     23            24            25       26         27          28       29    30
boolean manualmode=0;  
boolean defaultmodes=0; 

void setup() {
  Ethernet.begin(myMac ,myIp);
  server.sockOpen(serverPort);
  Serial.begin(19200);
  Serial1.begin(19200);
  xbee.setSerial(Serial1);  
}


void loop() {
  readXBEE();
  readSERVER();
}

void readSERVER() {
  if(server.available()){
    rcvMes=server.getMessage();
    writeXBEE(rcvMes->getZ_OSCAddress(),rcvMes->getFloat(0));  
  }
}

void sendDataOut(byte a, byte b, byte c) {
  payload[0] = a;
  payload[1] = b;
  payload[2] = c;
  if (a>10) {
    xbee.send(tx1112);
        Serial.print("Abgehend an 1112:");
    Serial.print(a);
     Serial.print(" / ");
      Serial.print(b);
       Serial.print(" / ");
        Serial.println(c);   
  }
  if (a<10) {
    xbee.send(tx1113);
        Serial.print("Abgehend an 1113:");
    Serial.print(a);
     Serial.print(" / ");
      Serial.print(b);
       Serial.print(" / ");
        Serial.println(c);   
  }
}

void writeXBEE(String text,float val) {
  //LED FADER
  if (power==1) { 
    for (int i=1; i<18; i++) {
      if(text==(devicename[0]+i)) sendDataOut (1, (i-1), (int)val);
    } 
  }
  //LEDSETTINGS
  for (int i=1; i<13; i++) {
    if(text==(devicename[1]+i)) ram[i] = val;    
  }  
  //REFRESH  
  if(text==devicename[2]) {
    if (val==1) {sendDataOut (2, 0, 0);
    Serial.println("Refresh");
  }  }
  
  //POWER
  if(text==devicename[3]) {
    Serial.println("Power");
    power = (int) val;
    if ((int)val==1) sendDataOut (3, 0, val);
    else if ((int)val==0) {
      resetFader();
      sendDataOut (3, 0, val);
    }
  }
  
  //SETBLUE
  if(text==devicename[4] && val==1) {
    sendDataOut (4, 0, 0);
    color=0; 
  }
  //SETWHITE
  if(text==devicename[5] && val==1) {
    sendDataOut (4, 1, 0);
    color=1;
  }
  //SETRED
  if(text==devicename[6] && val==1) {
    sendDataOut (4, 2, 0);
    color=2; 
  }
  //SETVIOLET
  if(text==devicename[7] && val==1) {
    sendDataOut (4, 3, 0);
    color=3;
  }
  
  //WRITE
  if(text==devicename[8] && val==1) {
    Serial.println(devicename[8]);
    Serial.println(color);
    if (color==0) {
      for (int i=1; i<13; i++) sendDataOut (5, (i+6), ram[i]);
    }
    if (color==1) {
      for (int i=1; i<13; i++) sendDataOut (6, (i+6), ram[i]);
    }
    if (color==2) {
      for (int i=1; i<13; i++) sendDataOut (7, (i+6), ram[i]);
    }
    if (color==3) {
      for (int i=1; i<13; i++) sendDataOut (8, (i+6), ram[i]);
    }
  }

 
 // STREAMMMODES 
  if(text==(devicename[9]+1) && val==1) {
    manualmode=0;
    defaultmodes=0;
    sendDataOut (11, 0, 0);
    sendtoOSC (10, 2, 0);
    sendtoOSC (11, 1, 0);
    sendtoOSC (12, 1, 0);
    sendtoOSC (13, 1, 0); 
    sendtoOSC (14, 1, 0);
    sendtoOSC (14, 2, 0);
    sendtoOSC (14, 3, 0); 
  }  
  
  if(text==(devicename[9]+2) && val==1) {
    manualmode=0;
    defaultmodes=0;
    sendDataOut (11, 1, 0);
    sendtoOSC (10, 1, 0);
    sendtoOSC (11, 1, 0);
    sendtoOSC (12, 1, 0);
    sendtoOSC (13, 1, 0); 
    sendtoOSC (14, 1, 0);
    sendtoOSC (14, 2, 0);
    sendtoOSC (14, 3, 0);   
  }  

  if(text==(devicename[10]+1) && val==1) {
    manualmode=1;
    defaultmodes=0;   
    sendDataOut (11, 2, 0);
    sendtoOSC (10, 1, 0);
    sendtoOSC (10, 2, 0);
    sendtoOSC (12, 1, 0);
    sendtoOSC (13, 1, 0);
    sendtoOSC (14, 1, 0);
    sendtoOSC (14, 2, 0);
    sendtoOSC (14, 3, 0);   
  }   
   if(text==(devicename[11]+1) && val==1) {
    manualmode=0;    
    defaultmodes=0;
    sendDataOut (11, 3, 0);
    sendtoOSC (10, 1, 0);
    sendtoOSC (10, 2, 0);
    sendtoOSC (11, 1, 0);
    sendtoOSC (13, 1, 0); 
    sendtoOSC (14, 1, 0);
    sendtoOSC (14, 2, 0);
    sendtoOSC (14, 3, 0);   
  }   
  if(text==(devicename[12]+1) && val==1) {
    manualmode=0;   
    defaultmodes=1;
    sendDataOut (11, 4, 1);
    sendtoOSC (10, 1, 0);
    sendtoOSC (10, 2, 0);    
    sendtoOSC (11, 1, 0);
    sendtoOSC (12, 1, 0); 
    sendtoOSC (14, 1, 1);
    sendtoOSC (14, 2, 0);
    sendtoOSC (14, 3, 0);   
  }
  if(text==(devicename[9]+1) && val==0) sendtoOSC (10, 1, 1);
  if(text==(devicename[9]+2) && val==0) sendtoOSC (10, 2, 1);  
  if(text==(devicename[10]+1) && val==0) sendtoOSC (11, 1, 1);  
  if(text==(devicename[11]+1) && val==0) sendtoOSC (12, 1, 1);
  if(text==(devicename[12]+1) && val==0) sendtoOSC (13, 1, 1);  
  
  if (defaultmodes==1) {
    for (int i=1; i<4; i++) {
      if (text==(devicename[13]+i) && val==1) {
        sendDataOut (11, 3, i);
        sendtoOSC (14, 1, 0);
        sendtoOSC (14, 2, 0);
        sendtoOSC (14, 3, 0);
        sendtoOSC (14, i, 1);
      }
      if (text==(devicename[13]+i) && val==0) sendtoOSC (13, i, 1);
    }
  }
  if (defaultmodes==0) {
    for (int i=1; i<4; i++) {
      if (text==(devicename[13]+i) && val==1) sendtoOSC (13, i, 0);
    }
  }
  //STREAMSPEED
  if (manualmode==1) {
    if(text==devicename[14]) sendDataOut (12, val, 0);  //SYNCH
    if(text==(devicename[15]+1)) {     //LOW INTERVALL
      sendDataOut (13, 0, val);
      sendtoOSC(21,1,map(val,0,255,0,5000));
    }
    if(text==(devicename[16]+1)) {     //HIGH INTERVALL
      sendDataOut (13, 1, val); 
      sendtoOSC(22,1, (val,0,255,0,5000));
    } 
    if(text==(devicename[17]+1)) sendDataOut (14, 0, val);  //JEBAO LOW
    if(text==(devicename[17]+2)) sendDataOut (14, 1, val);  //JEBAO HIGH
    if(text==(devicename[18]+1)) sendDataOut (14, 2, val);  //TUNZE LOW
    if(text==(devicename[18]+2)) sendDataOut (14, 3, val);  //TUNZE HIGH
    if(text==(devicename[19]+1)) sendDataOut (15, 0, val);  //STOP1
    if(text==(devicename[19]+2)) sendDataOut (15, 1, val);  //STOP2
  }
}

void readXBEE() {
  xbee.readPacket();
  if (xbee.getResponse().isAvailable()) {
    if (xbee.getResponse().getApiId() == RX_16_RESPONSE) {
      xbee.getResponse().getRx16Response(rx16);
      incomingByte[0]=rx16.getData(0);
      incomingByte[1]=rx16.getData(1);  
      incomingByte[2]=rx16.getData(2);	
      sendtoOSC(incomingByte[0],(incomingByte[1]+1), incomingByte[2]);
      Serial.print("Eintreffend:");
       Serial.print(incomingByte[0]);
     Serial.print(" / ");
      Serial.print(incomingByte[1]);
       Serial.print(" / ");
        Serial.println(incomingByte[2]);   
    } 
  }
}


void sendtoOSC(int device, int channel, int value)
{
  if (device==2) ram[channel]=value;  
  char buffer[10];
  Z_OSCMessage message;  
  message.setAddress(destIp,destPort);
  String sendingname = devicename[device-1]+channel;  
  byte len = sendingname.length() + 1;
  char OSCname[len];
  sendingname.toCharArray(OSCname,len);  
  message.setZ_OSCMessage(OSCname,"s",itoa(value,buffer,10));
  client.send(&message);    
  message.flush(); 
}
 
void resetFader() {
  for (int i=0; i<16; i++) {
    fader[i] = 0;
    sendtoOSC(1,(i+1),0);
  }
}

Und hier der Sketch des zweiten Arduinos, der entsprechend Daten zurücksendet:

//****************************************TLC5940 LED-LAMPE************************************
#include "Tlc5940.h"
byte moonshine;
byte brightness=255;
unsigned int valueLight[16];
unsigned int storing[16];
unsigned int prevValueLight[16];
const byte LEDcooling1 = 6;
const byte LEDcooling2 = 7;
byte modus = 0;
byte fanMode = 0;
boolean statXbee = false;
boolean neustart = true;
boolean fanStat = false;

//*****************************************Light Fading Arrays******************************************
                   // blau1| blau2| blau3| blau4| blau5| weiß1| weiß2| weiß3| weiß4| weiß5| rotli| rotre| 420li| 420re| 400nm| Moon
const byte LED[] = {      5,     0,     1,    14,    11,     3,     9,     6,     7,    10,     4,    12,    13,     8,     2,   15}; //2 und 15 anpassen
                            // 0  | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9  | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23  
byte lightArray[16] [24] = { { 255, 255, 255, 255, 255, 255, 255, 220, 155,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 220, 255, 255, 255 }, 
                             { 255, 255, 255, 255, 255, 255, 255, 220, 155,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 220, 255, 255, 255 },  
                             { 255, 255, 255, 255, 255, 255, 255, 220, 155,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 220, 255, 255, 255 }, 
                             { 255, 255, 255, 255, 255, 255, 255, 220, 155,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 220, 255, 255, 255 },  
                             { 255, 255, 255, 255, 255, 255, 255, 220, 155,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 220, 255, 255, 255 },  
                             { 255, 255, 255, 255, 255, 255, 255, 255, 155,  95,  30,  30,  30,  30,  30,  30,  30,  30,  95, 155, 255, 255, 255, 255 },  
                             { 255, 255, 255, 255, 255, 255, 255, 255, 155,  95,  30,  30,  30,  30,  30,  30,  30,  30,  95, 155, 255, 255, 255, 255 }, 
                             { 255, 255, 255, 255, 255, 255, 255, 255, 155,  95,  30,  30,  30,  30,  30,  30,  30,  30,  95, 155, 255, 255, 255, 255 },  
                             { 255, 255, 255, 255, 255, 255, 255, 255, 155,  95,  30,  30,  30,  30,  30,  30,  30,  30,  95, 155, 255, 255, 255, 255 },  
                             { 255, 255, 255, 255, 255, 255, 255, 255, 155,  95,  30,  30,  30,  30,  30,  30,  30,  30,  95, 155, 255, 255, 255, 255 },  
                             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, 
                             { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },  
                             { 255, 255, 255, 255, 255, 255, 255, 255, 95,    0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 125, 255, 255, 255, 255 }, 
                             { 255, 255, 255, 255, 255, 255, 255, 255, 95,    0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 125, 255, 255, 255, 255 },
                             { 255, 255, 255, 255, 255, 255, 255, 255, 95,    0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 125, 255, 255, 255, 255 }, 
                             { 180, 180, 180, 185, 190, 200, 230, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 230, 200, 190 } }; 
                               //  0  | 10 | 20 | 30 | 40 | 50 | 60
const byte SunSetArray[5] [7] = { { 220, 220, 255, 255, 255, 255, 255 },
                                 { 220, 220, 220, 255, 255, 255, 255 },
                                 { 220, 220, 220, 220, 255, 255, 255 },
                                 { 220, 220, 220, 220, 220, 255, 255 },
                                 { 220, 220, 220, 220, 220, 220, 255 } };
                                //  0  | 10 | 20 | 30 | 40 | 50 | 60
const byte SunDawnArray[5] [7] = { { 255, 255, 220, 220, 220, 220, 220 },
                                  { 255, 255, 255, 220, 220, 220, 220 },
                                  { 255, 255, 255, 255, 220, 220, 220 },
                                  { 255, 255, 255, 255, 255, 220, 220 },
                                  { 255, 255, 255, 255, 255, 255, 220 } };
//****************************************DS18B20 Temperatur **********************************
#include <DS18B20.h>
DS18B20_List ds18b20(A7); 
#define ID_OUTSIDE 0xABC5
float TempLED[2];
byte temp[4];
byte prevTemp[2];
//****************************************DS1307 RealTimeClock*********************************
#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 RTC;
byte sec, mins, hour, day, date, month, year;
byte time[2];
byte prevValueTime[2];
//**************************************************XBEE***************************************
byte incomingByte[3] = {0, 0, 0 };
#include <XBee.h>
XBee xbee = XBee();
XBeeResponse response = XBeeResponse();
uint8_t payload[] = { 0, 0, 0 };
Tx16Request tx1111 = Tx16Request(0x1111, payload, sizeof(payload));
TxStatusResponse txStatus = TxStatusResponse();
Rx16Response rx16 = Rx16Response();

//**************************************************EEPROM***************************************
#include <EEPROM.h>

Wegen Zeichenbegrenzung hier noch mehr Code:

void setup()
{ 
//****************************************DS1307 RealTimeClock*********************************
  Wire.begin();
  RTC.begin();
//  RTC.adjust(DateTime(__DATE__, __TIME__));  
//****************************************TLC5940 LED-LAMPE************************************
  Tlc.init();
  Tlc.update();
  pinMode(LEDcooling2, OUTPUT);
  pinMode(LEDcooling1, OUTPUT);
  digitalWrite(LEDcooling1, HIGH);
  digitalWrite(LEDcooling2, HIGH);
  pinMode(13, OUTPUT);
  digitalWrite(13,LOW);
//****************************************DS18B20 Temperatur***********************************
  ds18b20.count;
//**************************************************XBEE***************************************  
  Serial.begin(19200); 
  xbee.setSerial(Serial);  
}

void getTime() {
  DateTime now = RTC.now();
  hour= now.hour();
  mins= now.minute();
  sec= now.second();
  date= now.day();
  month= now.month();
  year= now.year();
  time[0]=hour;
  time[1]=mins;
  for (int i=0; i<2; i++) {
    if (prevValueTime[i] != time[i]) {
      writeToXBEE(23, i, time[i]);
      prevValueTime[i] = time[i];
    }
  }
}  

int moonphase(int YearMoon,int MonthMoon,int DayMoon) { 
  double M; 
  int XYear,Century; 
  int a;  
  if(MonthMoon<=2)  
  { 
	YearMoon--; 
	MonthMoon+=12; 
  } 
  MonthMoon-=3; 
  XYear=YearMoon % 100;           	
  a = YearMoon / 100;
  Century=(a*146097) >> 2; 
  XYear=(XYear*1461) >> 2;           	
  M=(floor(((((MonthMoon*153)+2)/ 5)+DayMoon)+1721119+XYear+Century)+4.867)/29.53058; 
  int result = (2*(M-floor(M))-1) * 100; 
  if (result<0) result = result*(-1);
  return result;
}

weiter:

void getLight() {
  for (int i=0; i<16; i++) { 
    if (i<5) {
      if ((hour>6 && hour<=19) || hour==21 || hour==22 || hour<6) valueLight[i] = fadeLight(mins, sec, map(lightArray[i][hour+1],0,255,0,4095), map(lightArray[i][hour],0,255,0,4095));
      if (hour==20) valueLight[i] = SunSet(mins, sec, map(SunSetArray[i][(mins/10)+1],0,255,0,4095), map(SunSetArray[i][(mins/10)],0,255,0,4095));
      
      if (hour==23) valueLight[i] = fadeLight(mins, sec, map(lightArray[i][0],0,255,0,4095), map(lightArray[i][hour],0,255,0,4095));
      if (hour==6) {
        if (mins<50) {
          valueLight[i] = SunDawn(mins, sec, map(SunDawnArray[i][(mins/10)+1],0,255,0,4095), map(SunDawnArray[i][(mins/10)],0,255,0,4095));
        }
        if (mins>=50) {
          valueLight[i] = SunDawn(mins, sec, map(lightArray[i][hour+1],0,255,0,4095), map(SunDawnArray[i][(mins/10)],0,255,0,4095));
        }
      }      
    }
    if (i>=5 && i<15) { 
      if (hour<23) valueLight[i] = fadeLight(mins, sec, map(lightArray[i][hour+1],0,255,0,4095), map(lightArray[i][hour],0,255,0,4095));
      if (hour==23) valueLight[i] = fadeLight(mins, sec, map(lightArray[i][0],0,255,0,4095), map(lightArray[i][hour],0,255,0,4095));
    }
    if (i==15) {
      if (hour<23) valueLight[i] = map(moonshine,0,100,4095,(fadeLight(mins, sec, map(lightArray[i][hour+1],0,255,0,4095), map(lightArray[i][hour],0,255,0,4095))));
      if (hour==23) valueLight[i] = map(moonshine,0,100,4095,(fadeLight(mins, sec, map(lightArray[i][0],0,255,0,4095), map(lightArray[i][hour],0,255,0,4095)))); 
    }
    if (prevValueLight[i] != valueLight[i]) {
      unsigned int mapvalue = map(valueLight[i],4095,0,0,255);
      writeToXBEE(1, i, mapvalue);
      prevValueLight[i] = valueLight[i];
    }
  }
} 
 
int fadeLight(int minute, int sekunde, const int PWMvalueSoon, const int PWMvalueNow) {
  float bruch = (float)3600 / (PWMvalueSoon - PWMvalueNow);
  int result;
  result = PWMvalueNow + ((3600 - (3600 - ((minute * 60) + (sekunde * 1)))) / bruch);
  return result;
}       

int SunSet(int minute, int sekunde, const int SunSetvalueSoon, const int SunSetvalueNow) {
  float bruch = (float)600 / (SunSetvalueSoon - SunSetvalueNow);
  int result;
  result = SunSetvalueNow + ((600 - (600 - (((minute%10)*60) + (sekunde * 1)))) / bruch);
  return result;
}
 
int SunDawn(int minute, int sekunde, const int SuDawnvalueSoon, const int SuDawnvalueNow) {
  float bruch = (float)600 / (SuDawnvalueSoon - SuDawnvalueNow);
  int result;
  result = SuDawnvalueNow + ((600 - (600 - (((minute%10)*60) + (sekunde * 1)))) / bruch);
  return result;
} 

void coolLED() {
  for (int i=0; i<16; i++) valueLight[i] = 3000;
}

void setLight() {
  for (int i=0; i<16; i++) {
    Tlc.set(LED[i], valueLight[i]);
    Tlc.update();
  }
}

//************************************Temperature********************************************

und noch mehr:

//******************************************************************************************* 


void checkTemp() {
  if (modus==0) {
    if ((TempLED[0] || TempLED[1]) >= 48) modus=1;
  }
  if (modus==1) {
    if ((TempLED[0] && TempLED[1]) < 35) modus=0;
  }
} 

void setLEDfans() {
  if (hour>=8 && hour<20) setfanson();
  else setfansoff();
}

void setfanson() {
  digitalWrite (LEDcooling1, HIGH);
  digitalWrite (LEDcooling2, HIGH);
  if (fanStat==false) {
    writeToXBEE(27, 0, 1);
    fanStat=true;
  }  
}

void setfansoff() {
  digitalWrite (LEDcooling1, LOW);
  digitalWrite (LEDcooling2, LOW);
  if (fanStat==true) {
    writeToXBEE(27, 0, 0);
    fanStat=false;
  } 
}


//**************************************************XBEE***************************************

void readXBEE() {
  xbee.readPacket();
  if (xbee.getResponse().isAvailable()) {    
    if (xbee.getResponse().getApiId() == RX_16_RESPONSE) {
      xbee.getResponse().getRx16Response(rx16);
      incomingByte[0]=rx16.getData(0);
      incomingByte[1]=rx16.getData(1);  
      incomingByte[2]=rx16.getData(2);
      
      //LEDFADER & BRIGHTNESS
      if (modus==5) {
        if (incomingByte[0]==1) {
          if (incomingByte[1]<16) {
            if (incomingByte[2]<=4) storing[incomingByte[1]]=4095;
            else storing[incomingByte[1]] = map(incomingByte[2],0,255,4095,0);
          }
          else if (incomingByte[1]==16) brightness=incomingByte[2];  
          for (int i=0; i<16; i++) valueLight[i] = (float) storing[i] / 255 * brightness;       
        }
      }
    //REFRESH
    if (incomingByte[0]==2) {
      for (int i=0; i<16; i++) {
        byte mapvalue = map(valueLight[i],4095,0,0,255);
        writeToXBEE(1, i, mapvalue);
      }
      for (int j=2; j<6; j++) writeToXBEE(25, j, temp[j]);
      for (int k=0; k<2; k++) writeToXBEE(23, k, time[k]);
      writeToXBEE(28, 0, moonshine);
      writeToXBEE(27, 0, fanStat);
    }
    //POWER
    if (incomingByte[0]==3) {
      if (incomingByte[2]==1) modus=5;
      if (incomingByte[2]==0) {
        modus=0;
        for (int i=0; i<16; i++) {
          unsigned int mapvalue = map(valueLight[i],4095,0,0,255);
          writeToXBEE(1, i, mapvalue);
          prevValueLight[i] = valueLight[i];
        }
      }
    }    
    //GET FADER SETTINGS    
    if (incomingByte[0]==4) {    
      if (incomingByte[1]==0) {
        for (int i=7; i<19; i++) {
          unsigned int mapvalue = map(lightArray[0][i],255,0,0,255);
          writeToXBEE(2, (i-7), mapvalue);  
        }
      }      
      if (incomingByte[1]==1) {
        for (int i=7; i<19; i++) {
          unsigned int mapvalue = map(lightArray[5][i],255,0,0,255);
          writeToXBEE(2, (i-7), mapvalue); 
        }
      } 
      if (incomingByte[1]==2) {
        for (int i=7; i<19; i++) {
          unsigned int mapvalue = map(lightArray[10][i],255,0,0,255);
          writeToXBEE(2, (i-7), mapvalue);  
        }
      } 
      if (incomingByte[1]==3) {
        for (int i=7; i<19; i++) {
          unsigned int mapvalue = map(lightArray[12][i],255,0,0,255);
          writeToXBEE(2, (i-7), mapvalue);  
        }
      }
    }      
    //WRITE NEW SETTINGS 
    if (incomingByte[0]==5) {
      unsigned int mapvalue = map(incomingByte[2],0,255,255,0);
      for (int i=0; i<5; i++) lightArray[i][incomingByte[1]] = mapvalue; 
    }    
    if (incomingByte[0]==6) {
      unsigned int mapvalue = map(incomingByte[2],0,255,255,0);
      for (int i=5; i<10; i++) lightArray[i][incomingByte[1]] = mapvalue; 
    }    
    if (incomingByte[0]==7) {
      unsigned int mapvalue = map(incomingByte[2],0,255,255,0);
      for (int i=10; i<12; i++) lightArray[i][incomingByte[1]] = mapvalue; 
    }    
    if (incomingByte[0]==8) {
      unsigned int mapvalue = map(incomingByte[2],0,255,255,0);
      for (int i=12; i<15; i++) lightArray[i][incomingByte[1]] = mapvalue; 
    }    
  }}
}

und der Rest:

void writeToXBEE(byte device, byte channel, byte value) {
  payload[0] = device;
  payload[1] = channel;		
  payload[2] = value;		
  xbee.send(tx1111);
}

void getTemp() {
  ds18b20.update();
  for (int i=0;i<2;i++) TempLED[i] = ds18b20.get_temp(i);
  temp[0] = lround(TempLED[0]*100)/100;
  temp[1] = lround(TempLED[0]*100)%100;
  temp[2] = lround(TempLED[1]*100)/100;
  temp[3] = lround(TempLED[1]*100)%100;        
  if (prevTemp[0] != temp[1] || prevTemp[1] != temp[3]) {
    for (int j=0; j<4; j++) writeToXBEE(25, (j+2), temp[j]);
    prevTemp[0] = temp[1];
    prevTemp[1] = temp[3];
    checkTemp(); 
  }  
}

//**********************************************MAIN*******************************************
//*********************************************************************************************
void loop()
{ 
  if (neustart==true) {
      getTime(); 
      moonshine = moonphase(year, month, date);
      writeToXBEE(28, 0, moonshine);
      //EEPROM Read for lightArray[16] [24]
      neustart=false;
  }
  getTemp();
  getTime(); 
  readXBEE();
  if (hour==18 && mins==0 && sec<2) { 
    moonshine = moonphase(year, month, date);
    writeToXBEE(28, 0, moonshine);
  }
  if (modus==0) getLight();  
  if (modus==1) coolLED(); 
  setLight();
  if (fanMode==0) setLEDfans(); 
}

herje - keiner einen Tipp?
Ihr braucht zunächst nur Beitrag#1 lesen, der rest ist nur der vollständigkeit halber.
Bin immer noch auf der Suche aber werde NULLLLLL Schlau