A quanto letto in giro devo usare questa libreria: <VirtualWire.h> ma non ho ben chiaro come funziona, l'esempi sono questi:
TX:
// 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@airspayce.com)
// 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");
// 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);
}
e RX:
// 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@airspayce.com)
// Copyright (C) 2008 Mike McCauley
// $Id: receiver.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");
// 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);
}
}
non capisco se questa libreria è adatta per questi moduli, se si non riesco a decifrare il linguaggio.
Io vorrei che il TX collegato ad arduino collegato a sua volta a un GPS mi mandi i dati delle coordinate in un RX collegato ad un altro arduino collegato a sua volta al pc per leggere le coordinate sul monitor.
danyevo:
Io vorrei che il TX collegato ad arduino collegato a sua volta a un GPS mi mandi i dati delle coordinate in un RX collegato ad un altro arduino collegato a sua volta al pc per leggere le coordinate sul monitor.
Forse è meglio fare un passo alla volta. Prima devi capire come usare la libreria. Al link che hai fornito allegano in zip la libreria VirtualWire.
Quei due esempi, 1) transmitter.pde spedisce di continuo "hello" e l'altro 2) receiver.pde spara su Monitor Seriale tutto quello che riceve in valori esadecimali, carattere per carattere
... magari, per capire la VirtualWire, potresti cominciare con lo studiarti tutto quello che è riportato in questa pagina : http://www.airspayce.com/mikem/arduino/
la libreria invia una stringa, che sia codificata o meno.
La codifica/decodifica la devi duqnue fare a parte e varia molto da che tipo di codifica vuoi fare.
Molto probabilmente è assai complicato implementare una criptazione "forte" (vedi gpg), anzi, le criptazioni che puoi fare in modo semplie sono moolto deboli (twofish è oensato per i micro 8bit).
inizia a farlo funzionare, poi ci pensi
danyevo:
Comunque non riesco a capire il codice degli esempi, se mi spiegate un po?
che cosa non capisci? hai provato a leggere la guida che ho in firma?
1. uint8_t buf[VW_MAX_MESSAGE_LEN];
2. uint8_t buflen = VW_MAX_MESSAGE_LEN;
3. if (vw_get_message(buf, &buflen)) // Non-blocking
4. { int i;
5. digitalWrite(13, true); // Flash a light to show received good message
6. Serial.print("Got: "); // Message with a good checksum received, dump it.
7. for (i = 0; i < buflen; i++)
9. { Serial.print(buf[i], HEX);
8. Serial.print(" ");
10. }
11. Serial.println("");
12. digitalWrite(13, false);
13. }
dichiara una stringa buf di elementi di tipo u8int, ovvero unsigned int a 8 bit ovvero unsigned char;
VW_MAX_MESSAGE_LEN è un numero definito nella libreria
dichiara una variabile buflen inizializzata al valore VW_MAX_MESSAGE_LEN
verifica se arrivato un msg; passa 2 parametri: la stringa msg (che è un puntatore) e l'indirizzo della variabile buflen
da 7. a 8. fa un ciclo per ogni elemento della stringa buf; per ogni elemento stampa su seriale il valore in esadecimale più uno spazio di separazione
nid69ita:
da 7. a 8. fa un ciclo per ogni elemento della stringa buf; per ogni elemento stampa su seriale il valore in esadecimale più uno spazio di separazione
lesto:
la libreria invia una stringa, che sia codificata o meno.
esistono caratteri che non sono visibili (vedi tabella ascii), quindi meglio lavorare così
lesto:
scusa hgai ragione
Serial.print( (char)(buf*) );* [/quote] Il problema è che Lesto ... si è scordato il tag "code" e l'editor si è mangiato un pezzo XD XD XD Voleva scrivere : * *Serial.print( (char)(buf[i]) );* * Guglielmo P.S. : ... e se ti soffermassi un po' a ragionare sugli errori ci saresti dovuto arrivare da solo ... buf è un array ... quindi ...
#include <VirtualWire.h>
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
}
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;
int parola;
// Message with a good checksum received, dump it.
Serial.print("Got: ");
for (i = 0; i < buflen; i++)
{
Serial.print( (char)(buf[i]) );
Serial.print(" ");
}
Serial.println("");
parola = ( (char)(buf[i]) );
if (parola = P r o v a);
{
digitalWrite(13, false);
}
else{
digitalWrite(13, true);
}
}
}
Anzi correggo in:
// 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@airspayce.com)
// Copyright (C) 2008 Mike McCauley
// $Id: receiver.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");
// 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;
int parola;
// Message with a good checksum received, dump it.
Serial.print("Got: ");
for (i = 0; i < buflen; i++)
{
parola = ( (char)(buf[i]) );
Serial.print(parola);
Serial.print(" ");
}
Serial.println("");
if (parola = P r o v a);
{
digitalWrite(13, false);
}
else{
digitalWrite(13, true);
}
}
}