VirtualWire Library RF 433MHZ

Hi.
I would like to know how convert the data to text again.
Because I’m receiveing just numbers, maybe the ASC code.

Transmiter
const char *msg = “hello”;
vw_send((uint8_t *)msg, strlen(msg));

Receiver
for (i = 0; i < buflen; i++)
{
Serial.print(buf*);*

  • Serial.print(" ");*
  • }*
    Serial print
    104 101 108 108 111
    104 101 108 108 111
    104 101 108 108 111
    104 101 108 108 111
    Thanks

What is sending the data? The VirtualWire library doesn't usually mangle the data. Post all of your code.

Hi.
The transmitter is sending data.

// transmitter.pde
//
// Simple example of how to use VirtualWire to transmit messages
// Implements a simplex (one-way) transmitter with an TX-C1 module
//
// See VirtualWire.h for detailed API docs
// Author: Mike McCauley (mikem@open.com.au)
// Copyright (C) 2008 Mike McCauley
// $Id: transmitter.pde,v 1.3 2009/03/30 00:07:24 mikem Exp $

#include <VirtualWire.h>

void setup()
{
    Serial.begin(9600);	  // Debugging only
    Serial.println("setup");

    // Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);	 // Bits per sec
}

void loop()
{
    const char *msg = "hello";

    digitalWrite(13, true); // Flash a light to show transmitting
    vw_send((uint8_t *)msg, strlen(msg));
    vw_wait_tx(); // Wait until the whole message is gone
    digitalWrite(13, false);
    delay(200);
}

And the receiver is receiving

// receiver.pde
//
// Simple example of how to use VirtualWire to receive messages
// Implements a simplex (one-way) receiver with an Rx-B1 module
//
// See VirtualWire.h for detailed API docs
// Author: Mike McCauley (mikem@open.com.au)
// Copyright (C) 2008 Mike McCauley
// $Id: receiver.pde,v 1.3 2009/03/30 00:07:24 mikem Exp $

#include <VirtualWire.h>

void setup()
{
    Serial.begin(9600);	// Debugging only
    Serial.println("setup");

    // Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);	 // Bits per sec

    vw_rx_start();       // Start the receiver PLL running
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
	int i;

        digitalWrite(13, true); // Flash a light to show received good message
	// Message with a good checksum received, dump it.
	Serial.print("Got: ");
	
	for (i = 0; i < buflen; i++)
	{
	    Serial.print(buf[i], HEX);
	    Serial.print(" ");
	}
	Serial.println("");
        digitalWrite(13, false);
    }
}

I would like to know how instead of HEX print the characters of the message.

The sender is sending characters.

The receiver is receiving bytes. Why?

I would like to know how instead of HEX print the characters of the message.

Don't tell the receiver to print the HEX value. It will, then, print the characters.

I have tried that.
If you see my first message I have removed the HEX and post the message that I recieved by serial.
Do you have another guess?

As far as I can see, it should have printed the character. I suspect you original code was not the same as what you posted later on.
But try forcing the issue:
Serial.print((char)buf*);*
Pete

Thanks
But still not working
It shows this error: error: cast from 'uint8_t*' to 'char' loses precision, when I try.

OK. It worked for me, but try this:
Serial.print((uint8_t*)buf);

Pete

Now I got the error: call of overloaded 'print(uint8_t*)' is ambiguous

Geez this is annoying :astonished:
I tried this, it compiles, and it prints a character.
Serial.print((const char)buf*);*
Pete

Thanks everyone for help me.
Finally, I have found the right function for what I want
The funcion is: Serial.write(buf*);*
Here is the code to help others.
```
*#include <VirtualWire.h>

void setup()
{
    Serial.begin(9600); // Debugging only
    Serial.println(“setup”);

// Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000); // Bits per sec

vw_rx_start();      // Start the receiver PLL running
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message(buf, &buflen)) // Non-blocking
    {
int i;

digitalWrite(13, true); // Flash a light to show received good message
// Message with a good checksum received, dump it.
Serial.print("Got: ");

for (i = 0; i < buflen; i++)
{
    Serial.write(buf[i]); 
    Serial.print("");
}
Serial.println("");

digitalWrite(13, false);
    }
}*
```
Here the page where I found: http://arduino.cc/en/Tutorial/ASCIITable