Pages: [1]   Go Down
Author Topic: Chiarimenti SoftwareSerial  (Read 652 times)
0 Members and 1 Guest are viewing this topic.
Senago - Milano
Offline Offline
God Member
*****
Karma: 3
Posts: 508
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Volevo avere dei chiarimenti sulla SoftwareSerial per Arduino 1.0 (ex NewSoftwareSerial)

I miei dubbi sono:
- Se uso software serial con un arduino da 3.3v (arduino pro mini 3.3v) dovrebbe funzionare? io ho avuto esiti negativi, potrebbe essere l'alimentazione o forse qualche altro motivo?

- Si riesce o no ad avere più seriali virtuali contemporaneamente? da alcune parti leggo di si da altre no. c'è un limite al baudrate?
qui sembra spiegare come usare istanze multiple, qualcuno ci ha già provato ? http://arduiniana.org/libraries/newsoftserial/

- Non esiste un modo per fare un libreria che possa accettare come parametro sia una hardwareSerial che una softwareSerial?
non essendoci una classe madre condivisa temo di no, però pensavo che si potrebbero creare due funzioni tipo:

Code:
myLib::myLib(HardwareSerial &_hSerial) {
hSerial = &_hSerial;
}

myLib::myLib(SoftwareSerial &_sSerial) {
sSerial = &_sSerial;
}

poi nel codice testo l'esistenza della seriale, altrimenti uso l'altra

Code:
     if (hSerial != null ){
          latestByte = hSerial->read();
     }else{
          latestByte = sSerial->read();
     }

Così dovrebbe funzionare? avete idee migliori ?
Logged

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

La SoftwareSerial dell'Arduino 1.0 è una evoluzione della NewSoftSerial per cui permette di avere più istanze contemporaneamente solo che ne puoi aprire in ricezione solo una per volta, selezionata con il metodo .listen().
Puoi aprire una seriale HW ed una seriale SW nello stesso sketch.

Perché la SoftwareSerial non dovrebbe funzionare su un dispositivo a 3,3V? Stai forse cercando di comunicare tra sistemi con differenti tensioni di funzionamento, es. 5V e 3,3V? Se è così, ti serve un sistema per traslare i livelli.

Sull'ultima domanda penso si possa fare ma dovresti creare una libreria che, a seconda di ciò che richiami, crei un'istanza della SoftwareSerial o della NewSoftSerial. Ma sinceramente non ne vedo assolutamente l'utilità.
Logged


Senago - Milano
Offline Offline
God Member
*****
Karma: 3
Posts: 508
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La SoftwareSerial dell'Arduino 1.0 è una evoluzione della NewSoftSerial per cui permette di avere più istanze contemporaneamente solo che ne puoi aprire in ricezione solo una per volta, selezionata con il metodo .listen().
Puoi aprire una seriale HW ed una seriale SW nello stesso sketch.
Farò dei test per l'utilizzo che mi interessa, volevo aprire due softwareserial per poter mantenere quella hardware libera per la programmazione di arduino


Perché la SoftwareSerial non dovrebbe funzionare su un dispositivo a 3,3V? Stai forse cercando di comunicare tra sistemi con differenti tensioni di funzionamento, es. 5V e 3,3V? Se è così, ti serve un sistema per traslare i livelli.
La cosa strana è che tutto il circuito è fatto sui 3,3v, però quando ho usato la softwareSerial al posto di quella standard non riuscivo più a leggere nessun dato

Sull'ultima domanda penso si possa fare ma dovresti creare una libreria che, a seconda di ciò che richiami, crei un'istanza della SoftwareSerial o della NewSoftSerial. Ma sinceramente non ne vedo assolutamente l'utilità.
Per praticità. Così in base alle necessità uno è libero di istanziare una porta hardware o software..
Logged

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

lollotek, come leggi la seriale? con un chip FTDI o simili? sicuro che sia 3.3v compatibile per i segnali logici?
Logged

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

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

Per praticità. Così in base alle necessità uno è libero di istanziare una porta hardware o software..
Ma è ridondante. La seriale HW viene chiamata in automatico, per la SoftwareSerial basta un #include. Che vantaggio si ha nel richiamare una libreria che a sua volta richiama un'altra libreria? Si appesantisce il codice e basta.
Questo per lo meno è il mio punto di vista, che sono tendenzialmente uno che tende a snellire il codice piuttosto che ad appesantirlo  smiley-wink
« Last Edit: August 12, 2012, 05:36:28 pm by leo72 » Logged


Senago - Milano
Offline Offline
God Member
*****
Karma: 3
Posts: 508
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ok, faccio l'esempio pratico, volevo fare un discorso generico perché la logica si può applicare a più librerie..

Sto facendo un progetto su mindflex ed utilizzo questa libreria:
https://github.com/kitschpatrol/Arduino-Brain-Library
La libreria si istanzia passandole come parametro un oggetto hardwareSerial.

Code:
Brain brain(Serial);

Il problema è che se poi per necessità devi riprogrammare Arduino ed hai già saldato la seriale al mindflex non funziona, perchè va in out of sync.
Perciò ho pensato di usare la softwareSerial, ho quindi modificato la libreria in modo da usare questa classe invece che quella hardware ( e solo dopo ho scoperto che esisteva già un brench con questa modifica - https://github.com/kitschpatrol/Arduino-Brain-Library/tree/softserial)

Ma la comodità sarebbe avere entrambe le funzionalità in un'inica libreria, in modo che possa essere a discrezione dell'utente l'utilizzo della seriale hardware o software (infatti è anche stato messo nei TODO dell'autore della libreria).

Nel mio caso specifico ho la necessità di gestire 2 comunicazioni seriali, ma quando ho provato il codice con la softwareSerial non aveva funzionato, da li il dubbio di possibili incompatibilità con arduino a 3,3v

Avrei voluto fare poi un discorso a parte per il mindflex per condividere la mia esperienza che ho avuto con questo progettino..
Logged

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

se al posto di Serial usi Stream, in teoria dovrebbe supportare non solo le seriali ma anche l'i2c e forse pure la SPI, ma non sono sicuro che per le ultime 2 la modifica sia così semplice.
funziona solo dall'arduino 1.0 in poi.
Logged

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

Senago - Milano
Offline Offline
God Member
*****
Karma: 3
Posts: 508
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

se al posto di Serial usi Stream, in teoria dovrebbe supportare non solo le seriali ma anche l'i2c e forse pure la SPI, ma non sono sicuro che per le ultime 2 la modifica sia così semplice.
funziona solo dall'arduino 1.0 in poi.

Ah bene, ci darò un occhio allora, grazie mille.
Onestamente di i2c e SPI non ne so molto...
Logged

Pages: [1]   Go Up
Jump to: