RF Link Help

I have been expiramenting with some RF links (tutorial here, RF link). The tutorial is great, but it only does serial communications. 

The code I use is 

 

// 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 ([email protected])

// 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");

    pinMode(13, OUTPUT);

    pinMode(10, INPUT);    // Initialise the IO and ISR

    vw_set_ptt_inverted(true); // Required for DR3100

    vw_setup(2000); // Bits per sec

}

 

void loop()

{

   int buttonState = digitalRead(10); 

    const char *msg = "hello";

    if (buttonState == HIGH){

        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);

    }

}

 

 

My problem is that it seems to bypass my if() statement, and just transmitts anyway. Does anyone know of a better way to do this? or can point out any problems in my code?

 

Also on the recieving end can I use

 

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(" ");

}

        if(buf[] == 31) //DO whatever

 

        // OR

        if(buf[1] == 3 && buf[2] == 1) // DO whatever

Serial.println("");

        digitalWrite(13, false);

    }

}

 

Sometimes the problem is in the hardware - not the software :slight_smile:

Sometimes the problem is in the hardware - not the software. On a first glance the code looks right. 

Can you measure the voltage on input pin 10 and verify that the voltage is LOW when you expect it to be LOW? Or is it HIGH - around 5V?

( You have to be aware that in this forum’s title you ask for help with the RF. But the question you have is: Why is my button HIGH if I expect it to be LOW? This question actually is not related to RF. )

PS: Look at this tip on how to post source code in LMR.