Problemi con ricezione seriale tra due arduino

Salve a tutti,
sono nuovo del forum e questo è il mio primo post. Ho cominciato a interessarmi da appena due mesi ad Arduino e a rispolverare qualche sopita conoscenza elettronica del passato. Vi ringrazio in anticipo, perchè siete eccezionali, e con voi sto imparando molto. :slight_smile:
Nelle mie varie sperimentazioni "solitarie" sono riuscito a smanettare con Arduino Uno, vari sensori fino a costruire un DataLogger, che funziona con la modalità sleep (modalità standalone) e scheda SD card per misurare l'umidità nel terreno in giardino.

Oggi vorrei "perfezionare l'opera" con un arduino master da tenere in casa, dotato di display, scheda rete, sdcard modulo radio e un arduino slave, da tenere in giardino con sensori e modulo radio.

Ero riuscito ad assemblare e far funzionare tutto compresi i moduli Xbee Pro con un codice ancora rozzo sicuramente da migliorare, ma da ieri sera ho uno strano problema improvviso. Non riesco più a far comunicare i due arduino sui pin 0 e 1 della seriale. Prima pensavo fossero i modulo Xbee, ma poi andando a collegare fisicamente le due schede mi sono reso conto che i due non comunicano più! :~
Vedo lampeggiare i led, sia in trasmissione sullo slave che in ricezione sul master, ma quando collego i pin il led del tx non lampeggia più! Di visualizzare la stringa sul display o sulla pagina html non ne vogliono più sapere. Se collego il cavo Usb anzichè l'alimentazione a batterie posso vedere dal monitor seriale che la print funziona bene sullo slave. Sul master invece collegando la USB dal monitor seriale riesco solo a far scrivere sul display quello che inserisco io manualmente dalla stessa finestra. :frowning:
Vi chiedo un aiuto, perchè vorrei continuare ad utilizzare la seriale con gli xbee in modalità trasparente, ho visto che ci sono anche altri metodi, ma non vorrei complicare ulteriormente le cose, visto che per ora per me è già abbastanza difficile così.

Quache info:

  • Uso due Arduino Uno rev.3
  • Windows 7
  • Ide 1.0.5 rev2
  • Xbee Pro Serie 1
  • Simple board
  • Display 16x2
  • Alimentazione a batterie (4x1.25V)

I codici di riferimento per ora sono il SerialDisplay dei File di esempio per il master e il seguente per lo slave:

void setup()
{
  Serial.begin(9600);              // Apre la comunicazione seriale e attende l'apertura della porta:

  pinMode(2, OUTPUT);        // Apri porta lettura sensore 1 del terreno
  pinMode(10, OUTPUT);      // Porta Led

}

void loop()
{
  digitalWrite(10, LOW);       // Reset soglia Spegnimento LED

  String dataString = "";
  
  digitalWrite(2, HIGH);               // Dai tensione sulla porta digitale del sensore Hum1
  delay(500);                                 // Attendo che la resistenza nel terreno umido si stabilizzi per un secondo
  int Hum1 = analogRead(A0);  // Eseguo la lettura sulla porta analogica dell'umidità del terreno
  if (String(Hum1).length() == 1) { dataString += "000"; }
  if (String(Hum1).length() == 2) { dataString += "00"; }
  if (String(Hum1).length() == 3) { dataString += "0"; }
  dataString += String(Hum1); // Aggiungo il valore alla stringa
  digitalWrite(2, LOW);              // Tolgo tensione dalla porta digitale del sensore Hum1
  if (Hum1<300) 
  {
  digitalWrite(10, HIGH);       // Superata la soglia Accensione LED
  dataString +=" Sup. soglia";
  }
  
  Serial.println(dataString);         // Visualizza su nuova linea la stringa sul monitor seriale
  delay(6000);
}

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Grazie infinite Igor,
per i link generali da te segnalati. Ho inserito una mia presentazione nella giusta sezione. Spero di non aver fatto altri torti al regolamento, anche se poi in realtà nel msg c'era già qualche info su di me.

Dopo varie prove, penso di aver risolto. Il poter comunicare tra due arduino tramite i moduli Xbee mi aveva fatto pensare di poter collegare le due schede con i soli due pin tx e rx. Questo è vero solo comunicando via radio. Se si vuole comunicare direttamente con il cavo, e quindi senza i moduli radio, è necessario mettere in comune tra le due schede anche un cavo di terra. Appena ho fatto questa prova ha subito funzionato tutto.

Non so spiegarmi il motivo di questo collegamento. Ho trovato questa soluzione in una guida in inglese ma non ho capito il motivo. Quindi se qualcuno sa darmi una spiegazione è ancora meglio. :wink: