Datalogger 2 sensori temperatura (DS18B20)

Salve a tutti,

premetto che non conosco bene Arduino…
…per cui questo datalogger lo sto creando copiando e adattando quello che ho trovato sul web.

il mio prolema sono le righe 114 e 116 dove non riesco ad inserire le variabili
“cucina” e “bagno” ma ho dovuto utilizzare “temp1” (copiato dalla
riga 95).
Così facendo però non riesco a capire quale sensore sto leggendo.

Qualcuno può indicarmi comeprocedere?

Grazie

prova_datalogger_2_DS18B20.ino (3.1 KB)

Ti prego di presentarti prima se no Guglielmo il moderatore si incacchia!!
Comunque ‘cucina’ e ‘bagno’ non sono variabili, sono gli indirizzi dei sensori, è ovvio che non riesci a inserirli. Non fai prima a testare i sensori e poi con un commento su quei float temp e temp1 scrivi qual è uno dei due?

P.S. Per intenderci QUI ti devi presentare.

...in ritardo ma ho provveduto alla presentazione!!!!

grazie per la rapidissima risposta.

Anch'io volevo commentarli però mi è venuto un dubbio:

temp = sensors.getTempCByIndex(0); temp1 = sensors.getTempCByIndex(1);

...scusate l'ignoranza ...ma ho pensato che (0) sia un sensore e (1) l'altro.

Di conseguenza: come fa OneWire a determinare quale è lo (0) e quale (1)??? .....se un giorno il sensore 0 si danneggia l'altro rimane 1 o viene automaticamente passato sullo 0???? .....se così fosse io leggerei la temperatura riferita ad un'altro locale.

Tenete presente che questa è una prova con 2 sensori ma io vorrei monitorare più locali

In sostanza volevo richiamarli con una variabile (o nome) cosicché una volta che si verifica un guasto so quale sensore non va.

Ciao

… grazie per la presentazione, per completare l’opera dai anche una bella letta al REGOLAMENTO così evitiamo incomprensioni future :wink:

Guglielmo

Comunque 'OneWire' determina qual è il sensore grazie appunto all'indirizzo ;) Non viene passato sullo zero. Se sai che temp1 è il 'bagno' e poi commenti temp1 scrivendoci che è il 'bagno' non ti sbaglierai mai ;)

OK

Effettivamente se non viene passato, lo commento e tutto è risolto ...e anche più semplice.

Però a questo punto mi sorge un altro dubbio:

mettiamo di avere più sensori, per esempio 7,..... si rompe il n.3 (temp3) e lo sostituisco.... il nuovo che metto prende in automatico questo indirizzo?...cioè OneWire fa assumere al sensore l'indirizzo lbiero della sequenza da 1 a 7?

Grazie

Franco A.

Se nel codice il sensore numero 3 ha un certo indirizzo, si rompe e sostituisci QUEL sensore, ovviamente prenderà esattamente il suo posto. :wink:

No, non credo sia così. Quei numeri 0...n credo siano assegnati seguendo l'ordine con cui i device sono scoperti sul bus, che è sì determistico, ma solo finché non si cambiano i sensori. Quindi se sostituisci un sensore qualche indice potrebbe cambiare e dovraii verificarli tutti.

In alternativa, puoi indirizzarli con il loro indirizzo hardware, che è univoco per ogni sensore (una sorta di MAC insomma). Ovviamente se ne sostituisci uno dovrai aggiornare il suo indirizzo nel codice, ma sei sicuro che gli altri rimangono com'erano prima.

Dai un'occhiata all'esempio Multiple della libreria DallasTemperature, spiega proprio questo tra i commenti.

Infatti sì, hai ragione Sukko, però se glielo mette lui l'indirizzo HW nel codice come dici (ma mi pare lo faccia già sul suo codice) non credo che avrà problemi a sostituire il sensore. In effetti un'occhiata a quell'esempio è la migliore cosa, spiega tutto molto bene. ;) Scusate per l'imprecisione.

Sì, lui gli indirizzi sembra averli, e infatti li usa nel printTemperature(), ma nel loop() utilizza erroneamente gli indici, senza sapere quale indice corrisponde a quale dispositivo. Basta che usi invece getTempC(indirizzo).