Ciao, avrei bisogno di qualche dritta per risolvere un problema che sto riscontrando con la software serial.
Praticamente sembra che legga sempre il primo byte dello stream di dati che mi arriva, mentre so per certo che i byte in arrivo sono diversi (testato con successo con la seriale hardware)
ho provato sia così:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
void setup()Â
{
 Serial.begin(57600);
 mySerial.begin(57600);
}
void loop()
{
 mySerial.listen();
  Serial.println(mySerial.read());
}
che così:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
void setup()Â
{
 Serial.begin(57600);
 mySerial.begin(57600);
}
void loop()
{
 if (mySerial.available()){
  Serial.println(mySerial.read());
 }
}
Ma in uscita vedo sempre e soltanto 170, che è il valore del primo byte che dovrei ricevere.
Onestamente non ho trovato che siano necessari altri particolari modi di uso.
il ground è in comune, anche perchè ripeto, facendo tutto da seriale hardware funziona.
nessuna idea?
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
unsigned long Timer;
String Buffer;Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â // buffer Rx/Tx
void setup() {
 Serial.begin(57600);
 mySerial.begin(57600);
}
void loop() {
 Buffer = "";
 T = millis();
Â
 while (millis() - T < 10) {
  while (mySerial.available() > 0) {
   Buffer += char(mySerial.read());
  }
 }
 if (Buffer.length() > 0) {         // transmit to Serial Monitor   Â
  Serial.print(Buffer);
 }
}
grazie, sembra andare, lo devo prima adattare alle mie esigenze per averne una conferma.
ma quale sarebbe la logica sotto ?
cosa cambia tra farlo leggere dal main loop e farlo leggere da un while?
...
ma quale sarebbe la logica sotto ?
cosa cambia tra farlo leggere dal main loop e farlo leggere da un while?
Non dobbiamo dimenticare che SerialSoftware vorrebbe simulare un UART che è molto più veloce.
In realtà si ha a che fare con un'interrupt che può "perdere per strada" alcuni byte ricevuti, non essendoci alcun handshake tipo Xon-Xoff.
Quindi è necessario "concentrare" la cattura dei byte ricevuti mediante l'uso di un buffer.
La routine potrebbe essere anche scritta con degli if e usando un vettore char opportunamente dimensionato: è stata solo una mia scelta per poter più facilmente gestire i dati in arrivo (esempio: trim(), uppercase(), toInt(), ecc.).