volevo provare ad usare la libreria SoftwareSerial e stavo leggendo dal reference:
ho copiato l'esempio:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);
void setup()
{
Serial.begin(57600);
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(4800);
mySerial.println("Hello, world?");
}
void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
e ho provato a compilarlo ma mi da degli errori :~
try_SoftwareSerial.cpp: In function 'void loop()':
try_SoftwareSerial:16: error: 'class SoftwareSerial' has no member named 'available'
try_SoftwareSerial:19: error: 'class SoftwareSerial' has no member named 'write'
Inizia a mettere la parentesi {{ }} al punto giusto....
void loop() // run over and over
{
if (mySerial.available()>0) {
Serial.write(mySerial.read());}
if (Serial.available()>0) {
mySerial.write(Serial.read());}
}
...anche se probabilmente l'errore non è tutto qua!
si va beh ho detto che stovo provando a compilare l'esempio che c'è nel reference, comunque non penso proprio sia questo l'errore, anzi per una sola operazione le parentesi non sono necessarie e si possono omettere... non lo compila comunque :~
ho la versione 0022... è da un paio di giorni che mi chiede di aggiornarla ma non l'ho ancora fatto...
approproposito mi consigliate di aggiornarlo? non è che dopo ho problemi?
Siccome sono curioso, ho copiato il tuo codice. E neanche a me compila, dando gli stessi errori.
Per curiosità ho dato un'occhiata alla libreria e dentro NON ci sono quei metodi....
Ci sono solo i metodi begin, print, println e read.... Non capisco....
la softSerial è una versione molto tarpiata della seriale, il semplice fatto che se non stai facendo una read quindo hai un input perdi i dati in arrivo...
quindi è un problema della libreria? certo che mettere un esempio che non va non è proprio bello...
comunque read e print ci sono, quindi se non mi servono write e available dovrei essere apposto?
approposito la funzione available a cosa serve precisamente? è indispensabile per fare il read? o posso fare a meno?
grazie
quando arrivano dei dati e tu stai facendo altro, vengono messi in un buffer, e per sapere quanti dati sono in attesa di essere letti nel buffer, usi available. Come dicevo prima, la SoftSerial NON ha un buffer e i dati vengono persi nel nulla... quindi non serve (e quindi non esiste) la available().
Secondo me tu hai trovato un esempio della NewSoftSerial, che essendo più avanzata questi controlli ce li ha... oppure FORSE nella versione 1.0 dell'ide la newSoftSerial è andata a sostituire l'orami obsoleta SoftSerial..... chissà
perchè Leo mi aveva consigliato di usarla sui Tiny, ma prima volevo provarla sul 2009, visto che non l'avevo mai usata prima...
comunque il problema dell'available vedro di inventarmi qualcosa per risolverlo
Lo stesso spezzone copiato da ER (medici in prima linea) è lo stesso presente nella pagina come esempio:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);
void setup()
{
Serial.begin(57600);
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(4800);
mySerial.println("Hello, world?");
}
void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
niente write, listen, available, isListening, overflow... per un semplice motivo: no interrupt = no listen e islistening = no buffer = no overflow, available...
e infatti, sempre leggendo quella pagina di reference:
The version of SoftwareSerial included in 1.0 and later is based on the NewSoftSerial library by Mikal Hart.
quindi qulli sono i metodi della NewSoftwareSerial, che nell'IDE1.0 ha soppiantato la vecchia SoftwareSerial, rubandogli pure il nome (e secondo me creerà un sacco di casini ciò)
ok quindi abbiamo scoperto il motivo per cui SoftwareSerial non va come pensavo che andasse
ora sto provando la NewSoftSerial sembra che vada ma ho un problema del quale non capisco il motivo, ho collegato il 2009 con la NewSoftSerial alla Serial1 del mega2560... quindi ho caricato questi due sketch:
questo per il 2009:
void setup()
{
Serial.begin(115200);
Serial1.begin(115200);
}
void loop()
{
while (Serial1.available())
Serial.print((char)Serial1.read());
while (Serial.available())
Serial1.print((char)Serial.read());
}
e quindi ho aperto 2 serial monitor e invio su uno e ricevo sull'altro...
quando invio dal 2009 al mega non ho problemi e leggo quello che ho inviato, mentre quando invio dal mega al 2009 leggo delle cose strane sul serial monitor abbinato al 2009...
è un problema del NewSoftSerial o ho sbagliato io qualcosa? :~
grazie ancora per l'aiuto