Arduino based incubator - hangs - SOLVED - power supply issues

byte averageValue (byte maxIndex, byte array[])   //calculate average value from an array of bytes
{
  float average = 0.0;
  byte result;
  for (int i=0;i<=maxIndex;i++)
  {
    average += array[i];      
  }
  average/=(maxIndex+1);
  result=constrain(result,0.0,100.0);
  result = floor(average+0.5);
  return result;
}


byte minimumValue (byte maxIndex, byte array[])  //calculate minimum value from an array of bytes
{
  byte result;
  result = array[0];
  for (int i=1;i<=maxIndex;i++)
  {
    if(array[i]<result) result=array[i];    
  }
  return result;
}

byte maximumValue (byte maxIndex, byte array[]) //calculate maximum value from an array of bytes
{
  byte result;
  result = array[0];
  for (int i=1;i<=maxIndex;i++)
  {
    if(array[i]>result) result=array[i];    
  }
  return result;
}

void tempcalc() //calculate temperature values
{
  float temp = 0.0;
  temp = floor(temperature*10.0+0.5);
  temp = constrain(temp,166,421);
  temperature1Minute[temp1MinIndex]=map(temp,166,421,0,255);
  averageTemp1Minute = averageValue(5, temperature1Minute);
  maxTemp1Minute = maximumValue(5, temperature1Minute);
  minTemp1Minute = minimumValue(5, temperature1Minute);   

  if (temp1MinIndex == 5)
  {
    temp1MinIndex = 0;                                             //reset index
    temperature1Hour[temp1HourIndex] = averageTemp1Minute;

    if (fillUpArray)  fillarrays();//fill arrays with values 1 min after startup
    averageTemp1Hour = averageValue(59, temperature1Hour);
    maxTemp1Hour = maximumValue(59, temperature1Hour);
    minTemp1Hour = minimumValue(59, temperature1Hour);

    if (temp1HourIndex == 59) temp1HourIndex = 0;
    else temp1HourIndex++; 
  }
  else temp1MinIndex ++;     
}

void fillarrays() //fills arrays with first measurement 1 min after boot-up, run only once
{
  for (int i=0;i<=59;i++)
  {
    humidity1Hour[i]=humidity1Hour[0];
  }
  for (int i=0;i<=23;i++)
  {
    humidity24Hours[i]=humidity1Hour[0];
  }
  averageHum24Hours = averageValue (23, humidity24Hours); //calculate 24 h values right after boot-up
  minHum24Hours = minimumValue (23, humidity24Hours);
  maxHum24Hours = maximumValue (23, humidity24Hours);
  for (int i=1;i<=59;i++)
  {
    temperature1Hour[i]=temperature1Hour[0];
  }
  fillUpArray = false;
}

void lcdprint()  //display temperature, humidity and time online
{
  timevalue = curMillis - lcdMillis;

  if (timevalue > LCDTEMP1 && timevalue < LCDTEMP2 && lcdState!=0) //temp display
  {
    showString(PSTR("?f"));
    showString(PSTR("Temperatuur   "));
    float temp = 0.0;
    temp = map(averageTemp1Minute,0,255,166,421)/10.0;
    Serial.print(temp,1);  
    showString(PSTR("?0C**   Nu "));
    Serial.print(temperature);
    showString(PSTR("?0C   **"));
    showString(PSTR("Max 1m: "));
    temp = map(maxTemp1Minute,0,255,166,421)/10.0;
    Serial.print(temp,1);
    showString(PSTR("?0C?n"));
    showString(PSTR("Min 1m: "));
    temp = map(minTemp1Minute,0,255,166,421)/10.0;
    Serial.print(temp,1);
    showString(PSTR("?0C"));
    lcdState=0;  
  }

  if (timevalue > LCDTEMP2 && timevalue < LCDHUM1  && lcdState!=1)
  {
    float temp = 0.0;
    showString(PSTR("?f"));
    showString(PSTR("Gem temperatuur 1h: **     "));
    temp = map(averageTemp1Hour,0,255,166,421)/10.0;
    Serial.print(temp,1);  
    showString(PSTR("?0C     **"));
    showString(PSTR("Max: "));
    temp = map(maxTemp1Hour,0,255,166,421)/10.0;
    Serial.print(temp,1);
    showString(PSTR("?0C?n"));
    showString(PSTR("Min: "));
    temp = map(minTemp1Hour,0,255,166,421)/10.0;
    Serial.print(temp,1);
    showString(PSTR("?0C"));
    lcdState=1;
  }

  if (timevalue > LCDHUM1 && timevalue < LCDHUM2 && lcdState!=2)
  {                                                                //display rh
    float temp = 0.0;
    showString(PSTR("?f"));
    showString(PSTR("Rel Luchtvochtigheid"));
    Serial.print(averageHum1Min);
    showString(PSTR("%"));
    showString(PSTR("     Nu "));
    Serial.print(humidity);
    showString(PSTR("%freeRAM "));
    Serial.print(freeMemory());
    showString(PSTR(" / 2048"));
    //showString(PSTR("%Setpoint:?n"));
    //showString(PSTR("**       "));
    //Serial.print(map(Setpoint,0,1023,0,100));
    //showString(PSTR("%      **"));
    lcdState=2; 
  }

  if(timevalue > LCDHUM2 && timevalue < LCDTURN  && lcdState!=3)
  { 
    byte temp = 0;
    showString(PSTR("?f"));
    showString(PSTR("1 uur:    "));
    temp = averageHum1Hour;
    Serial.print(averageHum1Hour);
    showString(PSTR("%?n"));
    showString(PSTR("Min:  "));
    temp = minHum1Hour;
    Serial.print(minHum1Hour);
    showString(PSTR("% Max:   "));
    temp = maxHum1Hour;
    Serial.print(temp);
    showString(PSTR("%"));
    showString(PSTR("24 uur:   "));
    temp = averageHum24Hours;
    Serial.print(temp);
    showString(PSTR("%?n"));
    showString(PSTR("Min:  "));
    temp = minHum24Hours;
    Serial.print(temp);
    showString(PSTR("%"));
    showString(PSTR(" Max:   "));
    temp = maxHum24Hours;
    Serial.print(temp);
    showString(PSTR("%"));    
    lcdState=3; 
  }

  if(timevalue > LCDTURN && timevalue < LCDPID  && lcdState!=4)
  {                                                                  //display time incubator has been online
    showString(PSTR("?f"));
    showString(PSTR("freeRAM "));
    Serial.print(freeMemory());
    showString(PSTR(" / 2048"));
    showString(PSTR("?n  Kast staat al?n"));
    //showString(PSTR("     "));
    Serial.print(curMillis/86400000);
    showString(PSTR("d "));
    Serial.print((curMillis%86400000)/3600000);
    showString(PSTR("h "));
    Serial.print((curMillis%3600000)/60000);
    showString(PSTR("m aan?n"));
    //showString(PSTR("****    aan    *****"));
    showString(PSTR("freeRAM "));
    Serial.print(freeRam());
    showString(PSTR(" / 2048"));
    lcdState=4; 
  }

  if(timevalue > LCDPID && timevalue < LCDSTOP  && lcdState!=5)
  {
    showString(PSTR("?f"));
    showString(PSTR("Instellingen RL PID ")); 
    showString(PSTR("P="));
    float temp = 0.0;
    temp = PTERM;
    Serial.print(temp);  
    showString(PSTR(" I="));
    temp = ITERM;
    Serial.print(temp); 
    showString(PSTR("?n"));
    showString(PSTR("D="));
    temp = DTERM; 
    Serial.print(temp);
    showString(PSTR("?n"));
    showString(PSTR("  Mist aan "));
    temp = Output*100.0/windowSize;
    Serial.print(temp); 
    showString(PSTR(" %"));
    lcdState=5;  
  }     
  if(curMillis - lcdMillis > LCDSTOP) lcdMillis = curMillis;
}

void showString (PGM_P s)                              //store strings in flash memory
{
  char c;
  while ((c = pgm_read_byte(s++)) != 0)
    Serial.print(c);
}

int freeRam ()                                         //returns free RAM
{
  extern int __heap_start, *__brkval; 
  int v; 
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
}