Utilizzando contemporaneamente più sonde termiche DS18B20 in un datalogger ho la necessità di stabilire il DeviceAddress di ogni singola sonda.
L'identificativo è un array di 8 uint8_t che stampate sulla Serial tramite:
void printAddress(DeviceAddress deviceAddress)
{
for (uint8_t i = 0; i < 8; i++) {
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
}
}
Mi sfugge l'utilità, anche per scrivere su file è prevista la possibilità di conversione in esadecimale com sul serial monitor.
Magari usi una libreria che non lo contempla?
In ogni caso usi la classe String è questo su Arduino come più volte detto è il male assoluto (non l'unico).
Se hai necessità comunque della funzione inizierei con trasformarla evitando l'uso della classe String ma usando i vettori di caratteri (stringhe classiche del C)
Grazie Fab,
ma quando ho detto... Non so se è ortodossaménte corretto ma funziona. Se qualcuno volesse migliorarla ...
mi riferivo all'uso della classe String e alla possibilità che si potesse risolvere in altro modo più ortodosso.
A me serve per creare un array in script json da trasmettere tramite LORA e se mi dessi qualche dritta l'accetto volentieri.
Per scrivere la riga json uso una struttura dati preformattata con tutti gli identificativi, i valori e gli ammenicoli vari necessari, tanto la truttura è fissa e trasmette sempre la stessa, prima di trasmetterla con un ciclo for elimino i caratteri spazio e NULL.
Per quanto riguarda la classe String l'ho eliminata e adesso il sistema è diventato stabile
Per quanto riguarda la funzione che avevo postato l'ho modificata così:
Ci sono tante cose che possono impattar negativament su un progetto, per la parte software oltre alla classe String ci possono essere librerie scritte in modo tale che portano ai medesimi problemi (frammentazione ram e conseguenti blocchi) e non ultimo programmi scritti male, non ottimizzati o confusionari che alla fin anche chi li ha scitti non riesce più a capirci un tubo.
Per la parte hardware si va dal non isolare la parte logica dalla parte attuativa, alla semplice omissione delle necessarie resistenze sui pin.
Insomma un mondo vasto, con non unico volevo semplicemnet dire che se fosse solo quello il problema saremmo a cavallo, in linea generale ottimizzare le risorse deve essere un mantra di chi sviluppa su MCU.