#ifndef _TEMPERATURE_H_ #define _TEMPERATURE_H_ #include #include void printAddress(DeviceAddress deviceAddress); //first address: 28FF6C1C7216058B //second address: #define ONE_WIRE_BUS 18 //GPIO pin #define TEMPERATURE_PRECISION 12 //max is 12 #define READINTERVAL_DS18B20 1000 //ms // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); #define TEMPMEAN_SIZE 16 uint16_t tempCmean_pos=0; // arrays to hold device addresses DeviceAddress thermometerReservoir={0x28,0xFF,0x30,0xBA,0x85,0x16,0x03,0xB5}; float tempC_reservoir; //last reading float tempCmean_reservoir_array[TEMPMEAN_SIZE]; float tempCmean_reservoir=DEVICE_DISCONNECTED_C; DeviceAddress thermometerAir={0x28,0xFF,0x6C,0x1C,0x72,0x16,0x05,0x8B}; float tempC_air; //last reading float tempCmean_air_array[TEMPMEAN_SIZE]; float tempCmean_air=DEVICE_DISCONNECTED_C; void temperature_setup() { //initialize mean array for (uint16_t i=0;ilast_read_ds18b20+READINTERVAL_DS18B20) { if (loopmillis>last_read_ds18b20+READINTERVAL_DS18B20*10) { //timeout Serial.println("Warn: Request Temperatures Timeout!"); flag_requestTemperatures=false; } if (!flag_requestTemperatures) { sensors.requestTemperatures(); //this takes ~600ms flag_requestTemperatures=true; } if (sensors.isConversionComplete()) { flag_requestTemperatures=false; last_read_ds18b20=loopmillis; tempC_reservoir = sensors.getTempC(thermometerReservoir); if (tempC_reservoir == DEVICE_DISCONNECTED_C) { Serial.print(" Error reading: "); printAddress(thermometerReservoir); }else{ tempCmean_reservoir_array[tempCmean_pos]=tempC_reservoir; if (isValueArrayOKf(tempCmean_reservoir_array,TEMPMEAN_SIZE,DEVICE_DISCONNECTED_C)) { tempCmean_reservoir=getMeanf(tempCmean_reservoir_array,TEMPMEAN_SIZE); }else{ tempCmean_reservoir=DEVICE_DISCONNECTED_C; } } tempC_air = sensors.getTempC(thermometerAir); if (tempC_air == DEVICE_DISCONNECTED_C) { Serial.print(" Error reading: "); printAddress(thermometerReservoir); }else{ tempCmean_air_array[tempCmean_pos]=tempC_air; if (isValueArrayOKf(tempCmean_air_array,TEMPMEAN_SIZE,DEVICE_DISCONNECTED_C)) { tempCmean_air=getMeanf(tempCmean_air_array,TEMPMEAN_SIZE); }else{ tempCmean_air=DEVICE_DISCONNECTED_C; } } tempCmean_pos++; tempCmean_pos%=TEMPMEAN_SIZE; } } } void printAddress(DeviceAddress deviceAddress) { for (uint8_t i = 0; i < 8; i++) { // zero pad the address if necessary if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } } #endif