apc220 nessuna comunicazione

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);
}

Invio

#include <SoftwareSerial.h>

SoftwareSerial porta1 = SoftwareSerial(9,8);
int a;
void setup() {
   pinMode(9,INPUT);
   pinMode(8,OUTPUT);
  porta1.begin(9600);
}

void loop() {
a=1;
porta1.print(a);
}

vedete se riuscite a risolvermi il problema perché non so più cosa inventarmi.

Dicci o posta una foto dei collegamenti

... 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 ?

Guglielmo

nid69ita:
Dicci o posta una foto dei collegamenti

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:

(preso dal netsetup)
SetupBox=COM3
FrqBox=460
RfRate=3
PowAmp=9
NetID=12345
NodeID=000000000004
SeriesRate=3
SeriesParity=0

Ricevitore:

SetupBox=COM3
FrqBox=460
RfRate=3
PowAmp=9
NetID=12345
NodeID=000000000005
SeriesRate=3
SeriesParity=0

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 :wink:

potresti descrivere come faccio il loopback?
ho il modulo ttl e l'apc220 poi come faccio a mandare e ricevere con lo stesso modulo?

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.

Tutto chiaro ?

Guglielmo

tutto questo va fatto usando lo stesso modulo ttl o devo usarne 2?

Scusa .. ma hai letto bene quello che ti ho scritto e lo schema logico che ti ho fatto ? ? ? :o

Ovvio che UNO ... ti colleghi su UNA porta seriale del PC ed usi un un emulatore di terminale ...

Guglielmo

ok adesso provo

edit:
un nome di un emulatore di terminale??
sto cercando ma non ne trovo

Braian7023:
ok adesso provo

edit:
un nome di un emulatore di terminale??
sto cercando ma non ne trovo

Braian7023:
un nome di un emulatore di terminale??
sto cercando ma non ne trovo

... ma guarda che va bene anche il monitor seriale di Arduino ... basta scegliere la giusta porta :smiley: :smiley: :smiley:

Comunque io mi trovo molto bene con CoolTerm (... che è sempre gratuito e multipiattaforma) :wink:

Guglielmo

bene adesso ho un problema con il ttl.
sotto gestione dispositivi mi dice impossibile avviare il dispositivo

edit:
ne ho un altro però non c'è scritta la funzione dei pin. è il modulo ttl che danno insieme agli apc220 (cp2102) della siliconlab

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 :wink:

Guglielmo

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 :wink:

Guglielmo

ok i moduli funzionano in teoria se mando un carattere da un modulo all'altro e come se stessi scrivendo sul terminale giusto?

Se funzionano e vedi il testo che scrivi ... allora il problema NON è nell'hardware dei moduli, ma nel tuo software ... ::slight_smile:

Guglielmo

#include <SoftwareSerial.h>

SoftwareSerial porta1 (9,8);
int led = 12;
int led2 = 13;

void setup() {
  pinMode(led,OUTPUT);
  pinMode(led2,OUTPUT);
  porta1.begin(9600);
  
  digitalWrite(led2,HIGH);
  digitalWrite(led,HIGH);
  delay(300);
  digitalWrite(led,LOW);
  delay(700);
  digitalWrite(led2,LOW);
  
}

void loop() {
 if(porta1.read() >= 0){
  digitalWrite(led,HIGH);
  digitalWrite(led2,LOW);
  }
  
  else{
  digitalWrite(led,LOW);
  digitalWrite(led2,HIGH);
  }
 delay(10);
}

ho usato questo codice e la stessa tecnica di prima solo che nell'if non entra ho sbagliato qualcosa?

... sbagli chiamata ...

...
if (porta1.available()) {
 mioChar = porta1.read();
 ...

Guglielmo

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 ?

Guglielmo