/**
* Il programma permette di inviare via seriale
* byte dopo byte il contenuto di un oggetto di
* tipo DataBlock.
* Si può fare di più, ad esempio si può inviare qualunque oggetto di qualunque tipo via seriale
* byte dopo byte.
*/
/**
* Per ricevere i dati da un microcontroller o computer
* e sufficiente creare lo stesso sketch ma al posto di:
* Serial.write(*ptrTo);
* ci mettiamo:
* if (Serial.available() > 0) {
* *ptrTo = Serial.read();
* }
* L'obbiettivo è di leggere i dati e salvarli nell'oggetto dataBlock
* PS: non testata la lettura
*/
/*
tipo di struttura per collezionare dati
per poi spedirli via seriale byte per byte
*/
typedef struct
{
float arg0;
float arg1;
float arg2;
byte arg3;
byte arg4;
byte arg5;
uint32_t arg6;
} DataBlock;
// global variable
bool alredySend; // false per inviare i dati
DataBlock dataBlock; // oggetto dataBlock da spedire
void setup()
{
alredySend = false;
delay(2000);
Serial.begin(115200);
// carica dati a caso nell'oggetto dataBlock
dataBlock.arg0 = 152.24;
dataBlock.arg1 = 489.569;
dataBlock.arg2 = 100.029;
dataBlock.arg3 = 49; // un byte 1
dataBlock.arg4 = 50; // un byte 2
dataBlock.arg5 = 51; // un byte 3
dataBlock.arg6 = 456898; // 32 bit
}
void loop()
{
if (alredySend == false) {
uint8_t *ptrTo = (uint8_t *)&dataBlock;
for (uint8_t i = 0; i < sizeof(dataBlock); i++) {
Serial.write(*ptrTo); // spedisce il dato puntato da ptrTo
ptrTo++; // punto al prossimo byte
}
alredySend = true; // i dati sono stati spediti
}
}
Anziché convertire da float ad intero e spedire i dati come stringhe, si spedisce
byte per byte il contenuto di una porzione di memoria RAM in cui ci abbiamo messo
la nostra collezione di dati come appunto è dataBlock.
Spero possa tornarti utile, ciao.