   
   LEDS.show();
   Serial.begin(57600);
-  
-  seed_walker(1);
-}
-
-
-uint16_t seconds_left = TOTAL_SECONDS;
+}
+
+
+uint16_t decaseconds_left = 10*TOTAL_SECONDS/8;
 
 
 unsigned long prevStepTime = 0;

}

#define UPDATE_TIME 20
#define WALKER_TIMESTEP 100
uint16_t step_period = 1;
uint8_t leds_index = 0;
uint8_t colour_counter=0; //keep track of the remaining colours in led (100-leds_left)
uint8_t step_counter=0; //keep track of the remaining steps of the currently-moving colour

const CRGB moving_colours[] = {CRGB::Red, CRGB::Green, CRGB::Blue};

void seed_walker(uint8_t start=0){
  //restart the walker
  step_period = 1;
  leds_index = min(start,NUM_LEDS-1);
  colour_counter = 0;
  step_counter = 0;
  // Initialise the white leds
  for(uint8_t i_led=0; i_led != NUM_LEDS; ++i_led){
    walker_leds[i_led] = (i_led>=start) ? CRGB::White : CRGB::Black;
    walker_leds[i_led]/= 2;
  }
}

void step_led(){
  // First, turn off completely the led at step_counter (the light will leave this spot)
  walker_leds[step_counter] = CRGB::Black;
  // Re-set the step period 'countdown timer'
  step_period = 1000/(1+leds_index);
  
  // Then, check whether we still have steps left on the current led
  if(step_counter==0){
    // the current moving led has left the grid -> find a new led to move out
    if(colour_counter==0){
      // it was the last led for this starting position: find a new starting position
      leds_index++;
      colour_counter = 3; //3 colours to move out
      // TODO: leds_index = 100 -> what to do?
    }
    colour_counter--;
    step_counter = leds_index;
    // Pause 1 step before moving out this new led
    return;
  }
  
  if(step_counter==leds_index){
    // Turn off the current colour in the current 'source' led
    if(colour_counter==2){
      // moved out blue
      walker_leds[leds_index] = CRGB::Yellow;
    } else if(colour_counter==1) {
      // moved out green as well
      walker_leds[leds_index] = CRGB::Red;
    } else if(colour_counter==0){
      walker_leds[leds_index] = CRGB::Black;
    }
  }
  
  step_counter--;
  // Light up the properly-coloured led in the current position
  walker_leds[step_counter] = moving_colours[colour_counter];
}


#define TOTAL_SECONDS ((uint16_t)(90*60))
#define SECONDS_PER_LED ((uint16_t)TOTAL_SECONDS/NUM_LEDS)
#define SECONDS_PER_COLOUR ((uint16_t) SECONDS_PER_LED/3)

void draw_walker(uint16_t s){
  // Draw the complete walker for the current amount of seconds left
  
  // 1: determine the led that is currently 'walking out'
  //    Since each led should take equal time to walk out, this is simply 100*s/T
  uint8_t current_led = 100-(s / SECONDS_PER_LED);
  // 2: determine which of the three colours is moving out
  uint8_t secs_in_led = SECONDS_PER_LED-s%SECONDS_PER_LED;
  uint8_t current_colour = ((uint16_t) secs_in_led * 3) / SECONDS_PER_LED;
  // 3: determine the position of the current colour
  uint8_t current_pos = current_led-1 - ((secs_in_led % SECONDS_PER_COLOUR) * current_led) / SECONDS_PER_COLOUR;
  
  // The following happens at the very end of the last led
  if(current_colour==3){

    // TODO: default case?
  }
  // Finally, the walking led
  walker_leds[current_pos] = moving_colours[current_colour];
  
  Serial << "s: " << decasecs << "; led: " << current_led << "; c: " << current_colour << "; p: " << current_pos << endl;
}

void update(){
