Codice RadioFrequenza

Ciao ragazzi,

Sto cominciando a smanettare con il codice per la Radio Frequenza.
Volevo provare l'esempio classico che mi da come esempio non appena installo la libreria ma mi da questo errore:

vw_set_tx_pin was not declared in this scope ??? Perchè???

// 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>

const int led_pin = 6;
const int transmit_pin = 12;
const int receive_pin = 11;
const int transmit_en_pin = 3;

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

    // Initialise the IO and ISR
    vw_set_tx_pin(transmit_pin);
    vw_set_rx_pin(receive_pin);
    vw_set_ptt_pin(transmit_en_pin);
    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(led_pin, HIGH); // Flash a light to show received good message
	// Message with a good checksum received, print it.
	Serial.print("Got: ");
	
	for (i = 0; i < buflen; i++)
	{
	    Serial.print(buf[i], HEX);
	    Serial.print(' ');
	}
	Serial.println();
        digitalWrite(led_pin, LOW);
    }
}

Specificando l'IDE che usi si capirebbe meglio ma, vedendo nell'intestazione del file che si tratta di un pde (receiver.pde), mi viene da pensare che tu stia usando una versione dello sketch e della libreria non adatta alla versione del software di Arduino che usi.

@Damidu

Per prima cosa ti dico che questo sito va bene come esempio e per cultura generale sui moduli ma contiene una libreria VirtualWire obsoleta, ci ho sbattuto un po la testa ma non sono riuscito a compilare con successo ne con IDE Arduino 1.0 ne con 0.23:

http://www.pjrc.com/teensy/td_libs_VirtualWire.html

Dopo un po di ricerche finalmente sono riuscito a trovare questo sito, stesso autore ma librerie aggiornate:

http://www.open.com.au/mikem/arduino/VirtualWire/

Testato con IDE 0.23, 1.0 e 1.0.3 su Ubuntu 12.04.

Ecco anche gli sketch che ho usato per i test, leggermente modificati rispetto a quelli trovati negli Examples

Transmitter:

// 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>
const int transmit_pin = 12; // DATA del trasmettitore sul PIN 12 di Arduino

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

    vw_set_tx_pin(transmit_pin);  
    // 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);
}

Rispetto allo sketch originale, ho aggiunto le righe

...
const int transmit_pin = 12; // DATA del trasmettitore sul PIN 12 di Arduino
...
vw_set_tx_pin(transmit_pin);

Receiver:

// 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>
const int receive_pin = 2; // DATA del ricevitore sul PIN 2 di Arduino

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

    vw_set_rx_pin(receive_pin);
    // 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);
    }
}

Rispetto allo sketch originale, ho aggiunto le righe

...
const int receive_pin = 2; // DATA del ricevitore sul PIN 2 di Arduino
...
    vw_set_rx_pin(receive_pin);

Lo sketch TX funzionava anche senza la definizione del tx pin, mentre l'rx non funzionava correttamente.

Innanzitutto, mi spieghi di quale hardware stai parlando ?? (mi interessa)

Damidu non lo ha specificato, ma se guardi il primo link che l'ho postato puoi vedere quello con cui l'ho testato io:

http://www.pjrc.com/teensy/td_libs_VirtualWire.html

sono moduletti molto economici, direttamente dalla Cina si trovano addrittura a poco più di un euro spediti la coppia (1 trasmettitore + 1 ricevitore) a 433 MHz o 315 MHz.

Sul sito menzionato: "you get what you pay for"

quindi mi vien da dire che non siano lontanamente paragonabili agli Xbee o cose del genere (anche se non ho mai testato la differenza) ma per smanettarci un po mi vien da dire che vadano bene.