LCD y Teclado matricial

Me pueden ayudar, tendo dos ardunios uno, los cuales el primero tiene conectado un keypad y el segundo tiene una Pantalla LCD de 16X2, y si me funciona enviar informacion entre ellos del teclado al lcd, pero solo por medio de conexion directa de cable entre los pines TX(0) y RX(1), y necesito que sea a traves de RF, y no me funciona, el codigo aparentemente esta bien pero no me transmite, la verdad tengo duda que el codigo este correcto aunque no hay errores pero pueda que la programacion no sea la indicada, adjunto el codigo de ambos:

EMISOR

#include <VirtualWire.h>
int i;
#include <Keypad.h>

// empieza el código necesario

const byte Filas = 4;
const byte Columnas = 4;
byte Pins_Filas[] = {8, 7, 6, 5,};       // en orden: F1, F2, F3, F4
byte Pins_Columnas[] = {4, 3, 10, 9};   // en orden: C1, C2, C3 
char Teclas [ Filas ][ Columnas ] =
  {
      {'1','2','3','A'},
      {'4','5','6','B'},
      {'7','8','9','C'},
      {'*','0','%','D'}
   };

Keypad Teclado = Keypad(makeKeymap(Teclas), Pins_Filas, Pins_Columnas, Filas, Columnas);
// termina el código necesario

char tecla; 

void setup() {

Serial.begin(9600);
//Serial.println("setup");

vw_setup(2000);
vw_set_tx_pin(2);
}

void loop() {
// put your main code here, to run repeatedly:
tecla = Teclado.getKey();
if(tecla != NO_KEY)   
  Serial.print(tecla);
  digitalWrite(13, true);

  vw_send((uint8_t *)tecla, strlen(tecla));
  vw_wait_tx();
  digitalWrite(13, false);
  //delay(200);
}

RECEPTOR

#include <VirtualWire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 3, 4, 5, 6, 7);
int i;

void setup() {
Serial.begin(9600);
//Serial.println("setup");
lcd.begin(16, 2);
lcd.setCursor(0, 0);

vw_setup(2000);
vw_set_rx_pin(2);
vw_rx_start();
//lcd.clear();
//lcd.print("Waiting...");
}

void loop() {
[code]

 uint8_t buf[VW_MAX_MESSAGE_LEN];
 uint8_t bufleb = VW_MAX_MESSAGE_LEN;

   
if (Serial.available() > 0) {
   char caracter = Serial.read();
   lcd.print(caracter);
   if(caracter == '%')
   {
     lcd.clear(); 
   }
}
}

[/code]