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