Hi There,
Programming newbie here......
I have a arduino uno setup. Im trying to send a signal between transmitter and receiver.
I have tx on pin 13 and rx on pin 11.
vw have message is true
but vw_get_message(buf, &buflen) is false
the receiver does not seem to be working is there anyway that I can confirm that the receiver works
any help is much appreciated
Code
#include <VirtualWire.h> //TxRx
#include <iostream>
#include <math.h>
#include <TimerOne.h>
#include <ctime.h>
using namespace std; //using standard library
//int led_pin_sent = 8; //led test for message sent confirmation
//int led_pin_receive = 7; //led test for message received confirmation
int motor1Pin = 9; //motor 1
int motor2Pin = 10; //motor 2
int potPin = A0; //potentiometer pin 23 ADC
int receive_1_pin = 11; //receiver 1
int transmit_pin = 13; //dummy transmitter to act as ball
byte count =0; //byte stores a 8 bit numerical value without decimals points. 0-255
TimerOne t; //declare t as timer1 function for timing receiver to work out distance
/************************************************************************************************/
void setup()
{
/***********************************************************************************************/
//this section will be remove
//transmiter start with bit speed, in future the ball should start when receiver is in range
vw_setup(1000); //Bits per sec
vw_set_tx_pin(transmit_pin); //set pin 13 for transmiter
/**********************************************************************************************/
//vw_set_rx_pin(receive_1_pin); //set pin 11 for receiver 1
vw_set_ptt_inverted(true); // ?????????
t.initialize(1000); //1 second period
//declare IO ports
pinMode(13,OUTPUT); //T
pinMode(11,INPUT); //R1
Serial.begin(9600); // sets serial rate for pc monitoring purposes
Serial.println("receivers active and waiting"); //print line in monitoring
delay(100); //delay to allow print to finish
}
void loop()
{
//receiver settings
vw_rx_start(); // Start the receiver PLL running
delay(100); //ms
//temp transister section
//digitalWrite(led_pin_sent, HIGH); //led on for message sending
Serial.print("cycle number ");
Serial.println(count);
delay(100); //ms
Serial.println("message sending");
delay(100); //ms
int i;
i = count;
t.restart(); //restart timer value
//testing message send
const char *msg = "hello";
vw_send((uint8_t *)msg, strlen(msg));
delay(400);
vw_wait_tx(); // Wait until the whole message is gone
t.start(); //start timer to determine the
count = count +1;
if (vw_send((uint8_t *)msg, strlen(msg)))
{
Serial.println("message sent");
delay(100); //ms
}
if (vw_have_message() == 1); //condition to prove message is received
{
unsigned int time[] = {0,0,0};
byte l = 0;
time[l] = t.read(); //time is seconds
Serial.println(msg);
delay(100);
/**********************************************************************************************/
//distance calculation
int tm; //time taken
int d; // distance
tm = time[l];
d = 320 * tm; //distance in [m]
/**********************************************************************************************/
Serial.println("message recieved");
delay(100); //ms
Serial.print("Receiver_1 "); //show receiver 1 received message and time value
delay(100); //ms
Serial.print(d);
delay(100); //ms
Serial.println(" [m] ");
delay(100); //ms
Serial.print("Time recorded was ");
delay(100); //ms
Serial.println(time[l]);
delay(1000);
Serial.println(" ");
}
//receiver message
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) //check if any messages have been received
{
int m;
Serial.print("got");
for(m = 0; m < buflen; m ++)
{
Serial.println("message recieved");
delay(1000); //ms
Serial.println('Receiver_1', t.read()); //show receiver 1 received message and time value
delay(1000); //ms
}
}
return;
}