Usar Módulo RF + Ultrassônico para acender um LED

Estou tentando usar o Módulo RF + Ultrassônico para acender um LED. Sou meio novo, e estou começando um projetinho. A princípio, irei colocar outras funções no lugar do LED.. mas enfim.

Na teoria, quando a distância do objeto do ultrassônico for menor que 10cm, ele vai armazenar essa informação, mandar ao receptor, e o receptor irá acender um LED. Mas por algum motivo isso não funciona. Alguém poderia me ajudar? O transmissor até envia, mas o receptor não recebe.

Fiz esse código para o transmissor:

#include <VirtualWire.h> //Inclui a biblioteca VirtualWire.h
const int trigPin = 12;
const int echoPin = 13;
char *dado ; //Cria a variável que ira armazenar a informação pré definida 
int distancia;

void setup()
{
  Serial.begin(9600); // inicializa a comunicação serial para Debug ou para mostrar dados em um display LCD   
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);  
  pinMode(8, OUTPUT);
   
  //Configura o Arduino para trabalhar como transmissor
  vw_set_ptt_inverted(true);
  vw_setup(2000);
  vw_set_tx_pin(8);//Configura o pino 8 como tx
  //===================================================
 
}

void loop(){
  {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  
  digitalWrite(trigPin, LOW);
  unsigned long duracao = pulseIn(echoPin, HIGH);
  distancia = duracao / 58;

  Serial.print("Distancia em CM: ");
  Serial.println(distancia);
  delay(1000);
  }
  
  if (distancia <=10){
  dado = "A"; //Armazena o dado pré determinado
  vw_send((uint8_t *)dado, strlen(dado)); //Envia a variável dado
  vw_wait_tx(); //Aguarda o fim de transmissão
  delay(100); //Aguarda um tempo para a próxima leitura
  Serial.println(dado);//Para garantir que os seus botões estão funcionando, você pode verificar no monitor serial 
  }
  
  else{
  dado = "B"; //Armazena o dado pré determinado
  vw_send((uint8_t *)dado, strlen(dado)); //Envia a variável dado
  vw_wait_tx(); //Aguarda o fim de transmissão
  delay(100); //Aguarda um tempo para a próxima leitura
  Serial.println(dado);//Para garantir que os seus botões estão funcionando, você pode verificar no monitor serial 
  }
}

E esse para o receptor:

#include <VirtualWire.h> //Inclui a biblioteca VirtualWire.h

void setup()
{
  int i;
  //Configura o Arduino para trabalhar como receptor
  vw_set_ptt_inverted(true);
  vw_setup(2000);
  vw_set_rx_pin(13);//Configura o pino 13 como rx
  vw_rx_start();
  //=================================================

  pinMode(13, INPUT);
  pinMode(12, OUTPUT);
  Serial.begin(9600);
}
void loop()
{
  char cod;//Cria uma variavel para armazenar o dado recebido.
  uint8_t buf[VW_MAX_MESSAGE_LEN]; //Recebe os dados e armazena na variável buf
  uint8_t buflen = VW_MAX_MESSAGE_LEN; //Armazena na variável buflen o tamanho do dado recebido

  if (vw_get_message(buf, &buflen)) //Pega a mensagem que foi recebida
  {
    cod = buf[0]; //Converte a variável em Char
    Serial.println(cod); //Para verificar valores recebidos e corrigir possiveis erros
    if (cod == 'A') // Compara a informação recebida
    {
      digitalWrite(12, HIGH);
      delay(1000);
      digitalWrite(12, LOW);
      delay(1000);
    } 
    else{
    if (cod == 'B')
      digitalWrite(12, LOW);
      delay(1000);
    }
  }
}

Algo que eu vejo que nao gosto, mas que pode ou nao estar a dar problemas e o teu transmissor.

Tu fazes:

char *dado ; //Cria a variável que ira armazenar a informação pré definida 
...
dado = "A"; //Armazena o dado pré determinado
vw_send((uint8_t *)dado, strlen(dado)); //Envia a variável dado

Como e que a strlen sabe que a string acaba apos o 'A' se tu nao adicionas o caracter de termino '\0'?
Como disse, isto pode ou nao ser a fonte dos teus problemas, mas certamente que nao e boa pratica. Bem como criar apenas um apontador em vez dum array...
Para testar, experimenta ter dado como uma variavel normal, e em vez de strlen, coloca apenas 1 para o tamanho da mensagem.

estou a assumir tambem que os printfs do transmissor nao indicam nada de estranho...

O pino 13 e uma ma opcao seja para o que for no Arduino. O motivo e que no pino 13 tens tambem ligado um LED que pode introduzir ruido no sinal recebido. Podes mudar o pino para outro?

Isto:

cod = buf[0]; //Converte a variável em Char

Pode ou nao estar a fazer o que julgas que esta a fazer.
Experimenta colocar um cast e ve o resultado.

cod = (char)buf[0]; //Converte a variável em Char

em todo o caso, ver os printfs quando o programa esta a correr e mais indicativo de onde podera estar o problema.