Programacion Relay Tarda para Activarse

Hola,

Mi Problema es el Siguiente, estoy construyendo un brazo robotico el cual tiene aditamentos como Gripper y un Electro-iman tiene 6 servos (uno de ellos se puede quitar ya que es intercambiable) y un relevador que es el que activa y desactiva el Electro-Iman (con una Fuente Externa) y Todo esto es Controlado por Bluetooth con una HC-05 mediante una Aplicacion que hice para Android Todos los servos Funcionan (solo hay que calibrar Limites pro funcionan bien) el problema es con el Relay que cuandole doy activar aveces funciona y aveces no, tengo que oprimir varias veces el boton para que encienda o apague quiero suponer que es problema de programacion pero no soy muy bueno en programacion soy nuevo les dejo mi codigo para ver si me pueden ayudar a encontrar el problema


#include <Servo.h>

char dato;
Servo hombro, codo, muneca, pinzas, base, griper;
int phombro, pcodo, pmuneca, ppinzas, pbase, pgriper, contador=0;
int estado=0;
int analogo=0;
void setup()
{
pinMode(52,OUTPUT); //se asigna el Relay en el Pin 52 como salida
digitalWrite(52,LOW); // Se pone relay apagado al iniciar
hombro.attach(13); // se asigna el pin 13para el hombro
codo.attach(12); //se asigna el pin 12 como codo
muneca.attach(11); // se asigna el pin 11 como la muñeca
pinzas.attach(10); // se asigna el pin 10 como el Gripper
base.attach(9); // se asigna el pin 9 como la Base
griper.attach(8); // se asigna el pin 8 como el giro del griper
Serial.begin(9600);
}

void loop()
{
if(contador==0)
{
// Leer posicion inicial
phombro=hombro.read();
pcodo=codo.read();
pmuneca=muneca.read();
ppinzas=pinzas.read();
pbase=base.read();
pgriper=griper.read();

//Escribir posicion inicial
hombro.write(phombro);
codo.write(pcodo);
muneca.write(pmuneca);
pinzas.write(ppinzas);
base.write(pbase);
griper.write(pgriper);
contador++;
}
dato='x';
dato=Serial.read();
switch(dato)
{
case 'A': //HOMBRO DERECHA
{
while(Serial.read()!='x')
{
if(phombro>=175)
phombro=175;
if(phombro<=180 && phombro>=0)
{

phombro++;
hombro.write(phombro);
delay(15);
}
}
break;
}

case 'a': //HOMBRO IZQUIERDA
{
while(Serial.read()!='x')
{
if(phombro<=5)
phombro=5;
if(phombro<=180 && phombro>=0)
{
phombro--;
hombro.write(phombro);
delay(15);
}
}
break;
}
case 'C': //CODO ARRIBA
{
if(pcodo>=175)
pcodo=175;
while(Serial.read()!='x')
{
if(pcodo<=180 && pcodo>=0)
{
pcodo++;
codo.write(pcodo);
delay(15);
}
}
break;
}
case 'c': //CODO ABAJO
{
if(pcodo<=5)
pcodo=5;
while(Serial.read()!='x')
{
if(pcodo<=180 && pcodo>=0)
{
pcodo--;
codo.write(pcodo);
delay(15);
}
}
break;
}
case 'I': //MUÑECA ARRIBA
{
if(pmuneca>=170)
pmuneca=170;
while(Serial.read()!='x')
{
if(pmuneca<=180 && pmuneca>=0)
{
pmuneca++;
muneca.write(pmuneca);
delay(15);
}
}
break;
}
case 'i': //MUÑECA ABAJO
{
if(pmuneca<=10)
pmuneca=10;
while(Serial.read()!='x')
{
if(pmuneca<=180 && pmuneca>=0)
{
pmuneca--;
muneca.write(pmuneca);
delay(15);
}
}
break;
}
case 'P': //PINZA ABRIR
{
if(ppinzas>=165)
ppinzas=165;
while(Serial.read()!='x')
{
if(ppinzas<=180 && ppinzas>=0)
{
ppinzas++;
pinzas.write(ppinzas);
delay(15);
}
}
break;
}
case 'p': //PINZA CERRAR
{
if(ppinzas<=15)
ppinzas=15;
while(Serial.read()!='x')
{
if(ppinzas<=180 && ppinzas>=0)
{
ppinzas--;
pinzas.write(ppinzas);
delay(15);
}
}
break;
}
case 'B': //BASE IZQUIERDA
{ if(pbase>=172)
pbase=172;
while(Serial.read()!='x')
{
if(pbase<=176 && pbase>=0)
{
pbase++;
base.write(pbase);
delay(15);
}
}
break;
}
case 'b': //BASE DERECHA
{
if(pbase<=7)
pbase=7;
while(Serial.read()!='x')
{
if(pbase<=176 && pbase>=0)
{
pbase--;
base.write(pbase);
delay(15);
}
}
break;
}
case 'G': //GIRO DE GRIPER IZQ
{ if(pgriper>=175)
pgriper=175;
while(Serial.read()!='x')
{
if(pgriper<=180 && pgriper>=0)
{
pgriper++;
griper.write(pgriper);
delay(15);
}
}
break;
}
case 'g': //GIRO DE GRIPER DERECHA
{
if(pgriper<=5)
pgriper=5;
while(Serial.read()!='x')
{
if(pgriper<=180 && pgriper>=0)
{
pgriper--;
griper.write(pgriper);
delay(15);
}
}
break;
}
}
if(Serial.available()>0){
estado = Serial.read();
}
if(estado== 'W') {
digitalWrite(52,HIGH);
}
if(estado== 'w') {
digitalWrite(52,LOW);
}
}


gracias de antemano

Saludos

suponiendo que lo anterioir este bien que tengo observaciones modifica esto y medices

if(Serial.available()>0) {
	  estado = Serial.read();
	
	  if (estado== 'W') {
		          digitalWrite(52,HIGH);
		       }
	  if (estado== 'w') {
		          digitalWrite(52,LOW);
	  }       
	}

sugerencia utiliza tag para tu codigo
para poder leerlo.

usa una funcion antirebote.
asi tendras una mejor lectura de tu boton

usa una funcion antirebote.
asi tendras una mejor lectura de tu boton

Cesar050892, para que quieres la función antirebote si los comandos vienen por BT?