Pages: [1]   Go Down
Author Topic: Serial.read() mi svuota il buffer()?  (Read 756 times)
0 Members and 1 Guest are viewing this topic.
Pavia
Offline Offline
Full Member
***
Karma: 0
Posts: 114
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
void inviaSegnale(){
  //Segnale d'Inizio trasmissioni
  arduino.write(5);
  arduino.write(ardAttuale++);
 
}

Questo è il codice su Processing. Ovviamente Arduino-Serial ecc è tutto settato correttamente. ardAttuale è una variabile che si incrementa a partire da 0.

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

Questo è il codice su Arduino.


Se eseguo entrambi, la console di processing mi stampa una serie infinita di 5..Mmm..Non dovrebbe stamparmi il 5 alternato al valore della variabile?

Questo è il draw di processing:

Code:
void draw() {
 
 
  inviaSegnale();
  delay(10);
  ascoltaArduino();
 

 
}

void ascoltaArduino(){
  if(arduino.available()>0)
  println(arduino.readBytes()[0]);
}
     
Logged

"Sono convinto che l'informatica abbia molto in comune con la fisica...Dentro i confini del computer, sei tu il creatore. Controlli – almeno

Pavia
Offline Offline
Full Member
***
Karma: 0
Posts: 114
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok ho fatto alcune prove. Se non ho capito male il buffer si svuota quando do un'istruzione Write. Ecco perchè non mi rilevava il secondo Byte. Mentre usando questo codice:

Processing

Code:
void draw() {
 
  /*
  if(arduino.available()>0)
  println(arduino.readBytes()[0]);
  */
  inviaSegnale();
  //delay(100);
  ascoltaArduino();
  //delay(100);
 
   
   
 
}

void ascoltaArduino(){
  if(arduino.available()>1)
  println(arduino.readBytes()[1]);
}

void inviaSegnale(){
  //Segnale d'Inizio trasmissioni
  arduino.write(5); 
  arduino.write(ardAttuale++);
 
}


Non guardate i commenti.

Arduino.

Code:
void loop(){ 
 

  while(Serial.available()>1)
    valori[i++] = Serial.read();

  Serial.write(valori[0]);
  delay(100);
  Serial.write(valori[1]);

  i = 0;


}

Quindi messso così dovrebbe sempre stamparmi la variabile e non il 5. Perchè se tolgo il delay da Arduino continua ad andare fuori sincronia?..Nel senso..mi stampa un po' il 5 e un po' la variabile..  smiley-confuse
Logged

"Sono convinto che l'informatica abbia molto in comune con la fisica...Dentro i confini del computer, sei tu il creatore. Controlli – almeno

Pavia
Offline Offline
Full Member
***
Karma: 0
Posts: 114
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho trovato la soluzione. Tolto tutti i delay. Torno alla versione precendente alla 1.0 dell'IDE e tutto funziona perfettamente senza perdere colpi..ho letto che nell'1 è stato implementato un nuovo meccanismo di scrittura (buffer...eccc)..e che quindi tra operazioni di input e output è necessario un delay di qualche millisecondo..

Buono a Sapersi. Qualcuno ha riscontrato la stessa cosa?. Vorra dire che svilupperò sullo 023 il mio progetto. Mi serve un tempo di risposta così veloce.
Logged

"Sono convinto che l'informatica abbia molto in comune con la fisica...Dentro i confini del computer, sei tu il creatore. Controlli – almeno

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 110
Posts: 6987
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nella 023 la comunicazione seriale è sincrona, nella 1.0 è asincrona ovvero avviene in "parallelo" con l'esecuzione del codice.
Logged

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

Pavia
Offline Offline
Full Member
***
Karma: 0
Posts: 114
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nella 023 la comunicazione seriale è sincrona, nella 1.0 è asincrona ovvero avviene in "parallelo" con l'esecuzione del codice.
Perfetto  smiley
Esiste un modo per renderla sincrona anche nel nuovo IDE?
Logged

"Sono convinto che l'informatica abbia molto in comune con la fisica...Dentro i confini del computer, sei tu il creatore. Controlli – almeno

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 110
Posts: 6987
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Forse potresti trasferire il codice riguardante la seriale dal vecchio core al nuovo core. Ma credo che non ne valga la pena.
Logged

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

Pavia
Offline Offline
Full Member
***
Karma: 0
Posts: 114
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Forse potresti trasferire il codice riguardante la seriale dal vecchio core al nuovo core. Ma credo che non ne valga la pena.

Ok allora uso direttamente 023 e basta  smiley. Ma quindi è vero o no che appena utilizzo un Serial.write(..) il buffer in ingresso si svuota?
Logged

"Sono convinto che l'informatica abbia molto in comune con la fisica...Dentro i confini del computer, sei tu il creatore. Controlli – almeno

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

metti una Serial.flush(), e automagicamente il tuo codice aspettera fichè la seriale non ha finito di scrivere.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pavia
Offline Offline
Full Member
***
Karma: 0
Posts: 114
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi sembrava strano che non ci avessero pensato  smiley-cool..eppure avevo provato già con il flush..ma probabilmente avevo sbagliato qualcosa..Ovviamente questa istruzione la devo mettere dopo ogni write vero?..

Appena ho finito di fare un po' di integrali ci provo!. Cavolo, domani ultima verifica e poi via a dividere il tempo tra Ragazza, Maturità e Arduino  smiley-razz
Logged

"Sono convinto che l'informatica abbia molto in comune con la fisica...Dentro i confini del computer, sei tu il creatore. Controlli – almeno

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ovvio, dopo ogni write oppure quando nei hai bisogno, magari ogni volta a fine loop
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 110
Posts: 6987
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi sembrava strano che non ci avessero pensato  smiley-cool..eppure avevo provato già con il flush..ma probabilmente avevo sbagliato qualcosa..Ovviamente questa istruzione la devo mettere dopo ogni write vero?..
Il flush della 023 e della 1.0 lavorano diversamente. Forse hai provato solo col l'IDE 1.0

Appena ho finito di fare un po' di integrali ci provo!. Cavolo, domani ultima verifica e poi via a dividere il tempo tra Ragazza, Maturità e Arduino  smiley-razz
Due cose le puoi tralasciare, almeno fino all'estate... e non è la maturità.  smiley-mr-green smiley-lol
Logged

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

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi sembrava strano che non ci avessero pensato  smiley-cool..eppure avevo provato già con il flush..ma probabilmente avevo sbagliato qualcosa..Ovviamente questa istruzione la devo mettere dopo ogni write vero?..
Il flush della 023 e della 1.0 lavorano diversamente. Forse hai provato solo col l'IDE 1.0
semmai il contrario smiley
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pavia
Offline Offline
Full Member
***
Karma: 0
Posts: 114
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi sembrava strano che non ci avessero pensato  smiley-cool..eppure avevo provato già con il flush..ma probabilmente avevo sbagliato qualcosa..Ovviamente questa istruzione la devo mettere dopo ogni write vero?..
Il flush della 023 e della 1.0 lavorano diversamente. Forse hai provato solo col l'IDE 1.0

Appena ho finito di fare un po' di integrali ci provo!. Cavolo, domani ultima verifica e poi via a dividere il tempo tra Ragazza, Maturità e Arduino  smiley-razz
Due cose le puoi tralasciare, almeno fino all'estate... e non è la maturità.  smiley-mr-green smiley-lol

Eh no..Arduino viene davanti alla commissione con me!  smiley Poi vi farò un resoconto promesso  smiley-razz e per la ragazza negativo alla stessa maniera  smiley-mr-green

Mi tengo tutto ben stretto  smiley Inizio le prove ora ora con la seriale!
Logged

"Sono convinto che l'informatica abbia molto in comune con la fisica...Dentro i confini del computer, sei tu il creatore. Controlli – almeno

Pages: [1]   Go Up
Jump to: