Controllare un Digital Pin mediante due Arduino

Salve a tutti,
sono Matteo.

Vorrei far comunicare due Arduino Uno (A1 e A2) mediante pin digitali tramite un breadboard.
In sostanza, quando A1 vuole inviare un comando ad A2 fa un set HIGH sul pin 10. A2 che, mediante collegamento alla breadboard, è in ascolto sul pin 10, riceve il segnale, esegue il comando e deve comunicare ad A1 che la procedura è andata a buon fine. La mia idea era di quella di fare in modo che il pin 10 tornasse LOW di nuovo.

Come posso fare? ci sono delle strategie più raffinate?

Grazie.

Matteo.

Benvenuto! :slight_smile:

Per cortesia, come da regolamento, per prima cosa presentati nell'apposita discussione spiegando bene quali esperienze hai in elettronica e programmazione, affinché possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Poi leggi attentamente tutto il regolamento, in particolare leggi bene i punti 15.3 e 17.1, e impegnati a rispettarlo.

Ti ricordo che, purtroppo, fino a quando non avrai fatto la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto.

Quindi serve anche un segnale di ritorno, in qualsiasi modo si voglia realizzare la comunicazione. Sapere se ci sono di mezzo distanze importanti o temporizzazioni stringenti sarebbe di aiuto per valutare le possibili soluzioni. Restando ai due fili e alla procedura descritta è come se ogni arduino dovesse "premere un pulsante" all'altro. Banalmente A1 alza, A2 legge esegue e alza, A1 legge (la conferma a ritroso) e abbassa, A2 abbassa a sua volta, e solo a questo punto A1 può, se serve, rialzare di nuovo.

Se cerchi trovi

In particolare se cerchi:

La pappa è fatta
Aiutateci ad aiutarvi
Era stagione di pin remoti

Innanzitutto grazie per la risposta.

Di base l'Arduino A1 ha il compito di generare richieste verso A2 per ogni singola variabile (temperatura, pressione, CO2 ad esempio...) ad intervalli temporali diversi nell'ordine dei minimo 10 - 20 minuti. Il fine è semplice: permettere all'utente finale di definire un intervallo entro il quale fare le misure.

Il problema sono i tempi.
Cioè, per semplificare, si potrebbe definire un timeout dopo il quale A1 spegne il pin (quindi A1 non si interessa di quando A2 gestirà la richiesta). Però, nel loop() di A2, in generale, non è detto che il valore del pin venga letto una sola volta (quindi verrebbero letti per nulla i sensori).
Allo stesso modo, nella tua soluzione, come fa A2 a sapere quando spegnere il pin con cui conferma ad A1 di aver preso in carica la rischiesta?

Grazie.

Matteo.

Rispondo al mio post per dare un po' più di contesto.

L'idea che voglio realizzare è quella di una stazione meteo "off-grid" alimentata da un pannello solare per il monitoraggio del mio orto, collegata ad Internet mediante una connesione GSM.

Per semplicare la scrittura del codice, gli aggiornamenti, l'interazione con il DB sul server, ho pensato di suddividere l'hardware in vari moduli:
-Trasmettiore: riceve dati dal basso. Aggiunge informazioni aggiuntive (ora, coordinate GPS), realizza l'URL HTTP ed esegue la query. È un modulo di alto livello.
-Ricevitore: riceve dati, aggiornamenti e richieste dall'utente finale mediante GSM. Tra le richieste ci sono quelle di misure "istant", cioè quelle relative all'istante attuale. In questo caso, tramite una breadboard, il segnale è passato al misuratore (soggetto della mia domanda). Possono arrivare, anche, richieste di modifica degli intervalli di tempo dopo i quali richiedere delle misure. Qui, il messaggio è girato al richieditore mediante porta seriale. È di alto livello.
-Richieditore: per ogni variabile genera un segnale di richiesta di lettura su una breadboard diversa da quella usata dal ricevitore (ad intervalli temporali ricevuti mediante ricevitore). È collegata mediante serial al ricevitore, per esempio per modificare il valore degli intervalli. È di medio livello.
-Misuratore: riceve, mediante le precedenti due breadboard, i segnali e legge i sensori. La risposta viene inviata su serial al trasmettitore (insieme alle specifiche della richiesta: richiesta instant o per DB ad esmepio). Basso livello.
-Controllore: da definire meglio. Dovrebbe controllare la temperatura all'interno dell'involucro plastico e, quindi, attivare le ventole.

Per il Back-end ho pensato ad un DB in MySQL a cui il trasmettitore accede tramite uno script PHP.

L'utente finale, invece, utilizzerà una app Java.

Ripeto, sono nuovo a peogetti di questa grandezza, quindi, suggerimenti più esperti saranno sicuramente ben accetti.

Beh...

Nel momento in cui la esegue, la richiesta...

Saprà che ha ricevuto il comando, non credi?

Grazie.

Se vuoi maggiori dettagli sul progetto, li trovi nelle due risposte qui sotto.

Matteo.

Inutilmente complicato

Una mega collegata a un gps (perché? Temi che il tuo orto si sposti nottetempo?) e un gsm e hai tutto quello che ti serve

Se fai come dici scrivi più righe di codice per gestire la comunicazione tre le varie macchine che per fare il lavoro "duro e puro"

No grazie...
Hai già dettagliato anche troppo...
Semplificare ti serve, non dettagliare

Perdonami. Avevo inteso male. Ora, è più chiaro. È un po' macchinoso, ma semplice e realizzabile.

Ti sembra?

Capisco. Sicuramente, è inutile inviare inviare le coordinate GPS ogni volta (forse mibsono espresso male).
Ma, quindi, con una scheda GSM si riuscirebbe a gestire messaggi HTTP in entrata, mentre si sta trasmettendo?

Non lo so, non ho mai provato

Certo, ma basta eseguire quello che si vuole solo quando si rileva la transizione 0 -> 1, non sempre ogni volta che si legge 1.

nella tua soluzione, come fa A2 a sapere quando spegnere il pin con cui conferma ad A1 di aver preso in carica la rischiesta?

È un processo a quattro fasi come descritto alla fine.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.