Acionamento remoto rele

Boa noite galera.
Estou com grande dificuldade de entender o porque meu rele acionado remotamente não permanece com o estado de ligado.
Uso o código abaixo, porém ao clicar em on no meu web service ele liga o rele e desliga rapidamente. Gostaria da ajuda de vocês neste caso.
O procedimento de envio de dados remoto está funcionando corretamente, porém o status do rele se modifica rapidamente. Segue código:

#include <SPI.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <VirtualWire.h>
#include <avr/wdt.h>
IRsend irsend;

unsigned int power_OSCILAR[230] ={8950,4450,600,1650,600,1600,600,550,600,550,600,500,650,500,600,500,650,1600,650,500,600,1600,600,1650,600,550,600,500,600,550,600,500,650,500,600,550,600,500,600,1650,600,550,600,500,650,500,600,500,600,550,600,550,550,1650,600,550,600,500,650,500,600,550,600,500,650,500,600,500,650,500,600,500,650,500,650,500,600,500,650,500,600,500,600,550,600,550,600,500,600,550,600,500,600,550,600,500,650,500,600,7900,600,500,600,550,600,550,600,500,600,550,600,500,600,550,600,500,650,500,600,550,600,500,650,500,600,500,600,550,600,550,550,550,650,500,600,500,600,550,600,500,600,550,600,550,600,500,600,550,600,500,650,500,600,500,600,550,600,550,600,500,650,500,600,500,600,550,600,550,550,550,650,500,600,500,600,550,600,500,600,550,600,550,600,500,600,550,600,500,600,550,600,500,600,550,600,550,600,500,600,550,600,500,600,550,600,550,550,550,600,550,600,550,600,550,600,1650,600,1600,600,550,600,550,600,500,600,550,600,500,600};

//////reles///////
int r1 = 5;

void setup()
{
pinMode(5, OUTPUT);
digitalWrite(5, LOW);

wdt_enable(WDTO_8S);
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000); // Bits per sec
vw_rx_start(); // Start the receiver PLL running
}
 
void loop() {
wdt_reset();
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) // Non-blocking
{

const char *msg = "true";
          {
  
                  digitalWrite(5, LOW);
          }
if(buflen>=2)
{
if(buf[0] == 97 && buf[1] == 114)
{
vw_rx_stop();

irsend.sendRaw(power_OSCILAR, 230,36); // Sony TV power code
delay(1000);
Serial.println("B");
vw_rx_start();

}
}
{
const char *msg = "false";
           {

              
                  digitalWrite(5, HIGH);

           }
           
           

}
}
}

Eu não estou a perceber como é que através de um web service consegue alterar seja o que for.

Desculpe-me por não ter sido claro.

Este código que poste, refere-se ao ao Arduino slave. Tenho um arduino master que manda a informação para este slave:

Parte do código no master que aciona o slave:

MASTER:

void aroff()
{
const char *msg = "aroff";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
delay(50);
if(!arLigadooff)
arLigadooff = true;
}
void aron()
{
const char *msg = "aron";
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
delay(50);
if(!arLigadoon)
arLigadoon = false;

}

Ainda fiquei pior. Não percebo nada do que pretende fazer. Ajudava se em vez de postar pequenas partes de código, postasse o código completo.

Parece que executa o código e depois ele entra no else, e desliga o relê..

Provavelmente estás a activar o relé directamente da saída do Arduino e ele consume mais que 40mA desligando-se por protecção.

O código que colocaste no primeiro post não tem condição if para ligar/desligar o relé...

Importas-te de colocar todo o código que estás a usar bem como a maneira como ligaste o relé?