problema con SoftwareSerial e NewSoftSerial

Provate la NewSoftSerial con la ultima modifica, così mi fate sapere se va.

purtroppo, sono molto impegnato con la scuola in quuesti giorni :frowning: ma proverò il prima possibile :wink:

non ho ancora provato la newsoftware serial con le ultime modifiche sui tiny :frowning:
però oggi stavo provando la newsoftware serial con 2 arduino mega...
ho caricato questo codice su entrambi:

#include <NewSoftSerial.h>
NewSoftSerial er(62, 63);

void setup()  
{
  Serial.begin(9600);
  er.begin(9600);
}

void loop()
{
 if (er.available())
 Serial.print((char)er.read());

 if (Serial.available()){
 er.print((char)Serial.read());}
}

e ho collegato gli rx e tx creati da software tra loro. quindi aprendo contemporaneamente i 2 serial monitor dovrei inviare un dato da uno e riceverlo sull'altro, ma questo non succede... analizzando con qualche led mi pare che il problema sia in ricezione perchè c'è una variazione del segnale ma non viene percepita dall'arduino ricevitore

qualcuno sa perchè succede ciò? ho dimenticato qualcosa? (arrivo da un periodo di inattività :sweat_smile: )
grazie a tutti in anticipo :wink:

confermo che il problema è in ricezione... è strano perchè c'è un esempio molto simile anche sul reference :~

sono riuscito a capire che non è colpa della libreria, o almeno con un arduino 2009 funziona...
forse è perchè nel pin 62 del mega non è abilitato a ricevere :~ ma nel reference c'è scritto che può essere usato, qualcuno mi da una mano a capire meglio la situazione?
grazie :slight_smile:

alla fine ce l'ho fatta da solo XD adesso va, ho scaricato la versione newsoftserial12 e ho inserito la funzione listen... ma sinceramente non so quale di questi passaggi sia quello che ha determinato il funzionamento :sweat_smile:, qualcuno sa spiegarmelo? grazie :slight_smile:

#include <NewSoftSerial.h>
NewSoftSerial er(62,63);

void setup()  
{
 Serial.begin(9600);
 er.begin(9600);
}

void loop()
{
 er.listen();
 if(er.available())
 Serial.print((char)er.read());

 if (Serial.available()){
 er.print((char)Serial.read());}
}

stai usando l'ide arduino 1.0, che modifica un bel pò le librerie.

in particolare nel tuo caso aggiunge l'istruzione: listen(); che attiva l'ascolto della classe NewSoftSerial. Questo perchè solo una NewSoftSerial alla volta può funzionare (questione di tempi di risposta credo), e quindi per poter avere più seriali virtuali hanno adottato questo trucco per attivare la NewSoftSerial corrispondente.

altre info: http://arduino.cc/en/Reference/SoftwareSerialListen

ps. USA IL REFENCE, ti risparmi un sacco di sbattimenti inutili

no, sto usando la 0022 e i refence li ho già letti quasi tutti... tuttavia non ho capito gran che... :blush:
io dovrei utilizzare 3 seriali sw e 3 seriali hw, ma non riesco a far andare 3 seriali sw contemporaneamente... una sola si ma 3 no... :~

ma siccome 4 di queste seriali vengono utilizzate 1 alla volta potrei collegarle tutte assieme su un rx hw e farle andare una alla volta con degli enable, no? si tratta di un arduino che deve ricevere, solo ricevere, dei dati da 4 ATtiny, quindi potrei impostare i tiny che quando non devono inviare dati il pin tx diventa rx.... non so se mi sono spiegato bene :sweat_smile: secondo voi è fattibile?? o è un'idea che funzionaa solo nella mia testa

Come ti ha detto Lesto, non puoi mettere in ascolto più di una seriale software contemporaneamente.

Ma se i dati devono arrivare tutti ad un Arduino, perché non usi il bus I2C?
Per i Tiny esiste una libreria TinyWire che implementa la I2C via software. Ad ogni Tiny assegni un ID differente e poi fai spedire tutto all'Arduino. Alla ricezione dei dati, sai già chi ha spedito grazie all'I2C.

eheh lo so, ma a me non piace usare la I2C perchè non sono ancora riuscito a capire come funziona :sweat_smile:
se provo a fare quello che ho detto prima, secondo voi può funzionare?

cioè io posso trasformare un pin da rx a tx durante il programma no? se metto un tx collegato a più rx, tutti gli rx ricevono il segnale no? se succede ciò posso fare quello che ho in mente o sbaglio qualcosa?

ma l'arduino mega ha più di una seriale hardware, e qulle funzionano in parallelo

si ma le sto già usando per altri devices :expressionless:

allora benvenuto nel mondo dell'I2C :grin:

ufffff ma non mi piace... =(
mi dite se secondo voi può funzionare l'idea che ho descritto prima?? :roll_eyes:

no, gli input si sovrappongono

in che senso si sovrappongono? cosa succede fisicamente? i tiny in ricezione non funzionano, con questa condizione può essere che funzioni?

I Tiny in ricezione con la NewSoftSerial si possono usare. C'è una modifica alla libreria che ho segnalato recentemente che la rende compatibile anche con questi micro.

Cmq continuo a nutrire dei dubbi su ciò che vuoi fare. Io continuo a dire che con l'I2C risolvi con meno sbattimenti e con 2 soli pin.

si lo so, devo ancora provarla l'ultima modifica :blush: comunque al momento non mi serve che ricevano...
dopo do un'occhiata all'I2C, mi state convincendo... :zipper_mouth_face: ma prima volevo capire come si può fare con la seriale :stuck_out_tongue:

scuasate ditemi solo una cosa e poi prometto che provo la I2C :slight_smile: è possibile, una volta inizializzata una seriale sw, modificarne i parametri tipo i pin, la velocità, o elliminarla?
grazie a tutti :wink: