Ciao a tutti,
vorrei chiedere agli esperti programmatori di C se è possibile scrivere in un modo più elegante (e magari più efficiente) il codice che segue:
if (send) {
C++;
char vfoA[10];
dtostrf ((float)r1.getCurrentControl().value/1000000,3,6,vfoA);
sprintf(cmd, "C%d|slice t %d ",C,0);
String cmd2=String(cmd);
cmd2 += vfoA;
cmd2 += "\n";
fRig.send(cmd2);
send=0;
}
Il mio Arduino Due è connesso ad un dispositivo hardware attraverso la porta ethernet e può essere gestito attraverso una serie di comandi che sono strutturati nel seguente modo:
C12|slice t 0 14.035
-
il numero dopo la C è un contatore (int nel mio caso) che deve essere incrementato ogni volta che si invia un comando al dispositivo;
-
il numero dopo la t può essere un intero nel range [0,1,2,3]
-
l'ultimo numero invece è una frequenza espressa in MHz. In arduino, la classe fRig mantiene questo valore in una variabile di tipo int, pertanto ogni volta devo passare da int a float e poi convertire tutto in array di char.
Anche se il codice funziona correttamente, la domanda è se è possibile implementare la logica descritta in modo migliore.
Inoltre non mi è chiaro come devo gestire le clausole import nel codice:
- il progetto è implementato in maniera molto limitata nel file FlexConsole.ino, mentre tutta la logica per la gestione del dispositivo è nella classe FlexRig.cpp (e relativo headerfile).
Nessuna procedura del file .ino usa le classi della libreria Ethernet, eppure per poter compilare il programma, devo importare Ethernet.h ed SPI.h sia nel file .ino che nel file .cpp. E' corretto questo modo di operare o sto sbagliando qualcosa?
Grazie per qualsiasi aiuto mi potrete dare
Enzo