# include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel wheel = Adafruit_NeoPixel(4, A1, NEO_GRB + NEO_KHZ800);

void setup() {

  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);

  pinMode(A0, INPUT);

  Serial.begin(9600);

  wheel.begin();

}

# define MAX  1000
# define MIN  100

void loop()
{
  int8_t direction;
  static unsigned long lastTime = 0;
  static unsigned char phase = 0;

  unsigned long now = millis();

  int period = analogRead(A0);
  if (period < 512) {
    direction = -1;     // backward
    period = map(period, 0, 511, MIN, MAX);
  }
  else {
    direction = 1;     // backward
    period = map(period, 512, 1023, MAX, MIN);
  }

  if (now - lastTime < period) return;
  lastTime = now;

//  Serial.println(analogRead(A0));

  switch (phase & 0x3) {    // just use bottom two bits of the phase counter
  case 0 :
    digitalWrite(3, LOW);   
    digitalWrite(4, LOW);    
    break;

  case 1 :
    digitalWrite(3, LOW);   
    digitalWrite(4, HIGH);    
    break;

  case 2 :
    digitalWrite(3, HIGH);   
    digitalWrite(4, HIGH);    
    break;

  case 3 :
    digitalWrite(3, HIGH);   
    digitalWrite(4, LOW);    
    break;
  }

  for (uint8_t ii = 0; ii < 4; ii++) wheel.setPixelColor(ii, 0);
  
  wheel.setPixelColor(phase & 0x3, 0xff0000);
  wheel.show();

  phase += direction;
}