Chiarimenti SoftwareSerial

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 ? NewSoftSerial | Arduiniana

  • 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:

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

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

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

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

Così dovrebbe funzionare? avete idee migliori ?

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

leo72:
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

leo72:
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

leo72:
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..

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

lollotek:
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 :wink:

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:

La libreria si istanzia passandole come parametro un oggetto hardwareSerial.

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 - GitHub - kitschpatrol/Brain at 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..

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.

lesto:
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...