salve,
ho problemi a far comunicare 2 schede di arduino con i moduli wireless apc220.
sto usando la libreria software serial per mandare un messaggio da un arduino all'altro e se il ricevente riceve qualsiasi cosa mi accende un led solo che non riesco a farli comunicare ho anche provato a riconfigurare i moduli wireless ma niente non vedo accenni di comunicazione.
Sto usando un arduino uno rev 3 e un arduino nano atmega 328
Ricezione
#include <SoftwareSerial.h>
SoftwareSerial porta1 = SoftwareSerial(9,8);
int led = 12;
int led2 = 13;
void setup() {
pinMode(led,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(9,INPUT);
pinMode(8,OUTPUT);
porta1.begin(9600);
//Check led
digitalWrite(led2,HIGH);
digitalWrite(led,HIGH);
delay(300);
digitalWrite(led,LOW);
delay(700);
digitalWrite(led2,LOW);
}
void loop() {
if(porta1.read() >= 0){ //led verde acceso e rosso spento
digitalWrite(led,HIGH);
digitalWrite(led2,LOW);
}
else{ //led verde spento e rosso acceso
digitalWrite(led,LOW);
digitalWrite(led2,HIGH);
}
delay(10);
}
... domanda banale ... hai verificato, usando l'apposito software RF-magic, che i due moduli siano impostati correttamente in modo da poter parlare tra di loro (... frequenza, data rate, parity, ecc.) ? Il pin EN lo tieni tu a livello HIGH ?
in ricezione:
led è il led verde collegato al pin 12
led 2 al pin 13
apc220:
gnd terra
vcc +5v
en niente
rx pin 9
tx niente
trasmissione:
apc220:
gnd terra
vcc +5v
en niente
rx niente
tx pin 8
gpb01:
... domanda banale ... hai verificato, usando l'apposito software RF-magic, che i due moduli siano impostati correttamente in modo da poter parlare tra di loro (... frequenza, data rate, parity, ecc.) ? Il pin EN lo tieni tu a livello HIGH ?
controllato e ricontrollato ho persino riconfigurato i moduli svariate volte comunque i settaggi sono: Trasmettitore:
Tanto per cominciare elimina i pinMode() per i pin usati dalla SoftwareSerial ... non servono e possono dare fastidio, poi, volendo, il modo classico di istanziare la SoftwareSerial (usando i tuoi nomi e pin) è:
SoftwareSerial porta1(9, 8);
Prova ad applicare le correzioni e verifica.
Guglielmo
P.S. Ma hai provato se funzionano, indipendentemente da Arduino, con un semplice loopback ? TX_PC -> RX_APC1 e TX_APC2 -> RX_PC ... in questo modo, se funzionano, quello che mandi sul TX del PC lo devi ricevere sul RX
Chiaramente devi fare i collegamenti con dei cavetti ...
... alimenti entrambi gli APC, colleghi l'adattatore RS232<-->TTL al PC così puoi connetterci con un emulatore di terminale, poi, dalla parte TTL dell'adattatore con un cavetto vai dal TX dell'adattatore (che è il TX del PC) all'RX del primo APC e con un altro cavetto dal RX dell'adattatore (che è il RX del PC) al TX del secondo APC.
Ovviamente tutti i GND devono essere in comune.
Avrai :
TX_PC --> Adattatore_TTL --> TX_adattatore --> RX primo APC ------->radio----->
RX_PC <-- Adattatore_TTL <-- RX_Adattatore <-- TX secondo APC<-----radio----<
Quando trasmetti, i caratteri arrivano dal PC al primo APC che li trasmette in Wireless; il secondo li riceve i dati wireless e li trasmette indietro verso il PC.
Per il punto 1. verifica che tipo di convertitore monta ... probabilmente devi installare dei driver. Per il punto 2 non posso aiutarti ... io, quando occorre, uso i convertitori USB <--> TTL della SparkFun e li la piedinatura è ricavabile dallo schema ... probabilmente è la stessa, ma verificherei con il fornitore
gpb01:
Per il punto 1. verifica che tipo di convertitore monta ... probabilmente devi installare dei driver. Per il punto 2 non posso aiutarti ... io, quando occorre, uso i convertitori USB <--> TTL della SparkFun e li la piedinatura è ricavabile dallo schema ... probabilmente è la stessa, ma verificherei con il fornitore
Guglielmo
ok i moduli funzionano in teoria se mando un carattere da un modulo all'altro e come se stessi scrivendo sul terminale giusto?
in realtà voglio far leggere dal wireless e se c'è qualcosa ovvero un numero maggiore di 0(che sarebbe null in teoria) faccio accendere il led. penso che sia uguale al tuo codice
... se c'è qualche cosa lo sai con la porta1.available() e ... ti sei ricordato di portare il TX dei moduli sul RX di Arduino e viceversa ? Le masse le hai messe in comune ?