Pages: [1] 2 3 ... 8   Go Down
Author Topic: problema con SoftwareSerial e NewSoftSerial  (Read 5023 times)
0 Members and 1 Guest are viewing this topic.
Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

volevo provare ad usare la libreria SoftwareSerial e stavo leggendo dal reference:
http://arduino.cc/en/Reference/SoftwareSerial
ho copiato l'esempio:

Code:
#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  smiley-confuse

Code:
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'

cosa significa? cosa ho sbagliato?
grazie smiley-wink
« Last Edit: December 09, 2011, 04:33:50 pm by er_like_no_other » Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

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

Inizia a mettere la parentesi {{ }} al punto giusto....

Code:
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!
Logged

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

che versione di arduino IDE?
Logged

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

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-confuse
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?
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

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

i problemi li hai se aggiorni, la versione 1.0 dell'ide è nuova e apporta grossi cambiamenti, per cui alcune librerie vanno sistemate

un consiglio: usa la NewSoftSerial, per una serie di motivi.
Logged

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

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ok quindi mi tengo la versione vecchia?
per la SoftwareSerial non si può usare? devo usare per forza la NewSoftwareSerial?
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22640
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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....  smiley-neutral
Ci sono solo i metodi begin, print, println e read.... Non capisco....

IDE 0022 su Linux
Logged


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

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...
Logged

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

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

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

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à
Logged

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

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

io stavo leggendo questo:
http://arduino.cc/en/Reference/SoftwareSerial
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 smiley-wink
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22640
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma non va bene che ci siano solo i metodi read, begin e print/ln!
Voglio dire che
http://arduino.cc/en/Reference/SoftwareSerial
elenca i seguenti metodi:
SoftwareSerial()
available()
begin()
isListening()
overflow()
read()
print()
println()
listen()
write()

Dove sono andati a finire???  smiley-neutral

Lo stesso spezzone copiato da ER (medici in prima linea) è lo stesso presente nella pagina come esempio:

Code:
#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());
}
Logged


Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

appunto è questa la cosa strana  smiley-confuse
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

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

mi spiace ma sicuramente softwareserial non ha available(), o se c'è è fasullo per i motivi elencati sopra.

chiunque abbai scritto quella classe l'ha copiata paro paro dagli esempi di NewSoftSerial, semplicemente cancellando New!

infatti osservando SoftwareSerial.h:

Code:
SoftwareSerial(uint8_t, uint8_t);
    void begin(long);
    int read();
    void print(char);
    void print(const char[]);
    void print(uint8_t);
    void print(int);
    void print(unsigned int);
    void print(long);
    void print(unsigned long);
    void print(long, int);
    void println(void);
    void println(char);
    void println(const char[]);
    void println(uint8_t);
    void println(int);
    void println(long);
    void println(unsigned long);
    void println(long, int);

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:
Quote
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ò)

Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22640
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Che brutta cosa...  smiley-roll
Logged


Pages: [1] 2 3 ... 8   Go Up
Jump to: