How can I let a neopixel shine in one color, even if the sensor Value changed ?

Hey folks,

I have a question.
Right now my neopixel colours change due to the change of the Sensor value.

How can I stay at one neopixel “Color / Value” for some seconds, even if the analog output gives me another value ?

Thank you for any hint.
Cheereo

#include <Adafruit_NeoPixel.h>

#define LED_PIN 7
#define N_PIXELS 28

Adafruit_NeoPixel  strip = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);


boolean ledOn = false;

 
void setup() {
  Serial.begin(115200);
  Serial.println("MiCS-5524 demo!");
  
 strip.begin();
  strip.show(); // Initialize all pixels to 'off'

strip.setBrightness(90);


}
 
void loop() {


  int reading = analogRead(A0);
  Serial.println(reading);
 


 if ((reading) > 0 && (reading) < 11) {
    ledOn = true;
  } else
  { ledOn = false;} if (ledOn == true)
  { colorWipe(strip.Color(0, 0, 0), 0);
  Serial.println (" nüchtern " );
  }
  
   if ((reading) > 15 && (reading) < 30)

  {
    colorWipe(strip.Color(0, 255, 0), 0); 
  }
  Serial.println (" 200  " );
  }

   if ((reading) > 30 && (reading) < 50)

  {
    colorWipe(strip.Color(50, 255, 0), 0); 
  }
  Serial.println (" 200  " );
  }

   if ((reading) > 50 && (reading) < 100)

  {
    colorWipe(strip.Color(100, 255, 0), 0); 
  }
  Serial.println (" 200  " );
  }




  





void colorWipe(uint32_t c, uint8_t wait) {
  for (uint16_t i = 0; i < strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for (j = 0; j < 256; j++) {
    for (i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for (j = 0; j < 256 * 5; j++) { // 5 cycles of all colors on wheel
    for (i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j = 0; j < 10; j++) { //do 10 cycles of chasing
    for (int q = 0; q < 3; q++) {
      for (int i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, c);  //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (int i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, 0);      //turn every third pixel off
      }
    }
  }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j = 0; j < 256; j++) {   // cycle all 256 colors in the wheel
    for (int q = 0; q < 3; q++) {
      for (int i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, Wheel( (i + j) % 255)); //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (int i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, 0);      //turn every third pixel off
      }
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if (WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

How can I stay at one neopixel "Color / Value" for some seconds, even if the serial gives me another value ?

You are not reading from serial, rather you are reading an analogue input.

Pardon, my mistake. I´m reading an analog input..

Do you want to slow down the effects so that each LED stays on for longer or something else ?

Please describe exactly what you want to happen.

UKHeliBob: Do you want to slow down the effects so that each LED stays on for longer or something else ?

Please describe exactly what you want to happen.

Hey, thank you for the reply! I´m reading the value from an Alcohol Sensor. If the value is for example over 60, my neopixel will illuminate red. But as soon the values drops, my neopixel turns off (or green, for sober) .

I want the neopixel to stay red for certain seconds, after the value reached 60. Even if the Value, drops to zero.

I hope i could explain the problem... Thank you in advance! :)

I want the neopixel to stay red for certain seconds, after the value reached 60. Even if the Value, drops to zero.

Simple. Just ignore the sensor for the length of time you want the pixels to stay one color.

Sorry, I´m trying to learn & understand arduino right now. How exactly do I ignore the values ? With a bolean ?

Thank you a lot!

How exactly do I ignore the values ?

Record the time when you set the pixels to the proper color, using millis().

On every pass through loop(), if now minus then is less than the length of time the pixels should stay one color, don't read the sensor.