Dovresti allegare almeno uno degli sketch per capire se si può con poche modifiche e suggerimenti permetterti di raggiungere il tuo obbiettivo. Quasi certamente c'è il modo di usare una sola scheda, poi con la MEGA ovviamente si hanno più pin a disposizione. Per evitare i delay solitamente si usa una macchina a stati finiti (per semplicità basata sul "comando" switch (stato) { case n }. Purtroppo le macchine a stati non sono così intuitive, per cui ti dovrai impegnare un poco. Puoi leggere qualcosa qui, ma anche cercando nel forum o su google "macchina a stati finiti".
Andiamo alle domande, sono due, ma ne vedo di più.
Si possono sincronizzare tre arduino UNO? Si si può
Tuttavia ci deve essere un motivo tecnicamente valido che giustifichi l'impiego di tre arduino anziché uno solo.
Una centralina effetti giorno notte non richiede più di uno arduino, se arduino UNO non basta si può passare alla MEGA, oppure impiegare dei circuiti chiamati expander per aumentare il numero di pin. La stessa espansione si può fare anche con la MEGA, qualora fosse necessario.
MA C'E' un modo di fare partire i 3 arduini insieme, inteso come tempo di partenza dei tre LOOP?
C'è più di un modo, ma come dici tu, è complesso, sia che scegli I2C, seriale SPI o seriale USART ti dovrai scontrare con la complessità, se proprio è necessario la si affronta e in qualche modo si risolve. Per il momento la vedo come una complicazione.
Non mi è chiaro se il tempo di avvio di Arduino e quindi del loop, dipende da quanto è lungo il SETUP / settings preliminari e/o lunghezza programma???
Il dubbio ti è venuto però, per toglierti il dubbio puoi provare a stampare il valore restituito da millis(), il quale rappresenta il tempo espresso in millesimi di secondo da quando arduino è stato alimentato (o "resettato").
Vedrai che più cose metti nel setup (ma in genere anche nel loop) maggiore sara il valore restituito da millis().
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
// commenta o decomenta le Serial.println
// Serial.println("xxxxxxxxxxxxxxxx"); // comando commentato
// Serial.println("xxxxxxxxxxxxxxxx"); // "
Serial.println("xxxxxxxxxxxxxxxx");
Serial.println("xxxxxxxxxxxxxxxx");
Serial.println(millis());
}
void loop() {
// put your main code here, to run repeatedly:
}
Con un ARDUINO MEGA, riuscirei a gestire tutti le uscite (11 rele + 2 strisce WS2812 + 5 MOSFET)
Potresti anche con la UNO, usando un expander, ma ovviamente con la MEGA avrai maggiori possibilità di espansione future. Ora suppongo che la MEGA tu non l'hai, ma hai tre uno e penso che bastino e avanzino.
Come potrei, in questo, caso mischiare i vari tempi di interveno? cioè accendere i rele MENTRE sta facendo il fading via Mosfet PWM o MENTRE sta inviando dati alla striscia digitale???
Io userei una macchina a stati finiti e le temporizzazione li gestisci con millis().
Ok, la sparo grossa, 3 arduino li hai per cui vediamo gli sketch e anziché sincronizzare i loop, facciamo che arduino A è il MASTER connesso agli altri due che sono gli SLAVE. Gli SLAVE non possono impegnare (chiamare il master) il bus dati (qualunque esso sia), gli SLAVE possono rispondere al MASTER se da questo sono interrogati. In sostanza chi dirige è il master. I2C è il canale fisico da scartare per i motivi che hai brevemente elencato (la lunghezza). SPI potrebbe anche farcela, ma la scarto, USART (la Serial.print in sostanza) c'è la fa ed è anche possibile creare una rete multimaster e c'è anche una libreria che potrebbe aiutare, tuttavia la distanza è un nemico di questi mezzi di comunicazione si potrebbe scoprire che non è abbastanza robusto e in tal caso c'è anche una alternativa (anche più), ad esempio cerca RS485 arduino, troverai dei transceiver che ti permetto di collegare in rete più device con sicurezza anche oltre i cento metri di distanza.
Tutte queste considerazione senza avere visto un pezzo di codice non ci permettono di fare una valutazione completa, l'obbiettivo dovrebbe essere quello di ottenere il risultato desiderato con il minor esborso possibile e con l'impegno commisurato alle tue competenze attuali, o poco più. Quindi capirai che mi sono sbilanciato molto nel risponderti.
Ciao.