#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; float tempCmean_reservoir[TEMPMEAN_SIZE]; DeviceAddress thermometerAir={0x28,0xFF,0x6C,0x1C,0x72,0x16,0x05,0x8B}; float tempC_air; float tempCmean_air[TEMPMEAN_SIZE]; void temperature_setup() { //initialize mean array for (uint16_t i=0;ilast_read_ds18b20+pInterval) { if (loopmillis>last_read_ds18b20+pInterval*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[tempCmean_pos]=tempC_reservoir; } tempC_air = sensors.getTempC(thermometerAir); if (tempC_air == DEVICE_DISCONNECTED_C) { Serial.print(" Error reading: "); printAddress(thermometerReservoir); }else{ tempCmean_air[tempCmean_pos]=tempC_air; } 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