void DS18B20_Controller::completeSensorReadout() { // initialise OK sensors to state NOK and leave other states untouched: for(uint8_t i=0; i<numSensors; i++) { if(sensors[i]->sensorStatus == DS18B20_SENSOR_OK) { sensors[i]->sensorStatus = DS18B20_SENSOR_NOK; } sensors[i]->currentTemp = ACF_UNDEFINED_TEMPERATURE; } uint8_t addr[DS18B20_SENSOR_ID_BYTES]; while(oneWire->search(addr)) { if (OneWire::crc8(addr, DS18B20_SENSOR_ID_BYTES-1) != addr[DS18B20_SENSOR_ID_BYTES-1]) { continue; } uint8_t data[DS18B20_SENSOR_READOUT_BYTES]; if (! readSensorScratchpad(addr, data)) { continue; } DS18B20_Sensor *sensor = getSensor(addr); if (sensor != NULL) { DS18B20_Readout readout = getCelcius(data); #ifdef DEBUG_DS18B20 Serial.print(F("DEBUG_DS18B20: Sensor ")); Serial.print(sensor->label); #endif // only set temperature and state for NOK sensors and AUTO_ASSIGNED sensors (leave others untouched): if (sensor->sensorStatus == DS18B20_SENSOR_ID_AUTO_ASSIGNED) { sensor->currentTemp = readout.celcius; #ifdef DEBUG_DS18B20 char buf[MAX_DS18B20_SENSOR_ID_STR_LEN]; Serial.print(F(": ID AUTO ASSIGNED, ")); Serial.println(formatTemperature(readout.celcius, buf)); #endif } else if (sensor->sensorStatus == DS18B20_SENSOR_NOK) { // Ensure temperature is plausible: if((sensor->rangeMin == ACF_UNDEFINED_TEMPERATURE || readout.celcius >= sensor->rangeMin) && (sensor->rangeMax == ACF_UNDEFINED_TEMPERATURE || readout.celcius <= sensor->rangeMax)) { sensor->sensorStatus = DS18B20_SENSOR_OK; sensor->currentTemp = readout.celcius; #ifdef DEBUG_DS18B20 char buf[MAX_DS18B20_SENSOR_ID_STR_LEN]; Serial.print(F(": OK, ")); Serial.println(formatTemperature(readout.celcius, buf)); #endif } else { #ifdef DEBUG_DS18B20 Serial.println(F(": NOK")); #endif } } } } oneWire->reset_search(); }
void CookingPanel::updateTemperature(){ tempC = mySensor.getTemp(); int startY=25; _myGLCD->print("Actual temperature: "+formatTemperature(tempC)+" ", 10, startY+12); myGraph.drawValue(tempC); }
void CookingPanel::show(){ /* _myGLCD->clrScr(); _myButtons->deleteAllButtons(); setHeadText(_headText); setSubheadText(_subheadText); */ long startTimeStamp = millis(); long updateTimeStamp = startTimeStamp; int totalTime=0; _sizeX=_myGLCD->getDisplayXSize(); _sizeY=_myGLCD->getDisplayYSize(); clearScreen(); isActive=true; int startY=25; _myGLCD->print("Set temperature: "+formatTemperature(_settings->temperature), 10, startY); _myGLCD->print("Actual temperature:", 10, startY+12); _myGLCD->print("Total time: 1H:13m", 10, startY+12*2); _myGLCD->print("Finish time: 0H:90m", 10, startY+12*3); butTop = _myButtons->addButton(_sizeX-_buttonHeight-3, 2, _buttonHeight, _buttonHeight, "X"); _myButtons->drawButtons(); updateTemperature(); //drawGraphFrame(); myGraph.setHeight(160); myGraph.drawFrame(tempC); while(isActive){ if (_myTouch->dataAvailable() == true){ int pressed_button = _myButtons->checkButtons(); if(pressed_button==butTop){ isActive=false; _eventCallbackFunction(0); } } if (millis()-updateTimeStamp > 1000){ totalTime++; int secs=(millis()-startTimeStamp)/1000; secs=secs%60; int mins=((millis()-startTimeStamp)/60000)%60; //mins=mins%60; int hours=(millis()-startTimeStamp)/(60*60000); setHeadText("Cooking " + String(hours, DEC) + ":"+ String(mins, DEC) + ":"+ String(secs, DEC)+ " "); updateTimeStamp = millis(); } if (totalTime%5==0){ updateTemperature(); } } //_eventCallbackFunction(0); }