problemi con Trasmettitore e Ricevitore

Salve a tutti!
Avrei bisogno gentilmente di un aiuto per risolvere un problema che sto riscontrando con Arduino, nello specifico con Trasmettitore e Ricevitore.

Vi spiego prima il lavoro e l'obiettivo che sto cercando di raggiungere con Arduino:
vorrei far comunicare un Trasmettitore e un Ricevitore in radio-frequenza per la trasmissione di dati che provengono da sensori di temperatura e umidità (questi ultimi due sono stati già collegati con Arduino Mega 2560 e wireless SD Shield e sono funzionanti).

Per il Trasmettitore e Ricevitore sto utilizzando gli Arduino Mega 2560 e la LoRa Gamma-868, munite entrambe di antenna, e su internet ho trovato gli sketch sia per il trasmettitore che per il ricevitore ed ho effettuato il caricamento.

Questo è lo Sketch che ho utilizzato per il trasmettitore:

// DEFINE CHANNELS AND OPTION LINKS 
#define  CH1 2  // All channels are outputs on the Arduino when configured as a transmitter
#define  CH2 3
#define  CH3 4
#define  CH4 5
#define  CH5 6
#define  CH6 7
#define  CH7 8
#define  CH8 9

#define  OPT1  11 
#define  OPT2  10

void setup() {
// put your setup code here, to run once:
pinMode(2, OUTPUT);    // all outputs to control GAMMA-868 in TX Mode 
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);  

digitalWrite(CH1, HIGH);    // defalt start values for all inputs on GAMMA   
digitalWrite(CH2, HIGH);
digitalWrite(CH3, HIGH);
digitalWrite(CH4, HIGH);
digitalWrite(CH5, HIGH);
digitalWrite(CH6, HIGH);
digitalWrite(CH7, HIGH);
digitalWrite(CH8, HIGH); 

Serial.begin(9600);

}

void loop() {
// put your main code here, to run repeatedly:

digitalWrite(CH1,  LOW);
   delay(3000);
digitalWrite(CH1, HIGH);
   delay(3000);  
   
digitalWrite(CH2,  LOW);
   delay(3000);
digitalWrite(CH2, HIGH);
   delay(3000);
   
digitalWrite(CH3,  LOW);
   delay(3000);
digitalWrite(CH3, HIGH);
   delay(3000);
   
digitalWrite(CH4,  LOW);
   delay(3000);
digitalWrite(CH4, HIGH);
   delay(3000);
   
digitalWrite(CH5,  LOW);
   delay(3000);
digitalWrite(CH5, HIGH);
   delay(3000);
   
digitalWrite(CH6,  LOW);
   delay(3000);
digitalWrite(CH6, HIGH);
   delay(3000);
   
digitalWrite(CH7,  LOW);
   delay(3000);
digitalWrite(CH7, HIGH);
   delay(3000);
   
digitalWrite(CH8,  LOW);
   delay(3000);
digitalWrite(CH8, HIGH);
   delay(3000);   


}

mentre questo è quello che ho utilizzato per il ricevitore:

// DEFINE CHANNELS AND OPTION LINKS 
#define  OP1 2  // All channels are inputs on the Arduino when configured as a RECEIVER
#define  OP2 3
#define  OP3 4
#define  OP4 5
#define  OP5 6
#define  OP6 7
#define  OP7 8
#define  OP8 9


int StateChange = 0;           // state change flag value 

byte Inputs18 = B00000000;     // Clear all inputs flags before use  

void setup() {
// put your setup code here, to run once:
pinMode(2, INPUT);            // all outputs to control BRAVO in TX Mode 
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(9, INPUT);

Serial.begin(9600);        // enable serial to see what button is pressed on a terminal program

}

void loop() {
// put your main code here, to run repeatedly:
// Test output 1 
StateChange = bitRead(Inputs18, 0);  // Read last known state of output 1


if ((digitalRead(OP1)) == HIGH) {      
  if (StateChange == 0) {              // if output is high and has changed since last read then 
    Serial.println("Output 1 HIGH");   // print text to serial terminal
    bitSet(Inputs18, 0);               // change know state flag
  }
}
else  {
  if (StateChange == 1){
    Serial.println("Output 1 LOW");
    bitClear(Inputs18, 0);
  }  
}


// Test output 2
StateChange = bitRead(Inputs18, 1);  // Read last known state of output 2

if ((digitalRead(OP2)) == HIGH) { 
  if (StateChange == 0) {
    Serial.println("Output 2 HIGH");
    bitSet(Inputs18, 1);
  }
}
else  {
  if (StateChange == 1){
    Serial.println("Output 2 LOW");
    bitClear(Inputs18, 1);
  }  
}


// Test output 3
StateChange = bitRead(Inputs18, 2);  // Read last known state of output 3

if ((digitalRead(OP3)) == HIGH) { 
  if (StateChange == 0) {
    Serial.println("Output 3 HIGH");
    bitSet(Inputs18, 2);
  }
}
else  {
  if (StateChange == 1){
    Serial.println("Output 3 LOW");
    bitClear(Inputs18, 2);
  }  
}


// Test output 4
StateChange = bitRead(Inputs18, 3);    // Read last known state of output 4 

if ((digitalRead(OP4)) == HIGH) { 
  if (StateChange == 0) {          
    Serial.println("Output 4 HIGH");
    bitSet(Inputs18, 3);
  }
}
else  {
  if (StateChange == 1){
    Serial.println("Output 4 LOW");
    bitClear(Inputs18, 3);
  }  
}

 StateChange = bitRead(Inputs18, 4);    // Read last known state of output 5  

if ((digitalRead(OP5)) == HIGH) { 
  if (StateChange == 0) {          
    Serial.println("Output 5 HIGH");
    bitSet(Inputs18, 4);
  }
}
else  {
  if (StateChange == 1){
    Serial.println("Output 5 LOW");
    bitClear(Inputs18, 4);
  }  
}

  StateChange = bitRead(Inputs18, 5);    // Read last known state of output 6 

if ((digitalRead(OP6)) == HIGH) { 
  if (StateChange == 0) {          
    Serial.println("Output 6 HIGH");
    bitSet(Inputs18, 5);
  }
}
else  {
  if (StateChange == 1){
    Serial.println("Output 6 LOW");
    bitClear(Inputs18, 5);
  }  
}

  StateChange = bitRead(Inputs18, 6);    // Read last known state of output 7 

if ((digitalRead(OP7)) == HIGH) { 
  if (StateChange == 0) {          
    Serial.println("Output 7 HIGH");
    bitSet(Inputs18, 6);
  }
}
else  {
  if (StateChange == 1){
    Serial.println("Output 7 LOW");
    bitClear(Inputs18, 6);
  }  
}

    StateChange = bitRead(Inputs18, 7);    // Read last known state of output 7

if ((digitalRead(OP8)) == HIGH) { 
  if (StateChange == 0) {          
    Serial.println("Output 8 HIGH");
    bitSet(Inputs18, 7);
  }
}
else  {
  if (StateChange == 1){
    Serial.println("Output 8 LOW");
    bitClear(Inputs18, 7);
  }  
}

}

Sul monitor seriale del Trasmettitore non mi appare nulla, mentre sul monitor seriale del Ricevitore ho questo:

output 1 HIGH
output 2 HIGH
output 3 HIGH
output 4 HIGH
output 5 HIGH
output 6 HIGH
output 7 HIGH
output 8 HIGH

da quello che ho capito, trovando informazioni su internet, è che dallo sketch del ricevitore è imposto la scritta output 1 HIGH ecc... mentre il mio obiettivo è quello di voler leggere dal monitor seriale del Ricevitore i dati che mi manda il trasmettitore con un delay di 3 secondi (3000).
Vorrei iniziare col ricevere la parola "ciao" dal trasmettitore e leggerla nel monitor seriale del ricevitore e purtroppo su Internet ho trovato poco e nulla che possa aiutarmi e attualmente non riesco a capire cosa deve essere scritto nei due sketch per ottenere questa cosa.
La mia idea per il lavoro che sto facendo è, una volta riuscito a far comunicare Tx e Rx ricevendo la parola "ciao", riuscire a trasmettere i dati su temperatura e umidità che ho all'esterno di un edificio (sensori collegati al trasmettitore) e riceverli in tempo reale nella mia postazione lavorativa (dove ho il ricevitore).

Spero di essere stato abbastanza chiaro nel farvi capire il mio problema e che riusciate a darmi una mano :smiley: .

vi ringrazio in anticipo :slight_smile: ,

un abbraccio

Simone

Ciao Hoppus22,

per cortesia modifica il tuo post includendo il tuo codice tra i tag code (pulsante </> sopra le faccine); per modificare il post premi il pulsante in basso a destra (sotto il tuo post) “more…”
questo eviterà che l’editor del forum interpreti in malo modo certe parti dello sketch.

ciao

>ORSO2001: L’indicazione esatta (comprese le istruzioni :grin: ) è …

>Hoppus22: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Guglielmo

Spero di aver corretto bene il testo in modo da essere più chiaro per i vostri suggerimenti e/o aiuti :slight_smile: .

ciao,

premetto che non sono un esperto di schede LoRa però cercando in rete ho visto che la LoRa GAMMA 868 può essere settata come : trasmittente, ricevente, transceiver, serial out.

le prima 3 modalità impostano in automatico i pin I/O come input od output od un misto e, se non ho capito male, l'aggiornamento dello stato dei pin in input viene fatto in automatico, dal trasmittente, ai vari riceventi accoppiati (paired).

Per quanto riguarda la configurazione come "serial out" dovrai usare i pin TX ed RX come RS232 ...dai un occhio a QUESTO data sheet.
Non ho trovato librerie...magari perchè non so bene cosa cercare...penso però che sarà necessaria creare una "softwareSerial" usando l'apposita libreria.

Grazie ORSO2001 :smiley: comunque quel data sheet l’ho letto e riletto più volte. Il mio problema penso sia negli sketch per la comunicazione tra Trasmettitore e Ricevitore e se fosse così attualmente non saprei come risolvere questo problema.

ciao...purtroppo non ho queste schede da provare...e purtroppo non ho capito se quel treno di byte è l'unica cosa che trasmette o se si accoda ad un'eventuale trasmissione...ti conviene contattare il loro service...e facci sapere.

Ciao docsavage, io sto utilizzando le versioni a 12V.

Comunque attualmente il trasmettitore dovrebbe mandare dei segnali ogni 3 secondi poiché nello sketch vi è scritto delay 3000 su ogni canale e ciò che mi aspetterei di vedere sul monitor seriale del ricevitore sono risposte che dovrebbero arrivare appunto ogni 3 secondi (quando il led del trasmettitore si accende) ma ciò non accade.

Premettendo che ho ancora poca esperienza con Arduino, sto cercando da giorni ulteriori info per come farli comunicare ma con scarsi risultati.

Quello che mi chiedo io è se gli sketch di Tx e Rx siano sbagliati e quindi dovrei utilizzare altre diciture oppure se sia un problema fisico dei dispositivi.

Allora, sul monitor seriale del ricevitore vedo solamente:

output 1 HIGH
output 2 HIGH
output 3 HIGH
output 4 HIGH
output 5 HIGH
output 6 HIGH
output 7 HIGH
output 8 HIGH

appare dopo un secondo che apro il monitor seriale e rimane così, non ho nulla ogni 3 secondi eccetto questo.

...sei sicuro che nel lato trasmettitore i PIN cambiano di stato?

si i pin nel lato trasmettitore cambiano di stato; infatti il led si accende ogni 3 secondi proprio come gli è stato detto nello sketch.

Aspetta, forse non sono stato chiaro prima… non ho nessun filo collegato tra trasmettitore e ricevitore poiché voglio farli comunicare in radiofrequenza (sto utilizzando il Lora GAMMA-868 con le apposite antenne).

Il trasmettitore sembra che funzioni bene poiché compie ciò che gli ho imposto nello sketch.

ps. allego una foto dove potete vedere i due dispositivi :slight_smile:

spero di essere riuscito ad inserire la foto... se riesci a vederla, non utilizzo fili, sono i denti del LoRa che vanno sugli ingressi del Mega 2560; di conseguenza se ne stacco uno, dovrei staccarli tutti :slight_smile:

potresti sostare la scheda trasmettitore da arduino ad una breadboard...facendo ponte con dei cavetti.
in questo modo, non collegandone, uno o più ottieni il risultato.

detto questo se non sbaglio i moduli vanno "accoppiati" (pairing/paired)...è stato fatto?