Come collegare più schizzi.
Per unire più progetti in uno, devi affrontare tutti i possibili conflitti:
I progetti sono costruiti sulla stessa scheda/piattaforma?
- Si - bene.
- No - è necessario assicurarsi che la scheda "comune" possa funzionare con moduli
presente nei progetti combinati e che abbia anche le periferiche necessarie.
Ci sono moduli collegati alle interfacce di comunicazione nei progetti?
- No - bene.
- Sì, I2C - se tutti i moduli sono collegati tramite I2C a una scheda comune, assicurati che gli indirizzi del dispositivo non corrispondano (molto raro).
- Sì, SPI - il bus SPI ha tutti i pin "comuni", tranne CS (Chip Select), questo pin può essere qualsiasi pin digitale.
- Sì, UART - il problema è che può collegare un solo dispositivo alla UART (ci sono eccezioni per esempio Arduino Mega). Puoi collegare un dispositivo su UART e il secondo su SoftwareSerial. O perdere tempo con multiplexer.
Ci sono pin utilizzati in entrambi i progetti?
- No - bene.
- Sì - scopri quale funzione svolge il pin in ciascuno dei progetti e scegli un sostituto, sia nel modulo che nel programma:
- Se si tratta di un normale input/output digitale, è possibile sostituirlo con qualsiasi altro.
- Se si tratta di una misurazione del segnale analogico, sostituirla con un altro pin analogico.
- Se si tratta di una generazione PWM, collegarsi di conseguenza a un altro pin PWM e correggere il programma.
- Se si tratta di un'interruzione - fai attenzione.
Vengono utilizzate le stesse periferiche del microcontrollore?
Per fare ciò, è necessario studiare i moduli e le loro librerie:
- No - bene.
- Sì - la situazione richiede una buona esperienza con Arduino...
- Viene utilizzato lo stesso timer: non è possibile utilizzare contemporaneamente PWM sui pin del primo timer e controllare i servi utilizzando la libreria Servo.h.
- Viene utilizzata la generazione del suono utilizzando il tone(): PWM non può essere utilizzato sui pin del secondo timer.
- Vengono utilizzati gli interrupt del timer e la generazione di PWM sul timer corrispondente è una situazione difficile.
- E così via, le situazioni possono essere infinite...
È possibile apportare tutte le modifiche agli schemi e ai programmi dei progetti uniti in modo che non siano in conflitto. Successivamente, procediamo alla creazione del programma generale:
- Includiamo tutte le librerie. Alcune librerie potrebbero entrare in conflitto, come Servo e Timer1 come discusso sopra.
- Confrontiamo i nomi delle variabili globali e definiamo nei programmi uniti: non dovrebbero corrispondere. Le coincidenze vengono modificate sostituendo il codice con altri. Quindi, copia e incolla tutte le variabili globali e le definizioni in un programma comune.
- Combinare il contenuto del blocco setup().
- Abbiamo solo loop(), e questo è il compito più difficile.
Avevamo due (o più) progetti separati in esecuzione. Ora il nostro compito di programmatore è pensare e programmare il lavoro di questi diversi progetti in uno, e le situazioni sono già infinite:
- Il codice principale (che è in loop()) da diversi progetti deve essere eseguito a turno su un timer.
- Un insieme di azioni di diversi progetti dovrebbe essere cambiato con un pulsante o qualcos'altro.
- Un sensore di un altro progetto viene aggiunto a un progetto: i dati devono essere elaborati e programmati per il loro ulteriore movimento (visualizzazione, invio, ecc.).
- Tutti i "progetti" devono essere eseguiti contemporaneamente sullo stesso Arduino.
Nella maggior parte dei casi, non puoi semplicemente prendere e combinare i contenuti di loop() da diversi programmi.