sto realizzando un progetto che potete vedere qui.
In pratica ho 4 DS18B20 e devo prendere 4 temperature diverse, però vorrei che ogni temperatura mi andasse in una variabile ben precisa.
Con il programma preso da questa libreria a riadattato alle mie esigenze
ho le 4 temperature ma se scambio le posizioni fisiche delle sonde, le temperature vanno in altre variabili.
Allora stavo pensando di segnare le sonde:
Es: alla sonda address 28071D5B05000072 metto dello scotch rosso per riconoscerla, ma come faccio a dire che la variabile t_mash deve contenere la temperatura richiesta da questa sonda con questo preciso indirizzo.
non so se sono riuscito a spiegarmi, sono una capra...
Hai individuato il problema dei sensori OneWire DS18B20: la necessità di conoscere a priori il loro codice per individuare fisicamente il dispositivo, nel caso di più sensori sullo stesso bus.
Conoscere il codice non è difficile, basta far partire il programma con un solo sensore alla volta.
Una volta individuato il codice di ciascun dispositivo, sai qual'è il n° 0, 1, 2 ed il 3, in quanto il riconoscimento automatico numera i vari sensori in ordine di codice: avrai notato infatti che il device 0 è quello con codice più piccolo rispetto agli altri.
cyberhs:
avrai notato infatti che il device 0 è quello con codice più piccolo rispetto agli altri.
come trovare gli indirizzi delle singole sonde lo dovrei saper fare, ma non so come implementare nel programma il fatto di associare un indirizzo ad una variabile.
Come faresti tu, a livello sw a fare una cosa del genere? mi basterebbe anche solo una sonda...
io avevo pensato di fare
@Calamaro
Ho capito cosa ti serve ed più o meno quello che accade con i dispositivi USB sul PC.
DeviceAddress non è altro che un array di 8 byte, per cui quando crei:
DeviceAddress tm, ts, ti, Tmot;
Impegni 8 byte x 4 = 32 byte di ram
allora dovrebbe funzionare scrivere:
DeviceAddress deviceAddressList[4];
Comunque seguendo quanto dice cyberhs il codice dovrebbe poi funzionare con sensori che hanno device address diverso dai tuoi a patto che il il sensore con device address minore tra i 4 viene usato per tm (che sarebbe quello a indice 0), indice 1 per ts, e così via.
PS: non conosco il sensore in questione, ho sempre usato ntc.
Hai postato prima di me.
C'è anche la funzione float getTempCByIndex(uint8_t);
che puoi usare al posto di: float tempC = sensors.getTempC(deviceAddress);
Ciao,
ho avuto anche io il tuo stesso problema e l'ho risolto utilizzando un piccolo sketch che permette di individuare l'indirizzo interno delle sonde in modo univoco, te lo metto in allegato, l'unica cosa che devi fare è aggiornae il pin che utilizzi come bus One wire.
In più ti allego un'altro paio di file dove ho usato metodi diversi di acquisizione delle temperature, una la lettura classica ed una con lettura asincrona che sto usando da diverse settimane nel mio progetto con successo e che permette di avere letture molto più veloci a patto che rispetti i tempi di conversione delle sonde (altrimenti ti rimanda la lettura precedente), è utile perché queste sonde sono notoriamente lente, ma con la lettura asincrona, puoi sfruttare il tempo di conversione per far fare allo sketch quello che ti pare...
Ultima cosa, la lettura asincrona non funziona con i sensori collegati in parasite, visto che tu non li hai sparpagliati per casa, non dovresti avere problemi.