Pages: [1] 2 3 4   Go Down
Author Topic: Comunicazione seriale tra Arduini  (Read 4606 times)
0 Members and 1 Guest are viewing this topic.
Bologna
Offline Offline
God Member
*****
Karma: 5
Posts: 502
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?

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

Code:
void setup(){
  Serial.begin(9600);
  }
void loop(){
    Serial.print('9');
}

 smiley-sad-blue smiley-red
« Last Edit: July 26, 2012, 03:17:14 am by SUBSEA » Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 104
Posts: 6609
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Edison Member
*
Karma: 24
Posts: 2032
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
« Last Edit: July 19, 2012, 09:53:49 am by Madwriter » Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 104
Posts: 6609
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Bologna
Offline Offline
God Member
*****
Karma: 5
Posts: 502
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Così dovrebbe andare bene?
Code:
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.
« Last Edit: July 19, 2012, 10:40:05 am by SUBSEA » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 43
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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"
« Last Edit: July 19, 2012, 02:55:15 pm by brexino » Logged

Bologna
Offline Offline
God Member
*****
Karma: 5
Posts: 502
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Cioè? Come dovrei fare?  smiley-fat
Logged

0
Online Online
Edison Member
*
Karma: 20
Posts: 2228
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 43
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cioè? Come dovrei fare?  smiley-fat

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

Code:
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);
  }
  }
}
« Last Edit: July 19, 2012, 03:03:22 pm by brexino » Logged

Bologna
Offline Offline
God Member
*****
Karma: 5
Posts: 502
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Purtroppo mi da un errore durante la compilazione... Dice che non è possibile fare la conversione da "pointer" e "integer".  smiley-sad-blue
Logged

Offline Offline
Jr. Member
**
Karma: 2
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Bologna
Offline Offline
God Member
*****
Karma: 5
Posts: 502
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
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  smiley-sad-blue
Logged

Offline Offline
Edison Member
*
Karma: 24
Posts: 2032
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prova cosi
Arduino RX
Code:
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:
Code:
void setup(){
  Serial.begin(9600);
  }
void loop(){
    Serial.print('9');
Serial.print(9);
  Serial.write(45);
}

Giusto per test   smiley-mr-green
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Bologna
Offline Offline
God Member
*****
Karma: 5
Posts: 502
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Purtroppo niente neanche così... Cosa può essere? smiley-eek-blue
Logged

Offline Offline
Edison Member
*
Karma: 24
Posts: 2032
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Purtroppo niente neanche così... Cosa può essere? smiley-eek-blue
Allora dobbiamo usare un pò di logica debbugghiana  smiley-mr-green
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?
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Pages: [1] 2 3 4   Go Up
Jump to: