Error Sensor PIR de movimiento y LED

#include <NewPing.h>

#define TRIGGER_PIN  12
#define ECHO_PIN     11
#define MAX_DISTANCE 200


const int LEDPin=10;
const int PIRPin= 2;

int pirState = LOW;           // de inicio no hay movimiento
int val = 0;                  // estado del pin

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup(){
  
  pinMode(LEDPin, OUTPUT);
  pinMode(PIRPin, INPUT);
  Serial.begin(9600);
}

void loop (){
  // Esperar 1 segundo entre mediciones
  delay(1000);
  // Obtener medicion de tiempo de viaje del sonido y guardar en variable uS
  int uS = sonar.ping_median();
  // Imprimir la distancia medida a la consola serial
  Serial.print("Distancia: ");
  // Calcular la distancia con base en una constante
  Serial.print(uS / US_ROUNDTRIP_CM);
  Serial.println("cm");
  
  //sensor de movimiento
 val = digitalRead(PIRPin);
 if (val == HIGH)   //si está¡ activado
  { 
    digitalWrite(LEDPin,HIGH);  //LED ON
    if (pirState == LOW)  //si previamente estaba apagado
    {
      Serial.println("Sensor activado");
      pirState = HIGH;
    }
  } 
  else   //si esta desactivado
  {
    digitalWrite(LEDPin, LOW); // LED OFF
    if (pirState == HIGH)  //si previamente estaba encendido
    {
      Serial.println("Sensor parado");
      pirState = LOW;
    }
  }
}

Hola soy nuevo en el mundo arduino esta es la programacion que tengo
Tengo problemas con esta programacion porque deseo que el led solo se encienda cuando detecte algun movimiento y luego se apague pero este sigue prendido y titila

Veo que hay dos cosas un sensor Pir que te activa un led y uno de ultrasonidos (TRIGGER_PIN -ECHO_PIN). Con el ultrasonidos solo mides y no haces nada más, y con el Pir enciendes o apagas un led no?.

Sin saber que Pir usas ni tu esquema de conexion... has probado en poner una R de 10k a masa (pulldown) en el pin 2? asi evitas residuales.

Esto sin saber como ya te dije tipo de Pir etc, pero evitas residuales o falsos contactos

Recuerda que el Pir necesita de un tiempo de arranque sin trabajar para que "se caliente" y se ponga a la temperatura del ambiente que necesita medir, aproximadamente será 1 minuto el que se pondrá sin trabajar una vez que arranque SOLO la primera vez.

He modificado tu programa para que no tenga delay por un lado y que mire el flanco de tu PIR y no su estado.

Cuando cambie de 0 a 1 es porque hay un objeto y cuando vuelva de 1 a 0 es porque se terminó el tiempo o no lo detecta mas.

Prueba a ver.

#include <NewPing.h>

#define TRIGGER_PIN  12
#define ECHO_PIN     11
#define MAX_DISTANCE 200


const int LEDPin=10;
const int PIRPin= 2;

bool pirState, pirStateAnt = false;           // de inicio no hay movimiento
unsigned long start;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup(){
 
  pinMode(LEDPin, OUTPUT);
  pinMode(PIRPin, INPUT);
  Serial.begin(9600);
}

void loop (){

	// Esperar 1 segundo entre mediciones
	if (millis() - start > 1000UL) {
		// Obtener medicion de tiempo de viaje del sonido y guardar en variable uS
		int uS = sonar.ping_median();
		// Imprimir la distancia medida a la consola serial
		Serial.print("Distancia: ");
		// Calcular la distancia con base en una constante
		Serial.print(uS / US_ROUNDTRIP_CM);
		Serial.println("cm");
		start = millis();
	}
 
	//sensor de movimiento
	pirState = digitalRead(PIRPin);
	if (pirState && !pirStateAnt) {  // si pasó de 0 a 1 está activado
		digitalWrite(LEDPin,HIGH);   // LED ON
		Serial.println("Sensor activado");
	}
	if (!pirState && pirStateAnt) {  // si pasó de 1 a 0 entonces terminó
		Serial.println("Sensor desactivado");
		digitalWrite(LEDPin, LOW); // LED OFF
	}
	pirStateAnt = pirState;
}