Tell me more ×
Electrical Engineering Stack Exchange is a question and answer site for electronics and electrical engineering professionals, students, and enthusiasts. It's 100% free, no registration required.

I'm running Virtual Wire between two Arduino's and, so far I've been able to send characters and receive them on the other side.

Problem is, how do I turn this received 'A' (or whatever I send) into an action to operate a few digital outputs. (it's a relay circuit configured as an H-bridge)

Below is the sample receiver program included with VirtualWire.

// receiver.pde
//
// Simple example of how to use VirtualWire to receive messages
// Implements a simplex (one-way) receiver with an Rx-B1 module


#include <VirtualWire.h>

int twoPin = 2;     //the two pins to be used to control the relays
int fourPin = 4;

void setup()
{
  pinMode(twoPin, OUTPUT);
  pinMode(fourPIn, OUTPUT);

  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);
  }
}
share|improve this question

1 Answer

Unless I misunderstood the question, it should be as simple as extending the code where you print out what's in the buffer with some if-then statements. For example your code:

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

goes through the received string and prints it out bit by bit. If, instead, you want to know if you received an "A", you can use:

if (buf[0] = "A")
{
  //flip bits here
}

You could also use a Case-Switch block to define several letters. There are many ways to improve this code, including using strcmp so that you can send full words and not worry about case or terminations, but it's best to worry about that once you're off the ground.

If I misunderstood the question, I apologize. I'll be glad to try again with more information.

share|improve this answer
1  
The condition is incorrect, it should read "if (buf[0] == 'A')". Or perhaps ('A'==*buf) :-) – Toby Jaffey Jun 30 '10 at 1:30

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.