     }
   }
 }
+
+// Hue, saturation and value definition need to be here
+uint8_t hue, saturation, value;
 
 // Flag and time are used to seed a new game with a delay
 boolean seedFlag = false;

  return 0;
}

uint8_t hue, from_hue, to_hue; //all living cells have a slowly changing colour
void GoLseed(){
  // seed initial cells
  for(uint8_t y=0; y!=ROWS; ++y){

  }
}

//all living cells have a slowly changing colour
uint8_t from_hue, to_hue, from_sat, to_sat, from_val, to_val; 
void generateColour(){
  to_hue = random(H_MIN,H_MAX);
  to_sat = random(S_MIN,S_MAX);
  to_val = random(V_MIN,V_MAX);
}
uint8_t interpolate(uint8_t from, uint8_t to, uint8_t frac){
  //interpolate between FROM and TO, based on FRAC
  return (uint8_t) (( (uint16_t)from * (255-frac) + (uint16_t)to * frac ) / 255);
}
uint16_t hue_i = 0;
void sendColors(){
  // interpolate between from_hue and to_hue
  if(++hue_i == HUE_SLOWDOWN*255){
    //select a new hue
    from_hue = to_hue;
    from_sat = to_sat;
    from_val = to_val;
    generateColour();
    
    hue_i = 0;
  }
  hue = interpolate(from_hue,to_hue,hue_i/HUE_SLOWDOWN);
  saturation = interpolate(from_sat,to_sat,hue_i/HUE_SLOWDOWN);
  value = interpolate(from_val,to_val,hue_i/HUE_SLOWDOWN);
  
  // Update the hue for the ALIVE leds
  for(uint8_t y=0; y!=ROWS; ++y){
    for(uint8_t x=0; x!=COLS; ++x){
      if(alive[y][x]){
        newleds[xy2i(x,y)].setHSV(hue, saturation, value);
      } else {
        newleds[xy2i(x,y)] = CRGB::Black;
      }
