LDR issues

Hi,
Can anyone help me on this problem.
I have an arduino, neopixel,LDR sensor, what i am trying to do is simply to make an average of light and based on that turn ON and OFF the neopixel.
i have the neopixel and in the middle is the LDR. When the average is <800 and when i pass my hand or something the LDR reads over 800 and it allows me to turn the leds off.
The problem is when the average is >800 (because of an extra light) when i pass my hand or another thing the LDR reads for a moment less then 800, but it seems that the LDR still reading and it goes to the condition of if(LDR>800)

i dont know if i explain myself right.

Someone helpp!! please

Heres is the code

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif


#define PIN            8


#define NUMPIXELS      16


Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 500; 
int promedio=0;
char val;
const int buzzer = 5;
int contador=0;

void setup() {
#if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
noTone(buzzer);

Serial.begin(9600);
  pixels.begin(); 
  pixels.setPixelColor(0, pixels.Color(0,204,204)); 
    pixels.setPixelColor(1, pixels.Color(0,204,204));
    pixels.setPixelColor(2, pixels.Color(0,204,204));
    pixels.setPixelColor(3, pixels.Color(0,204,204));
    pixels.setPixelColor(4, pixels.Color(0,204,204));
    pixels.setPixelColor(5, pixels.Color(0,204,204));
    pixels.setPixelColor(6, pixels.Color(0,204,204));
    pixels.setPixelColor(7, pixels.Color(0,204,204));
    pixels.setPixelColor(8, pixels.Color(0,204,204));
    pixels.setPixelColor(9, pixels.Color(0,204,204));
    pixels.setPixelColor(10, pixels.Color(0,204,204));
    pixels.setPixelColor(11, pixels.Color(0,204,204));
    pixels.setPixelColor(12, pixels.Color(0,204,204));
    pixels.setPixelColor(13, pixels.Color(0,204,204));
    pixels.setPixelColor(14, pixels.Color(0,204,204));
    pixels.setPixelColor(15, pixels.Color(0,204,204));
    pixels.show(); 

    delay(1000); // Delay for a period of time (in milliseconds).

      pixels.setPixelColor(0, pixels.Color(0,0,0)); 
   pixels.setPixelColor(1, pixels.Color(0,0,0)); 
   pixels.setPixelColor(2, pixels.Color(0,0,0)); 
   pixels.setPixelColor(3, pixels.Color(0,0,0)); 
   pixels.setPixelColor(4, pixels.Color(0,0,0)); 
   pixels.setPixelColor(5, pixels.Color(0,0,0)); 
   pixels.setPixelColor(6, pixels.Color(0,0,0)); 
   pixels.setPixelColor(7, pixels.Color(0,0,0)); 
   pixels.setPixelColor(8, pixels.Color(0,0,0)); 
   pixels.setPixelColor(9, pixels.Color(0,0,0)); 
   pixels.setPixelColor(10, pixels.Color(0,0,0)); 
   pixels.setPixelColor(11, pixels.Color(0,0,0)); 
   pixels.setPixelColor(12, pixels.Color(0,0,0)); 
   pixels.setPixelColor(13, pixels.Color(0,0,0)); 
   pixels.setPixelColor(14, pixels.Color(0,0,0)); 
   pixels.setPixelColor(15, pixels.Color(0,0,0)); 
    pixels.show(); 
    delay(500);

promedio=0;
for (int i=0; i<43;i++)
{
   pixels.setPixelColor(0, pixels.Color(0,204,204)); 
    pixels.setPixelColor(1, pixels.Color(0,204,204));
    pixels.setPixelColor(2, pixels.Color(0,204,204));
    pixels.setPixelColor(3, pixels.Color(0,204,204));
    pixels.setPixelColor(4, pixels.Color(0,204,204));
    pixels.setPixelColor(5, pixels.Color(0,204,204));
    pixels.setPixelColor(6, pixels.Color(0,204,204));
    pixels.setPixelColor(7, pixels.Color(0,204,204));
    pixels.setPixelColor(8, pixels.Color(0,204,204));
    pixels.setPixelColor(9, pixels.Color(0,204,204));
    pixels.setPixelColor(10, pixels.Color(0,204,204));
    pixels.setPixelColor(11, pixels.Color(0,204,204));
    pixels.setPixelColor(12, pixels.Color(0,204,204));
    pixels.setPixelColor(13, pixels.Color(0,204,204));
    pixels.setPixelColor(14, pixels.Color(0,204,204));
    pixels.setPixelColor(15, pixels.Color(0,204,204));
    pixels.show(); 
  promedio +=analogRead(A0);
  Serial.println(promedio);
  
     
}

promedio= promedio/43;
Serial.println(promedio);
pixels.setPixelColor(0, pixels.Color(0,0,0)); 
   pixels.setPixelColor(1, pixels.Color(0,0,0)); 
   pixels.setPixelColor(2, pixels.Color(0,0,0)); 
   pixels.setPixelColor(3, pixels.Color(0,0,0)); 
   pixels.setPixelColor(4, pixels.Color(0,0,0)); 
   pixels.setPixelColor(5, pixels.Color(0,0,0)); 
   pixels.setPixelColor(6, pixels.Color(0,0,0)); 
   pixels.setPixelColor(7, pixels.Color(0,0,0)); 
   pixels.setPixelColor(8, pixels.Color(0,0,0)); 
   pixels.setPixelColor(9, pixels.Color(0,0,0)); 
   pixels.setPixelColor(10, pixels.Color(0,0,0)); 
   pixels.setPixelColor(11, pixels.Color(0,0,0)); 
   pixels.setPixelColor(12, pixels.Color(0,0,0)); 
   pixels.setPixelColor(13, pixels.Color(0,0,0)); 
   pixels.setPixelColor(14, pixels.Color(0,0,0)); 
   pixels.setPixelColor(15, pixels.Color(0,0,0));
   pixels.show();

}

void loop() {
  
  Serial.available();
 int LDR=analogRead(A0);
  Serial.println(LDR);

if (promedio<800)
{
 
   pixels.setPixelColor(0, pixels.Color(0,204,0)); 
    pixels.setPixelColor(1, pixels.Color(0,204,0));
    pixels.setPixelColor(2, pixels.Color(0,204,0));
    pixels.setPixelColor(3, pixels.Color(0,204,0));
    pixels.setPixelColor(4, pixels.Color(0,204,0));
    pixels.setPixelColor(5, pixels.Color(0,204,0));
    pixels.setPixelColor(6, pixels.Color(0,204,0));
    pixels.setPixelColor(7, pixels.Color(0,204,0));
    pixels.setPixelColor(8, pixels.Color(0,204,0));
    pixels.setPixelColor(9, pixels.Color(0,204,0));
    pixels.setPixelColor(10, pixels.Color(0,204,0));
    pixels.setPixelColor(11, pixels.Color(0,204,0));
    pixels.setPixelColor(12, pixels.Color(0,204,0));
    pixels.setPixelColor(13, pixels.Color(0,204,0));
    pixels.setPixelColor(14, pixels.Color(0,204,0));
    pixels.setPixelColor(15, pixels.Color(0,204,0));
    pixels.show(); 
if (LDR>800)
{
  pixels.setPixelColor(0, pixels.Color(0,0,0)); 
   pixels.setPixelColor(1, pixels.Color(0,0,0)); 
   pixels.setPixelColor(2, pixels.Color(0,0,0)); 
   pixels.setPixelColor(3, pixels.Color(0,0,0)); 
   pixels.setPixelColor(4, pixels.Color(0,0,0)); 
   pixels.setPixelColor(5, pixels.Color(0,0,0)); 
   pixels.setPixelColor(6, pixels.Color(0,0,0)); 
   pixels.setPixelColor(7, pixels.Color(0,0,0)); 
   pixels.setPixelColor(8, pixels.Color(0,0,0)); 
   pixels.setPixelColor(9, pixels.Color(0,0,0)); 
   pixels.setPixelColor(10, pixels.Color(0,0,0)); 
   pixels.setPixelColor(11, pixels.Color(0,0,0)); 
   pixels.setPixelColor(12, pixels.Color(0,0,0)); 
   pixels.setPixelColor(13, pixels.Color(0,0,0)); 
   pixels.setPixelColor(14, pixels.Color(0,0,0)); 
   pixels.setPixelColor(15, pixels.Color(0,0,0));
   pixels.show();
}
}

if(promedio>800)
{
  pixels.setPixelColor(0, pixels.Color(255,153,153)); 
   pixels.setPixelColor(1, pixels.Color(255,153,153)); 
   pixels.setPixelColor(2, pixels.Color(255,153,153)); 
   pixels.setPixelColor(3, pixels.Color(255,153,153)); 
   pixels.setPixelColor(4, pixels.Color(255,153,153)); 
   pixels.setPixelColor(5, pixels.Color(255,153,153)); 
   pixels.setPixelColor(6, pixels.Color(255,153,153)); 
   pixels.setPixelColor(7, pixels.Color(255,153,153)); 
   pixels.setPixelColor(8, pixels.Color(255,153,153)); 
   pixels.setPixelColor(9, pixels.Color(255,153,153)); 
   pixels.setPixelColor(10, pixels.Color(255,153,153)); 
   pixels.setPixelColor(11, pixels.Color(255,153,153)); 
   pixels.setPixelColor(12, pixels.Color(255,153,153)); 
   pixels.setPixelColor(13, pixels.Color(255,153,153)); 
   pixels.setPixelColor(14, pixels.Color(255,153,153)); 
   pixels.setPixelColor(15, pixels.Color(255,153,153));
   pixels.show();
  
}
}

hdfbalv:
The problem is when the average is >800

I don't see anything about an average in your code.

What is the promedia variable for?

How long does it take for one iteration of loop() while it works through all those pixel things?

...R

Promedio is defined as int. Int is in the range -32768 to 32767. With 43 readings of A0, highest average yoy can get is 762. If it is higher, promedio will overflow, giving you a negative number.

Your average is calculated in setup() and never change. In loop() you have a mix of if statements using LDR value or promedio value. Looks strange to me.