Te dejo los códigos que tengo de ejemplo donde los uso con un sensor de temperatura y funciona.
Prueba a ver si te funciona.
RECEPTOR
#include <VirtualWire.h>
const int receive_pin = 11; // 11
const int led_pin = 13;
const int transmit_pin = 12;
const int transmit_en_pin = 3;
void setup()
{
delay(1000);
Serial.begin(9600);
Serial.println("Leyendo EMISOR 433MHz");
vw_set_tx_pin(transmit_pin);
vw_set_rx_pin(receive_pin);
vw_set_ptt_pin(transmit_en_pin);
vw_setup(2000);
vw_rx_start();
pinMode(led_pin, OUTPUT);
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN] = {};
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen))
{
int i;
digitalWrite(led_pin, HIGH);
for (i = 0; i < buflen; i++)
{
// Serial.print(buf[i], HEX);
// Serial.print(' ');
}
Serial.print((char*)buf);
Serial.println();
digitalWrite(led_pin, LOW);
}
}
TRANSMISOR
#include <VirtualWire.h>
#include "DHT.h"
#define DHTPIN 5
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const int led_pin = 13;
const int transmit_pin = 12;
const int receive_pin = 2;
const int transmit_en_pin = 3;
void setup()
{
Serial.begin(9600);
vw_set_tx_pin(transmit_pin);
vw_set_rx_pin(receive_pin);
vw_set_ptt_pin(transmit_en_pin);
vw_set_ptt_inverted(true);
vw_setup(2000);
dht.begin();
pinMode(led_pin, OUTPUT);
}
void loop()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
int tempC1 = (int)t;
int tempC2 = (int)((t*100) - (tempC1*100));
if ((t*100) > (tempC1*100))
{
int tempC2 = (int)((t*100) - ((tempC1*100)-100));
}
char msg[19];
sprintf(msg, "%i.%i", tempC1,tempC2);
digitalWrite(led_pin, HIGH);
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
Serial.println(msg);
int humC1 = (int)h;
int humC2 = (int)((h*100) - (humC1*100));
if ((h*100) > (humC1*100))
{
int humC2 = (int)((h*100) - ((humC1*100)-100));
}
sprintf(msg, "%i.%i", humC1, humC2);
digitalWrite(led_pin, LOW);
delay(1000);
}