NeoPixel Ring

Ok. Think in terms not of "adding a new blue pixel to the ring", but of clearing the ring and then redawing the whole thing.

You need to keep two variables: "what point are we on the ring" (the job that your i variable is currently doing), and "how many pixels do I need to show".

Now to make all this go, you need to understand the modulus operator '%'. This operator gives the remainder of a division operator. This is important, because it makes the fact that you need to "loop around' at NUMPIXELS much easier to deal with.

Another thing to note is that it's good for the loop() function to do whatever it needs to do and then return immediately, rather than sitting in a loop. I have left this with a "delay" function. You can code this up without delay, but we'll leave that for now.

#include <Adafruit_NeoPixel.h>      //Include AdaFruit NEO Library
#define PIN            9            //Assign NEO Ring to pin 9
#define NUMPIXELS      24           //Define that there are 24 LED's in ring
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);     //AdaFruit Neo Library

int delayval = 2500;                // delay for 2.5 seconds (24 LED's in a minute)
int barStart = 0; // start at point 0
int barSize = 1; // start with one blue pixel

void loop() {
  for(int i=0;i<NUMPIXELS;i++){
    pixels.clear();
  }

  for(int i = 0; i< barSize; i++) {
    // use the modulus operator to wrap around
    pixels.setPixelColor((barStart + i) % NUMPIXELS, pixels.Color(0,0,50));        // Dim Blue Color
  }

  pixels.show();                                        // This sends the updated pixel to the ring
  delay(delayval);                                      // Delay for a period of time

  // now increment everything

  barStart = (barStart + 1) % NUMPIXELS; // move the bar around by 1, but wrap to zero

  // if the start of the bar has wrapped around back to zero, then we need to increase the barSize  

  if(barStart == 0) {
    barSize++;
    // but we don't want the bar to fill up the whole ring
    if(barSize >= NUMPIXELS) {
      barSize = 1; // so, back to a size of 1
    }
  }
}

There are other ways to do this. For instance, you can do stuff that only clears the pixel about to go dark and only lights the pixel about to go light. But it doesn't save you much. because pixels.show() has to push out the entire array to the neopixel ring anyway.