   
   if(millis()-prevUpdateTime >= UPDATE_TIME){
     prevUpdateTime = millis();
+    for(uint8_t i_led=0; i_led != NUM_LEDS; ++i_led){
+      for(uint8_t i=0; i!=3; ++i)
+        leds[i_led][i] = (uint8_t) (((uint16_t)leds[i_led][i]*19 + (uint16_t)walker_leds[i_led][i])/20);
+    }
     update();
   }
   

#define NUM_LEDS (ROWS*COLS)

CRGB leds[NUM_LEDS];

// Return 0-based led index for 0-based x and y grid co-ordinate values
// The LED string snakes through the grid, so every row the positive x direction switches

    // 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];
}

void update(){
