Problemas rele switch - while

Hola, les pido una ayuda, estoy tratando de realizar un sistema con rele y sensor de apertura de puerta
Basicamente empece con un rele que enciende mediante un boton, accionando un rele que enciende una luz en un gabinete, luego me surgio la necesidad de colocar un sensor de apertura de puerta, de forma que cuando se habra la puerta o mientras esta esta abierta, no funcione el sistema.

el punto es que no me funciona, probe usando IF luego probe WHILE pero no logro hacerlo funcionar. cuando abro la puerta el sensor me da un mensaje pero en algunos casos luego de cerrar la misma no acciona el rele y otras veces acciona con el sensor de puerta activado.

adjunto el codigo que estoy realizando

const int ledRojo=10; //led de control rojo
const int ledVerde=9; //led de control verde
const int pulsador=4;
int val=0;
int conteo=0;
int led13=13; //asigno led interno como testigo de apertura de puerta
int reedswitch = 5; //sensor de apertura (iman) en ingr digital 5 PIN 5
int valSw = 0; //leo estado de switch

//lcd
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2); // dirección de la pantalla LCD, número de columnas, número de filas
//LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3);

//lcd

//agrego datos proyecto anterior
//defino la entrada 8 para el rele
const int rele = 8;
// Defino valor previo de conteo milli
unsigned long previoMillis = 0;
// constante que no cambia
const long intervalo = 3000; // intervalo de 30 segundos, para 5 minutos 300000
int conta = 0; //establezco un contador

void setup() {
pinMode(led13, OUTPUT);
pinMode(reedswitch, INPUT);
pinMode(ledRojo, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(pulsador, INPUT);
pinMode(rele, OUTPUT) ; //configuro el pin como salida digital
Serial.begin(9600);

lcd.init(); // inicializa la pantalla LCD
lcd.clear();
lcd.backlight(); // enciende la retroiluminación de la pantalla
lcd.begin(16,2);
//lcd.clear();
lcd.home(); //muevo el cursor al inicio
//imprimo la caratula
lcd.setCursor(0,0); // ponemos el cursor en la columna 3 de la fila 0
lcd.print("Bienvenido");
lcd.setCursor(0,1);
lcd.print("PROCESO");
//lcd.clear();
}

void loop() {

valSw = digitalRead(reedswitch);
Serial.print("valor Switch ");
Serial.println(valSw);
while (valSw == HIGH){ //mientras el switch este conectado

//if (val1 == LOW){
// digitalWrite(ledRojo, HIGH);
// digitalWrite(led13, HIGH);
// digitalWrite(ledVerde, LOW);
// digitalWrite(rele, LOW);
// Serial.println("Puerta Abierta");
// lcd.clear();
// lcd.setCursor(0,0);
//lcd.clear();
// lcd.print("Puerta Abierta");
// lcd.setCursor(0,1);
//lcd.clear();
// lcd.print("Sist Detenido");
//}
//else{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Proceso");
lcd.setCursor(0,1);
//lcd.clear();
lcd.print("En linea");
//defino el tiempo transcurrido
unsigned long currentMillis = millis();

val= digitalRead(pulsador);
//Serial.println(val);
//lcd.clear();
digitalWrite(rele,LOW);
digitalWrite(ledVerde, HIGH);
digitalWrite(ledRojo, LOW);
//if (val==HIGH && currentMillis - previoMillis <= intervalo){
if (val==HIGH ){
Serial.println("Va a encender el sistema...");
lcd.setCursor(0,0);
lcd.clear();
lcd.print("Empezando");
lcd.setCursor(0,1);
lcd.print("Proceso...");
delay(3000);
digitalWrite(ledRojo, HIGH);
digitalWrite(ledVerde, LOW);
digitalWrite(rele, HIGH); //enciendo
conta++;
Serial.println ("Trabajando ...");
Serial.println ("No abra la puerta, por favor...");

// agrego lcd
//lcd.init(); // inicializa la pantalla LCD
//lcd.backlight(); // enciende la retroiluminación de la pantalla
lcd.setCursor(0,0); // ponemos el cursor en la columna 3 de la fila 0
lcd.clear();
lcd.print ("Trabajando..");

lcd.setCursor(0,1); // ponemos el cursor en la columna 0 de la fila 1
lcd.print ("No abra la puerta");
//delay(2000);

delay(5000); //aqui debo definir el tiempo total de trabajo
digitalWrite(ledRojo, LOW);
digitalWrite(rele, LOW);
digitalWrite(ledVerde, HIGH);
Serial.println ("apago Led");
lcd.clear();
lcd.print ("Proceso Finaliza");
lcd.setCursor(0,1); // ponemos el cursor en la columna 0 de la fila 1
lcd.print ("Retire elementos");
delay(3000);
lcd.clear();
lcd.setCursor(0,0); // ponemos el cursor en la columna 3 de la fila 0
lcd.print("Sistema");
lcd.setCursor(0,1);
lcd.print("OK");
} //llave if
} //llave while
digitalWrite(ledRojo, HIGH);
digitalWrite(led13, HIGH);
digitalWrite(ledVerde, LOW);
digitalWrite(rele, LOW);
Serial.println("Puerta Abierta");
lcd.clear();
lcd.setCursor(0,0);
//lcd.clear();
lcd.print("Puerta Abierta");
lcd.setCursor(0,1);
//lcd.clear();
lcd.print("Sist Detenido");
} //llave loop