Go Down

Topic: VirtualWire (Read 3804 times) previous topic - next topic

Vincent19

Modified ! Thanks . hope you can help me

AWOL

Quote
What does it means ?

In a nutshell, see if there's any data to read, read it
Code: [Select]
if (vw_get_message(buf, &buflen)), and then print it
Code: [Select]
for (i = 0; i < buflen; i++)
{
    Serial.print((char)buf[i]);
    Serial.print(" ");
}
.
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

Vincent19

Is this the syntax ? Thanks

Vincent19


Quote
What does it means ?

In a nutshell, see if there's any data to read, read it
Code: [Select]
if (vw_get_message(buf, &buflen)), and then print it
Code: [Select]
for (i = 0; i < buflen; i++)
{
    Serial.print((char)buf[i]);
    Serial.print(" ");
}
.

Then how about vw_have_message()?

AWOL

From the reference:
Quote
uint8_t vw_have_message    (       )    

Returns:
    true if a message is available to read

"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

Vincent19

OK..so means I can use the idea that vw_have_message () then do something ?

AWOL

If you don't mind blocking, you could just use "vw_wait_rx", or just use "vw_get_message" as you've shown.
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

Vincent19

Blocking of what ? Blocking of the signal from transmitter ?

AWOL

No, blocking of your code, waiting for a message to arrive.
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

Vincent19

Oh..it means the code sometimes will fail to execute ? Am I correct ?

AWOL

Quote
it means the code sometimes will fail to execute ? Am I correct ?

During development, code will always sometimes fail to execute as we expect it to.
But, no, you are not correct. "Blocking" means the code will loop waiting until a message is received. This may or may not be a problem for you.

The great thing about the Arduino is that you can try things, and if they don't work, try something different.
The frequency of your questions leads me to suspect you're not trying the things you're asking about.
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

Vincent19

Cool..yea I shall work for it now..thanks so much ..This library is easy to use !

PaulS

Quote
So from this can I say uint8_t is like a data type ?

It isn't "like a data type". It IS a data type, just like int, float, byte, char, long, etc.

The u up front indicates unsigned. The int differentiates the type from floating point types. The 8 explicitly defines the size of the variables, in bits. The _t indicates that the type is a standard type. Every compiler is supposed to recognize the type, and allocate the same space for it.

This is not true of types like int. An int can be 16 bits, 32 bits, or 64 bits (or other unusual sizes), depending on the platform. A uint8_t is always 8 bits. A int32_t is always 32 bits. A uint64_t is always 64 bits.

Vincent19


Quote
it means the code sometimes will fail to execute ? Am I correct ?

During development, code will always sometimes fail to execute as we expect it to.
But, no, you are not correct. "Blocking" means the code will loop waiting until a message is received. This may or may not be a problem for you.

The great thing about the Arduino is that you can try things, and if they don't work, try something different.
The frequency of your questions leads me to suspect you're not trying the things you're asking about.

Code: [Select]
#include <VirtualWire.h>
#undef int
#undef abs
#undef double
#undef float
#undef round
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
    pinMode(13, OUTPUT);
}

void loop()
{
  uint8_t count;
if(count==true)
{
  count = false;
}
  count = vw_wait_rx_max(2000);// Non-blocking
  if (true)
  {
        digitalWrite(13, HIGH); // Flash a light to show received good message
delay(500);// Message with a good checksum received, dump it.
digitalWrite(13, LOW);
        delay(500);
  }
  else if(false)
  {
    digitalWrite(13, HIGH);
    delay(100);
    digitalWrite(13,LOW);
    delay(100);
  }
       

   
}


I write this code..I want it to be like when it does not receive message for 2s, then it will return false. If it receive message, then return true. Then it will only blink once then the whole system become false again. So what moddification I need to do ?

Thanks

AWOL

#44
Jan 22, 2013, 01:27 pm Last Edit: Jan 22, 2013, 02:36 pm by AWOL Reason: 1
Code: [Select]
void loop()
{
 uint8_t count;
if(count==true)

It doesn't make sense to test an automatic variable like this.
If you want "count" to retain its value, make it "static".

Code: [Select]
if (true)
Will always be true.
Code: [Select]
if(false)
Will always be false.
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

Go Up