Come fare comunicare tra di loro 2 Arduino Uno con 2 moduli HC 05

Buonasera, vorrei costruire una trasmittente Bluetooth con Arduino accoppiandola ad un modulo hc-05, per poi comandare una macchinina sempre con Arduino ed un modulo hc-05.
Sono riuscito ad accoppiare i 2 moduli hc-05, riesco a leggere il segnale dal potenziometro a forma di joistick, tuttavia mi trovo in difficoltà perché non so le stringhe di codice con cui fare dialogare i 2 Arduino.
Ho cercato su google e su youtube qualche guida,ma sono più confuso di prima perchè ognuno trasmette dati in modo diverso.
C'è qualcuno che possa consigliarmi una strada da scegliere?
In pratica ho 2 valori dal potenziometro e vorrei trasmetterli ad un altro Arduino.

Che tipo di dato ti danno i due potenziometri? Sono collegati a porte analogiche di Arduino? Perché in tal caso avresti due interi ...

Dai un po' più di dettagli.

Guglielmo

Si, esatto, ottengo 2 interi, ora il mio problema sta qua, voglio inviare questi 2 interi ad un altro Arduino via Bluetooth, il problema è che non conosco la funzione per farlo. (provvederò a caricare il codice che ho scritto appena rientro dal lavoro)

La trasmissione via BT è una trasmissione seriale, quindi … UN carattere alla volta (un byte).

Se guardi nel reference, ci sono due funzioni fatte per separare i due bytes di un interohighByte() e lowByte().

Una volta che li hai separati li invii uno ad uno sulla seriale. Dall’altra parte, dove li ricevi, devi rimettere assieme le coppie di byte per formare un intero ricordando che : intero = ( (byteAlto << 8 ) | byteBasso ).

Guglielmo

Devo fare un passo indietro alla mia richiesta perchè ho dei problemi anche solo a comunicare con 1 valore.
Attualmente gli sketch sono cosi, e non riesco ad ottenere nessuna risposta dall'Arduino.
ho provato a collegare il potenziometro sul primo Arduino.
Il valore letto del potenziometro dovrà fare lampeggiare il led sul 2° Arduino ad una frequenza dettata dal potenziometro del primo.

//Radiocomando

int ch0;//avanti ed indietro

void setup() 
{
  Serial.begin(9600);
  delay(5000);
}

void loop() 
{
  ch0=analogRead(A0);//lettura del X joistick
  
  
  Serial.print(ch0);
  Serial.print("\n");
  Serial.write(ch0);

}
//ricevente
#define led 13

int val;

void setup() 
{
 Serial.begin(9600);
 pinMode(led,OUTPUT);
 digitalWrite(led,LOW);
}

void loop() 
{
  if(Serial.available()>0)
  {
    val=Serial.read();
    }
 digitalWrite(led,HIGH);
 delay(val);
 digitalWrite(led,LOW);  
  }
  1. NON usare la Serial (che è la vera seriale di Arduino) dato che ti precludi qualsiasi possibilità di debug. Inoltre, come molte volte detto su questo forum, gli HC-05 collegati alla vera seriale di Arduno UNO … spesso non vanno.

  2. Usa la SoftwareSerial e ti conisglio il pin 10 in RX ed il pin 11 in TX.

  3. Naturalmente il modulo BT deve essere collegato così:

TX BT --- > pin RX Arduino
RX BT <---  pin TX Arduino
GND BT ---- GND Arduino
  1. Comincia con una prova semplice, da una parte trasmetti un char dall’altra lo ricevi. Solo dopo complichi la cosa con più caratteri.

Guglielmo

Ok, ho fatto come hai detto, ora i codici risultano così:

//Radiocomando
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11);
int ch0;

void setup() 
{
  mySerial.begin(9600);
}

void loop() 
{
  ch0=5;
  mySerial.write(ch0);
}
//Ricevente
#include <SoftwareSerial.h>

SoftwareSerial mySerial(11, 10);
int val;

void setup() 
{
 mySerial.begin(9600);
}

void loop() 
{
  if(mySerial.available()>0)
  {
    val=mySerial.read();
   }
}

Come posso verificare che stiano funzionando correttamente?

Scusa è, ma se ch0 lo dichiari “int” è di DUE byte … la trasmissione via BT è carattere a carattere o byte a byte … dichiaralo char o byte !

Per provare i moduli … abbiamo messo decine di volte sul forum un programmino di prova … questo:

#include <SoftwareSerial.h>

#define  SS_RX 10            // RX PIN to receive  data
#define  SS_TX 11            // TX PIN to transmit data

SoftwareSerial ssSerial(SS_RX, SS_TX);

void setup()
{
  delay (2000);
  //
  Serial.begin(9600);        // Initialize USB Serial port
  ssSerial.begin(9600);      // Initialize SoftwareSerial port
  //
  Serial.println("--- Ports ready ---");
  Serial.println("");
}

void loop()
{
  if (ssSerial.available() > 0) Serial.write(ssSerial.read());
  if (Serial.available() > 0) ssSerial.write(Serial.read());
}

Tutto ciò che scrivi sul monitor seriale da una parte viene trasmesso via BT e visualizzato dall’altra e viceversa.

Guglielmo

Ok, ho aperto 2 monitor seriali assieme per vedere se comunicano, ma scrivendo da una parte non compare nulla sull'altra.

Ma ... hai configurato i due moduli uno come master ed uno come slave ? Perché per parlare tra di loro, uno deve essere il master e l'altro lo slave che si connette al master.

Hai seguito QUESTA guida per configurarli ?

Guglielmo

No, non ho potuto seguire quella guida perchè mi manca il "USB-TTL module", per configurare i 2 moduli ho seguito invece questa:
Guida per moduli hc-05

Dottor_Andre:
No, non ho potuto seguire quella guida perchè mi manca il “USB-TTL module” …

NON ti serve. Il programmino che ti ho messo sopra invia al modulo BT quello che scrivi sul monitor seriale … quindi fa le veci di un convertotore USB (il monitor seriale sil PC) <—> TTL (il modulo BT collegato ad Arduno).

Quello che dovrai cambiare è la velocità … quando il BT-05 va in modalità comandi “AT” lavora a 38400 e non a 9600.

Guglielmo

Giusto per "non sapere ne leggere ne scrivere", riprovo a fare il pairing tra i 2 moduli, qualcuno puo' suggerirmi un programma per disegnare le connessioni tra i vari moduli?
Potrei anche postare le foto se sono di gradimento ed utili a capire se sbaglio qualcosa.

Dottor_Andre:
Giusto per "non sapere ne leggere ne scrivere", riprovo a fare il pairing tra i 2 moduli, qualcuno puo' suggerirmi un programma per disegnare le connessioni tra i vari moduli?
Potrei anche postare le foto se sono di gradimento ed utili a capire se sbaglio qualcosa.

Guarda che va bene anche un disegno fatto a mano, purché chiaro :slight_smile:

Anche le foto possono essere utili :wink:

Guglielmo

Ok, nessuno dei 2 moduli non funziona, ogni volta che provo ad impostarlo "master" (provato su entrambi), si risettano a "slave" senza apparente motivo.

Volevo anche chiedere questa cosa: visto che i moduli non funzionano mi converrebbe passare ad altri metodi di comunicazione con 2 arduino?

Tipo questi?
Moduli a 2.4 Ghz

Beh … ci sono gli HC-12/HC-11 … ti allego un paio di documenti e … guarda anche QUI :wink:

Guglielmo

HC-12 english datasheets.pdf (528 KB)

HC-12-Documentations.pdf (282 KB)

Grazie mille, visto che il prossimo tentativo che faro' sara con gli hc12 oppure con nRF24L01,come si chiude il topic?

Dottor_Andre:
… come si chiude il topic?

Non ce ne è bisogno … scompare mano mano nelle varie pagine …

Guglielmo