Invio stringa con moduli tx 433 Mhz

Ciao a tutti, ho necessità di inviare una stringa, tramite modulo tx 433 Mhz, contenente i seguenti campi:
2013/09/25;12:45:16;3240;3315;0,2700;0,2700;0,2700;0,2763;0,2700;0,0062;228,8
che sono dati relativi alla produzione, consumo, autoconsumo, tensione di rete, data e ora ecc.ecc da un arduino mega ad un arduino uno che poi deve trasferirli in rete tramite la ethernet shield.
Perchè non riesce ad inviarmela tutta?
ci sono limitazioni sulla lunghezza stringa da inviare tramite moduli?
quale soluzione potrei valutare affinchè mi manda tutta la stringa?
N.B. utilizzo la libreria virtualwire
Grazie a tutti per l'aiuto
Saluti

Queste sono le prove che faccio e perdo stringhe in ricezione
Aruino mega (lo uso come tx)

#include <VirtualWire.h>

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

void 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
}

byte count = 63;

void loop()
{
char msg[] = "2013/09/25 #";

msg[11] = count;
digitalWrite(led_pin, HIGH); // Flash a light to show transmitting
vw_send((uint8_t *)msg, 12);
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(led_pin, LOW);
delay(1000);
count = count + 1;
if (count > 90) count = 63;
}

Arduino uno (lo uso come RX)

#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((char)buf*);*

  • //Serial.print(' ');*
  • }*
    _ Serial.println();_
  • digitalWrite(led_pin, LOW);*
  • }*
    }
    [/quote]
    questo è quanto ricevo
    Got: 2013/09/25 A
    Got: 2013/09/25 B
    Got: 2013/09/25 C
    Got: 2013/09/25 D
    Got: 2013/09/25 E
    Got: 2013/09/25 G
    Got: 2013/09/25 H
    Got: 2013/09/25 J
    Got: 2013/09/25 K
    Got: 2013/09/25 L
    Got: 2013/09/25 M
    Got: 2013/09/25 N
    Got: 2013/09/25 O
    Got: 2013/09/25 P
    Got: 2013/09/25 Q
    Got: 2013/09/25 R
    Got: 2013/09/25 U
    Got: 2013/09/25 V
    Got: 2013/09/25 W
    Got: 2013/09/25 X
    Got: 2013/09/25 Y
    Got: 2013/09/25 Z
    Got: 2013/09/25 ?
    Got: 2013/09/25 @
    mi ha saltato la F e la I
    Come mai?
    grazie a tutti per l'aiuto

Ciao
Dovresti indicare i moduli 433mhz cosi intanto vediamo a quanti kb/s inviano i dati. A quanti volt alimenti la trasmittente?
Se i dati si "perdono" potrebbe anche essere il lato antenna che non é ben perfezionato( dovresti usare un filo da 17cm sia su lato ricevente che trasmittente)
Altra cosa :
La F e la I te la salta sempre oppure salta a caso alcuni valori? Perché se salta sempre e solo loro due,potrebbe anche essere che quei sensori (tipo sensori temperatura) richiedono meno di 2000 bit per second quindi dovresti abbassare il bitrate.
Vedi anche se questo post ti é utile: Low range on 433Mhz RF link kit - Interfacing - Arduino Forum

Con dispositivi fissi l'antenna ideale che ti permette di aumentare il guadagno anche di 5/6 volte ,a paritá di voltaggio, é questa: http://bsrg.org/aatn/hawgant1.gif

i sensori sono questi
http://www.ebay.it/itm/KIT-controllo-remoto-RF-Trasmettitore-e-Ricevitore-433Mhz-compatibile-Arduino-/151030866890?pt=Attrezzature_e_strumentazione&hash=item232a2423ca&_uhb=1

L'antenna è messa nel tx ma al momento sono messi a distanza di 5 cm che li ho sul tavolo...

sono alimentati a 5v. Salta in modo random le lettere non sempre le stesse

I moduli vedo che sono quelli piú economici classici.
A quale distanza tieni i due? Considera che con pareti di cemento( il cemento ferma in modo elevato le radiofrequenze come anche il wifi) che fanno da schermo inviare quella stringa senza errori e senza elevare il voltaggio della tx é quasi un'impresa.. (La tx puó arrivare fino a 12v)
Ps: non avevo letto bene.. Devi montare intanto l'antenna anche sulla ricevente stessa lunghezza.

come ti dicevo, al momento sto facendo prove e i due arduino sono a 5 cm di distanza l'uno dall'altro.
che tipo di moduli potrei acquistare in sostituzione a questi? magari economici..
grazie

Per i moduli prendi quelli ben documentati che trovi sul link( potresti considerare anche bluetooth)
Qui vedi la lista completa e sito serio: Wireless Buying Guide - SparkFun Electronics

Per vedere se non ci sia problema a livello di codice, aumenta intanto il voltaggio da dare alla tx..

Non entro nel merito della ricezione del messaggio errato, ma comunque mi sembra che stai usando male la libreria ...

La funzione vw_get_message(buf, &buflen) va chiamata SOLO quando sei sicuro che c'è un messaggio completo, cosa che DEVI verificare prima o con la funzione bloccante vw_wait_rx() o con la funzione NON bloccante vw_have_message(), o con la via di mezzo basata su timeout vw_wait_rx_max(timeout_ms).

Del resto le istruzioni parlano chiaro :

vw_get_message(buf, &buflen)) : Read the last received message. This should be called only when a message is known to be received with any of the 3 functions above. "buf" is an array where the message is copied. "buflen" should have the array's maximum size upon input, and upon return the number of bytes actually copied is retured. The function itself returns true if the message was verified correct, or false if a message was received but appears to have been corrupted.

Tutto preso da QUI ... che poi riporta quanto descritto nel sito ufficiale QUI :wink:

Guglielmo

Grazie a tutti per le risposte.
Farò tutte le prove e poi vi farò sapere.
Saluti

visto che sto inizaindo ad utilizzare anche io i moduli rf e ho visto diversi sketch e risposte in questo e altri post che mi sono tornate utili, volevo chiedere questo: a cosa serve l'istruzione byte count = 63; e anche msg [11] = count??? grazie :slight_smile: 11 indica per caso la lunghezza del messaggio??? pero mi potete comunque spiegare l'altra istruzione??? assume qualche rilevanza in questo caso particolare e se ne puo fare quindi anche a meno??? dipende quindi dalle esigenze???