Ma sei sicuro che realizzare quello che hai descritto tu sua più facile, per un neofita, che realizzare quello che ho descritto io?
No, sono sicuro che lo scoglio più grande sono struct, class, puntatori incluso l'uso degli operatori & e *, superato questo scoglio la cosa fila liscia (quasi sempre).
Comunque si può semplificare.
Preso codice da EEprom.h
// funzione di nome put che invia tramite seriale ogni tipo di dato passato come argomento
template< typename T > void put(const T &t ){
const uint8_t *ptr = (const uint8_t*) &t;
for (uint8_t idx = 0; idx < sizeof(T); idx++ )
Serial.print *(ptr++); // forse qui sarebbe più indicato Serial.write(*(ptr++))
}
Si usa semplicemente nel loop o nel setup così:
put(myCollection);
Al posto di myCollection si può passare qualunque argomento di diverso tipo.
Ovviamente prima di questa chiamata sarà necessario assegnare dei valori
a temp e AuxFinal.
Un codice arduino per inviare via seriale potrebbe essere il seguente (Attenzione Non Testato)
struct MyStruct {
float temp;
float AuxFinal;
};
// funzione di nome put che invia tramite seriale ogni tipo di dato passato come argomento
template< typename T > void put(const T &t ){
const uint8_t *ptr = (const uint8_t*) &t;
for (uint8_t idx = 0; idx < sizeof(T); idx++ )
Serial.print( *(ptr++) ); // forse qui sarebbe più indicato Serial.write( *(ptr++) )
}
void setup() {
// put your setup code here, to run once:
Serial.begin(57600);
}
void loop() {
struct MyStruct myCollection;
myCollection.temp = 50.05;
myCollection.AuxFinal = 50.05;
put(myCollection);
delay(1000);
}
Se non ho dimenticato nulla dovrebbe quantomeno compilare.
Comunque propongo ...
Ottima proposta, lascio all'utente axel39 il compito di verificare che entrambe i modi sono equivalenti,
poi sceglierà lui, io personalmente preferisco la soluzione di standardoil tuttavia finisco per usare
i puntatori nel modo classico.
In merito al nome della funzione di nome put l'ho copiata quasi uguale a quella presente nel
header file EEPROM.h, il nome andrebbe cambiato in qualcosa di più significativo, ad esempio
serialSendStruct o serialSendData o serializeData o altro a piacere.
Ora manca l'altra funzione che riceve i dati da seriale e li inserisce in myCollectionDest.
La posto dopo, prima vediamo se funziona.
Ciao.