Buongiorno!
Ho una domanda che non è specifica, ma è piuttosto un dubbio sulla "strategia" da adottare in fase di programmazione. Quindi è del tutto teorica.
Situazione:
- Arduino UNO (per esempio)
- scheda relè per comandare carichi come luce, cancello, ecc.
- sensori in ingresso: temperature, luminosità, ecc.
- link seriale ad un pc per comunicazioni (sia input che ouput)
Tralasciando la parte hardware, mi chiedevo come organizzare il codice in modo pulito, ordinato e riutilizzabile.
Esempio: voglio che l'oggetto "carico" (che può essere fisicamente una lampadina) sia appunto un oggetto in senso informatico, una classe.
Allora dovrei creare una libreria che contenga la definizione dell'oggetto:
- pin output
- pin stato del carico (ritorno dell'informazione tramite altro pin digitale)
- tipologia: potrebbe essere temporizzato, o tipo pulsante (->passo passo), interruttore (relè monostabile?)
- ecc.
Meglio ancora, la classe "carico da comandare" potrebbe avere un oggetto "comando" che in qualche modo rappresenta la tipologia appena elencata: se gli dico che è di tipo "0" (=temporizzato) saprò che all'attivazione avrà un delay; se è di tipo "1" (=passo-passo) saprò che avrà un HIGH->delay->LOW, ecc.
Metto 2 righe in croce con sintassi generica, per provare:
Classe CARICO:
proprietà (int) PIN OUTPUT
proprietà (int) PIN INPUT
proprietà (int) STATO (digitalRead su pin input)
proprietà (COMANDO) comando(int tipo)
Costruttore con definizione dei pin I/O e tipo comando
Classe COMANDO:
proprietà (int) TIPO
metodo ACCENDI (con varie routine a seconda del tipo di comando assegnato)
metodo SPEGNI
.....
Dovrei quindi avere un oggetto di questo tipo:
Carico luceCucina(2,8,0);
...e quindi:
luceCucina.comando.accendi
oppure portare i metodi accendi/spegni più comodamente all'interno della classe "Carico".
Questo approccio potrebbe essere naturale su un pc programmando ad oggetti, mentre per quanto riguarda un micro non so se sia la strada giusta. Ad un vecchio corso su un S300 ricordo che il docente (smanettone e geniale) avvertiva che su certe "macchine" l'approccio potrebbe non essere premiante.
Rimangono quindi questi dubbi:
- trattandosi di classi, la memoria dell'arduino ne risente molto?
- la comunicazione con pc dovrebbe trovare un punto di incontro con questi oggetti: come faccio da pc ad inviare una stringa di comando che poi il mio sketch riconosca e colleghi ad uno degli oggetti? Un'ipotesi, un po' macchinosa per la verità, sarebbe quella di utilizzare degli identificativi unici (ID), indipendenti dai pin. Gli oggetti "carico da comandare" potrebbero costituire un array dove la posizione è proprio l'ID, ma tenere sincronizzati questi valori mi sembra suscettibile di errori
Grazie a chi vorrà suggerire consigli o anche solo....demolire l'approccio!