#include <Adafruit_NeoPixel.h>

#define PIN 23 // Pinnen hvor LED-stripen er koblet til
#define NUM_LEDS 60 // Totalt antall LEDer på stripen

#define POT_PIN1 12 // Potensiometer for segment 1
#define POT_PIN2 13 // Potensiometer for segment 2
#define POT_PIN3 14 // Potensiometer for segment 3

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

unsigned long previousMillis1 = 0;
unsigned long previousMillis2 = 0;
unsigned long previousMillis3 = 0;

int pos1 = 0;
int pos2 = 20;
int pos3 = 40;

void setup() {
  strip.begin();
  strip.show(); // Initialiserer alle LEDene til av
  pinMode(POT_PIN1, INPUT);
  pinMode(POT_PIN2, INPUT);
  pinMode(POT_PIN3, INPUT);
}

void loop() {
  unsigned long currentMillis = millis();

  // Les verdiene fra potensiometrene
  int potValue1 = analogRead(POT_PIN1);
  int potValue2 = analogRead(POT_PIN2);
  int potValue3 = analogRead(POT_PIN3);

  // Konverter potensiometerverdiene til intervaller
  long interval1 = map(potValue1, 0, 1023, 50, 200);
  long interval2 = map(potValue2, 0, 1023, 50, 200);
  long interval3 = map(potValue3, 0, 1023, 50, 200);

  if (currentMillis - previousMillis1 >= interval1) {
    previousMillis1 = currentMillis;
    chaseSegment(0, 20, strip.ColorHSV(0, 255, 255), pos1);
    pos1 = (pos1 + 1) % 20;
  }

  if (currentMillis - previousMillis2 >= interval2) {
    previousMillis2 = currentMillis;
    chaseSegment(20, 40, strip.ColorHSV(21000, 255, 255), pos2);
    pos2 = (pos2 + 1) % 20;
  }

  if (currentMillis - previousMillis3 >= interval3) {
    previousMillis3 = currentMillis;
    chaseSegment(40, 60, strip.ColorHSV(43000, 255, 255), pos3);
    pos3 = (pos3 + 1) % 20;
  }
}

void chaseSegment(int start, int end, uint32_t color, int pos) {
  for (int i = start; i < end; i++) {
    if ((i - start + pos) % 4 == 0) {
      strip.setPixelColor(i, color); // Setter fargen på den nåværende LED
    } else {
      strip.setPixelColor(i, 0); // Slår av LEDene som ikke skal lyse
    }
  }
  strip.show(); // Oppdaterer stripen for å vise endringen
}