nessuno che sa dirmi dove è sbagliato il mio sketch ?
grazie
massi
nessuno che sa dirmi dove è sbagliato il mio sketch ?
grazie
massi
massibal:
ma il problema che non funziona , perchè mi vede solo il RFID , mentre il BT si connette al telefono ma non riceve i dati!!!;(((
Ma quando dici "non mi vede i dati", cosa intendi esattamente? Parliamo dell'ultimo sketch che hai postato ossia tu in pratica nel loop() prima accumuli tutti i caratteri ricevuti dentro una variabile String:
poi se non ci sono altri caratteri (e te credo, sei appena uscito dal while...) vedi se la stringa contiene qualcosa:
e quindi se la stringa contiene ESATTAMENTE la stringa "1" la processi:
Allora, prima cosa: perché diamine accumuli i caratteri in una variabile String se poi i comandi sono di UN solo carattere?
Secondo, se riceve più di un carattere, nessuna if() sarà mai soddisfatta (ad esempio se i caratteri arrivano dalla tastiera magari premi anche Enter e quindi ci sono 3 caratteri: il comando, poi i caratteri CR e LF!)
Terzo, come fai a dire che non ricevi nulla? Hai provato a mettere un Serial.print() quando li leggi con read()? Esempio:
Cosa ottieni così? (scusa ma queste sono le basi del debugging su Arduino, DEVI saperlo fare!!!).
Ma in fin dei conti se vedi che effettivamente ricevi più caratteri, io farei una cosa più semplice nel loop():
portBT.listen();
}
if (portBT.available())
{
char c = portBT.read();
Serial.print(c);
if (c == '1') {
digitalWrite(rele, LOW);
Serial.println("Accesso Bluetooth attivato");
...
eccetera
...
E per finire, perché non sperimenti un poco con Tinkercad circuits dove puoi fare debugging "vero" (breakpoint, visualizzazione valore delle variabili...) seppure su ambiente non fisico?
ciao doc,
per prima cosa ti ringrazio per avere considerato il mio post...
voglio solo precisare che il mio sketch funziona perfettamente ( anche se riconosco che è più corretto il tuo suggerimento) se uso solo la parte del BLUETOOTH o solo la parte dell'RFID ...
.... il mio problema è che non funzionano le due parti quando le metto insieme e quindi devo utilizzare il softwareserial con le due seriali... portOne e portTwo....
devo capire come mai , se sbaglio io oppure se non è possibile utilizzare 2 moduli (RFID ee BLUETOOTH)
con arduino nano....
grazie mille
bye
massi
Ma tu hai tenuto conto che quando una porta è attiva, l'altra è COMPLETAMENTE sorda (fisicamente come ne NON ci fosse e NON c'è alcuna "bufferizzazione" di eventuali caratteri in arrivo)? Nel senso che NON puoi saltellare da una all'altra, perché sicuramente perdi qualche cosa ...
... se ne attiva UNA, si riceve quello che si deve ricevere e si finisce, si attiva l'ALTRA si riceve quello che si deve ricevere e si finisce, e così via.
Guglielmo
In teoria non vedo alcun impedimento ad usare due periferiche seriali, se non per eventuali problemi di alimentazione (non credo) o di cablaggio (neanche) o della SoftwareSerial che simula due seriali (ricorda che in ascolto ce n'è UNA per volta, l'altra se riceve qualche carattere questo si perde!!).
Ma, ripeto nuovamente: metti delle Serial.print() sui dati ricevuti, e dicci. Cosa ricevi? Nulla? Qualcosa? Strane schifezze? Pomodori?
Oppure usa la seriale standard per uno e la SoftwareSerial per l'altro (ma non potrai usare il Serial.print per debug...), se così funziona significa che è l'uso della SoftwareSerial.
EDIT: anche Guglielmo l'ha scritto, anticipandomi... ![]()
Grazie Guglielmo e grazie doc ....
il mio problema è proprio legato al fatto che non ho capito bene come si passa da una all'altra ...
""
... se ne attiva UNA, si riceve quello che si deve ricevere e si finisce, si attiva l'ALTRA si riceve quello che si deve ricevere e si finisce, e così via.""
... ho caricato lo sketch... il RFID funziona perfettamente .. nel senso che passo la scheda/bottone e si eccita il relè.. poi se provo con BT ..il cellulare si collega con il modulo BT ma quando invio il carattere non arriva nulla su arduino...
si deve inserire qualche comando che stoppa il listen della prima per permettere il listen della seconda..
devo inserire dei delay ???
grazie
Non ci sono altri comandi, c'è solo la listen() che ATTIVA la porta.
Il tuo problema è che se stai girando nel loop() ed è attiva la porta del RFID e tu, in quel momento, invii un carattere da BT, quel carattere è perso.
Purtroppo NON si può usare così saltellando perché il rischio di perdere caratteri (dato che NON puoi sapere quale è attiva), è alto.
Se devi monitorare contemporaneamente le due porte seriali, l'unica è utilizzare una scheda con DUE vere seriali.
Guglielmo
grazie della triste notizia...
quindi dovrei usare un MEGA ??
ma non posso mettere dei delay in modo che anche se nel loop ogni tot secondi si ferma una port e si attiva l'altra ??? non so se mi sono spiegato
grazie
massibal:
ma non posso mettere dei delay in modo che anche se nel loop ogni tot secondi si ferma una port e si attiva l'altra ??? non so se mi sono spiegato
... certo e poi ... come fai a sapere quando è attiva una e quando è attiva l'altra ? ? ? ![]()
Attivi la prima, fai delay() ... e l'altra è "sorda" per un periodo ancora più lungo ...
... la SoftwareSerial e la listen() le puoi usare quando: attivi porta 1, invii un comando, ricevi una risposta, hai finito; attivi porta 2, invii un comando, ricevi la risposta, hai finito; e così via.
Guglielmo
ok
quindi come dici tu :
attivi porta 1 , invii un comando ( cioè invio carattere via BT ), ricevi una risposta ( CIOE' ????)
, hai finito;
attivi porta 2 , invii un comando ( passo tessera RFID ), ricevi la risposta ( CIOE' ????)
, hai finito; e così via.
grazie
Cioè un bel nulla, tu NON hai dei devices che utilizzano un protocollo di "polling", ovvero che inviano dati quando interrogati, tu hai devices che li inviano quando gli pare e quindi NON puoi usare la SoftwareSerial con le due porte saltellando da una all'altra.
Il mio era un esempio di dove la si può usare, NON era il tuo caso.
Guglielmo
perfetto
grazie mille, mi avete risparmiato altre ore rubate al sonno!!!
dovrò usare il MEGA oppure solo RFID !!
buona serata
massibal:
dovrò usare il MEGA oppure solo RFID !!
Se hai problemi di spazio ... guarda QUESTA ... è veramente piccola 38 x 38 mm ed hai tutti i pin della MEGA
![]()
Se compri il KIT da 5 pz (cosa che io ho fatto e sono eccezionali) costano ancora meno ![]()
Guglielmo
grande Guglielmo !!!!!
la compro subito... perchè la Mega normale non mi sta nello scasso del muro vicino alla porta!!!! ![]()
GRAZIE mille per il consiglio!
massibal
buongiorno,
solo un dubbio ..se voglio usare ARDUINO MEGA ,posso utilizzare il mio sketch sostituendo soltanto le serialport con rx1 tx1 e rx2 tx2 del MEGA ... o devo modificare anche il programma!!
grazie
massi
Ovviamnete, se usi la MEGA, non ti serve la SoftwareSerial, quindi sostituirai li nome che gli hai dato con SerialN (N= 1,2,3) a seconda delle porte che usi. Il programma rimane lo stesso.
Guglielmo
ottimo!
grazie mille!
una curiosità ma la board che mi hai indicato " Naked Mega, a Bare Minimum Arduino Mega 2560 compatible board" esiste sul mercato italiano ??
grazie
massibal
massibal:
una curiosità ma la board che mi hai indicato " Naked Mega, a Bare Minimum Arduino Mega 2560 compatible board" esiste sul mercato italiano ??
Non credo proprio; io ho ordinato il kit da 5 pz. direttamente da loro ... almeno ho ammortizzato le spese di spedizione su più pezzi ![]()
Guglielmo
si certo!
grazie mille
Se ne prendi 5 e non sai che fartene, uno te lo riacquisto io :).