problema complesso di inizializzazione del circuito

Buonasera ragazzi, ho un problema abbastanza complicato da spiegare ma farò del mio meglio.
Sto realizzando un congegno che capisca quando qualcuno suona al campanello di casa, lo trasmetta via wireless tramite un arduino nano con modulo NRF24L01 ad un altro arduino nano con il medesimo modulo.
Ho progettato il sistema in modo che il ricevitore una volta ricevuto un “1” dal trasmettitore attivi un “lampeggiante” LED preconfezionato.
Il trasmettitore è settato in modo da mandare ogni secondo un messaggio contenente 0 se nessuno ha suonato e 1 se è stato premuto il campanello.
Il ricevitore è in grado di accorgersi se non c’è alcun segnale dal trasmettitore e accende un led di segnalazione quando questo accade.
Ho realizzato (dal momento che sono in fase di prototipazione con breadboard) un trasmettitore che appena acceso manda ogni secondo un messaggio 1 al ricevitore.
Il problema è questo:
Se accendo prima il RICEVITORE e POI il TRASMETTITORE, il ricevitore segnala sempre un’assenza di segnale, anche se il segnale viene emesso dal trasmettitore.
Se io accendo prima il TRASMETTITORE e POI il RICEVITORE, tutto funziona benissimo, e anche se poi spengo e riaccendo il trasmettitore, il ricevitore continua a fare il suo dovere alla perfezione, segnalando assenze di segnale e 1 del trasmettitore.
Allo stato attuale non ho attaccato condensatori in parallelo all’alimentazione dei moduli Wireless.
Vi allego schematici e codice. Grazie mille a tutti per l’aiuto.

Receiver.txt (3.13 KB)

Dentro l'if che determina che non ci sono dati in arrivo dalla radio, dentro al while che attende almeno un dato fai

if(tempoAttuale3 >= assenzaSegnale){

che se sono trascorsi meno di 3 secondi dall'avvio non ci entrerà mai e visto che tempoAttuale3 lo inizializzi fuori dal while se non entri la prima volta non entrerai mai più viceversa se sono trascorsi più di tre secondi dall'avvio quando viene inizializzata entrerai immediatamente e ci entrerai sempre, credo sia un errore, se guardi gli altri if con millis che hai nel programma vedrai che sono leggermente differenti. Ma non è questo probabilemente che genera l'errore.
Visto che sei ancora in fase prototipo metti un po di messaggi di debug sulla seriale per capire il flusso del programma quando il trasmettitore è spento in modo da comprendere meglio in che punti passa il programma e dove fallisce perché così a colpo d'occhio semprerebbe corretto il flusso.
Comunque semplificherei spostando tutto l'if dei dati mancanti nell'else dell'if dei dati presenti è un pochino più pulito e leggibile e poi if == false a me non piace proprio :slight_smile:

Grazie per la segnalazione però quella dichiarazione è stata volutamente posta fuori perché volevo fare in modo che aspettasse 3 secondi prima di dire “ok non ho segnale, accendo il led”. Mettendola dentro ad ogni ciclo avrebbe assegnato un nuovo valore alla variabile e avrebbe aspettato sempre 3 secondi.

Si ma stai controllando il valore assoluto di millis() non che siano trascorsi 3 secondi da quando sei entrato nel ciclo di attesa, quindi non fa quel che desideri ma come ti ho speigato in precedenza se arrivi a inizializzare la variabile dopo che sono trascorsi tre secondi dall'accensione allora entri nell'if e lampeggi e buzzerizzi altrimenti non entri mai nell'if

Giusto dovevo scrivere nell’if interno una cosa come:

If(millis()-tempoAttuale3>=assenzaSegnale).....
Così dovrebbe andare

Provo a correggere e vedo se qualcosa si smuove
Grazie mille per l’appunto!

Direi di si, metti anche i messaggi di debug così con il serial monitor si riesce a capire meglio cosa fa il programma