Comunicazione seriale tra Arduini

Un saluto a tutti. è da un po' di tempo che mi scervello con questo problema: io ho caricato questi due sketch su due diversi arduino uno, sperando che si accendesse il led collegato sul pin appena collegavo l'rx di uno al tx dell'altro, ma così non è stato... Qualcheduno può trovarmi l'intoppo?

void setup(){
  Serial.begin(9600);
  pinMode(13,OUTPUT);
}
void loop(){
  if(Serial.read()=='1'){
    digitalWrite(13, HIGH);
  }
}
void setup(){
  Serial.begin(9600);
  }
void loop(){
    Serial.print('9');
}

:disappointed_relieved: :blush:

Spedisci 9 e verifichi 1.
Non credo si accenderà mai.

PaoloP:
Spedisci 9 e verifichi 1.
Non credo si accenderà mai.

poi ti consiglio di inziare solo con un serial "read" generico cosi vedi se almeno riesci a trasmettere :wink:

Tra le altre cose... ti conviene utilizzare il comando Serial. available() prima di Seria.read().

Così dovrebbe andare bene?

void setup(){
  Serial.begin(9600);
  pinMode(13,OUTPUT);
}
void loop(){
  if (Serial.available()>0){
  if(Serial.read()=true){
    digitalWrite(13, HIGH);
  }
  }
}

P.S. scusate prima ho postato il codice sbagliato, comunnque sono sicuro di inviare e ricevere 9.

Attenzione, if(Serial.read()=true){ cosi, non verifichi, ma assegni

void setup(){
  Serial.begin(9600);
  pinMode(13,OUTPUT);
}
void loop(){
  if (Serial.available()>0){
  if(Serial.read()==true){
    digitalWrite(13, HIGH);
  }
  }
}

In più, cosi il 13 si accenderà sempre, o quasi, perchè gli stai dicendo "SE RIESCI A LEGGERE, ACCENDI IL LED", non "SE LEGGI 9, ACCENDI IL LED"

Cioè? Come dovrei fare? :drooling_face:

Ciao,
se posso darti un consiglio:
utilizza una connessione SoftwareSerial.
In questo modo puoi utilizzare il Serial monitor per inviare comandi all'altro Arduino e soprattutto per fare debug, facendoti stampare a video quello che arriva.

C'è un esempio che dovresti poter utilizzare direttamente (l'unica modifica che ti consiglio è di settare le velocità delel porte seriali sw e hw ugualmente):
Example -> SoftwareSerial -> SoftwareSerialExample

SUBSEA:
Cioè? Come dovrei fare? :drooling_face:

Te l'ho detto, devi verificare che dalla lettura, ottieni il 9, crei una variabile char e gli assegni il valore letto, poi verifichi se nella variabile c'è il 9, e di conseguenza accendi o spegni il led

void setup(){
  Serial.begin(9600);
  pinMode(13,OUTPUT);
}
void loop(){
  char C;
  if (Serial.available()>0){
  C = Serial.read();
  if(C == "9")
  {
    digitalWrite(13, HIGH);
  }
  else
  {
    digitalWrite(13,LOW);
  }
  }
}

Purtroppo mi da un errore durante la compilazione... Dice che non è possibile fare la conversione da "pointer" e "integer". :disappointed_relieved:

se sostituisci ' ' agli " " sul if la compilazione va a buon fine

E' vero, la compilazione non mi dà problemi, e rispetta le funzioni anche quando gliele invio da serial monitor; quando però gliele invio tramite il pin tx dell'altro arduino sull' rx del ricevente non dà segni di vita. Ho provato anche con uno sketch più semplice:

void setup(){
  Serial.begin(9600);
  pinMode(13,OUTPUT);
}
void loop(){
  if (Serial.available()>0){ 
      digitalWrite(13, HIGH);
      }
}

ed è la stessa storia: serial monitor sì, altro arduino no :disappointed_relieved:

Prova cosi
Arduino RX

int incomingByte = 0;   // for incoming serial data

void setup() {
        Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
}

void loop() {

        // send data only when you receive data:
        if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();

                // say what you got:
                Serial.print("I received: ");
                Serial.println(incomingByte, DEC);
        }
}

Arduino TX:

void setup(){
  Serial.begin(9600);
  }
void loop(){
    Serial.print('9');
Serial.print(9);
  Serial.write(45);
}

Giusto per test :grin:

Purtroppo niente neanche così... Cosa può essere? :fearful:

SUBSEA:
Purtroppo niente neanche così... Cosa può essere? :fearful:

Allora dobbiamo usare un pò di logica debbugghiana :grin:
Colega sia il tx che l'rx al serial monitor dell'ide e vedi se comunicano bene, a questo punto potrebbe esserci qualcosa nel collegamento che cavi usi?
colleghi RX con TX e TX con RX?

Ragazzi,
se collegate 2 Arduino usando la seriale (pin 0 e 1), il serial monitor non vedrà mai nulla, perchè ogni Serial.print viene dirottato verso l'altra Arduino.

SUBSEA, riparti dal mio post precedente, almeno hai modo di verificare la comunicazione tra le due Arduino.

pitusso:
Ragazzi,
se collegate 2 Arduino usando la seriale (pin 0 e 1), il serial monitor non vedrà mai nulla, perchè ogni Serial.print viene dirottato verso l'altra Arduino.

infatti gli avevo detto di collegare prima l'arduino TX al pc e vedere se va e poi l'RX sapendo che gli sketch funzionano correttamente credo che ci sia qualcosa nei collegamenti che non va.

EVVIVA!!! CI SONO RIUSCITO!!! In poche parole ho scollegato l'arduino ricevente e attaccato tramite alimentatore e tutto funziona perfettamente! Ho pensato a quello che aveva scritto pitusso

Ragazzi,
se collegate 2 Arduino usando la seriale (pin 0 e 1), il serial monitor non vedrà mai nulla, perchè ogni Serial.print viene dirottato verso l'altra Arduino.

ed ho pensato che poteva essere vero il contrario, ovvero che se sono collegati sarà il serial monitor a prendersi le informazioni e a creare il problema. Quindi ho alimentato esternamente entrambe le schede e la connessione si è verificata. Vi ringrazio molto! XD :grin: :wink: :slight_smile:

In pratica questo mi serviva per far connettere via infrarosso le due schede. sisi, so che c'è la libreria di shriff, ma mi andava di fare le cose diversamente. :sweat_smile: Tramite filo la cosa funziona, e anche usando il telecomando del tv. Però, appena ho provato a mettere il mio led IR attaccato a arduino si è cotto. Come è possibile alimentare il led, che penso sia da 3V con arduino che ne dà 5?

Ciao

In pratica questo mi serviva per far connettere via infrarosso le due schede. sisi, so che c'è la libreria di shriff, ma mi andava di fare le cose diversamente.

credo di non capire: hai attaccato in IR alla porta seriale?