 byte hue_variation = 30; // Hue variation, where applicable
 byte mode = 0; // Mode, defines the kind of light show displayed
 float direction = 0.0; // For directional displays, this is the angle in radians
+int itemCount = 0;
+int itemIndex = 0;
 Interval ledUpdate(30); // Update for animations
 CRGB leds[NUM_LEDS]; // The LEDs
 

           point. This is handy as a waiting mode, or where we don't actually need to show anything
           on the LED ring and just want a bit of bling.
        */
        for (int i = 0; i < NUM_LEDS; i++) {
          leds[i].fadeToBlackBy(15);
        }
        firstLED = leds[0];
        for (int i = 0; i < NUM_LEDS - 1; i++) {
          leds[i] = leds[i + 1];
        }
        leds[NUM_LEDS - 1] = firstLED;
        leds[random(NUM_LEDS)].setHSV(hue + random(-hue_variation, hue_variation), 255, 255);
        break;
      case 1:
        /*
           Mode 1 shows a single bar at the specified angle. The bar is used to indicate direction
           for e.g. manual control
        */
        for (int i = 0; i < NUM_LEDS; i++) {
          leds[i].fadeToBlackBy(50);
        }
        int centreLED = (int)((direction / (2.0f * PI)) * ((float)NUM_LEDS))+5;
        for (int i = -4; i <= 4; i++) {
          leds[(centreLED + i + NUM_LEDS) % NUM_LEDS].setHSV(hue, 255, 255);
          //Serial.print((centreLED + i + NUM_LEDS) % NUM_LEDS);
          //Serial.print(F(","));
        }
        //Serial.println("");
        break;
    }
    show();
  }
}

void show() {

      //Serial.print(F("Command received: "));
      //Serial.println(command, DEC);
      switch (command) {
        case 1:
          hue = I2CHelper::reader.getByte();
          hue_variation = I2CHelper::reader.getByte();
