Пример #1
0
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();
}
Пример #2
0
void CookingPanel::updateTemperature(){
    
   tempC = mySensor.getTemp();
   
   int startY=25;
  _myGLCD->print("Actual temperature: "+formatTemperature(tempC)+"  ", 10, startY+12);
  
  myGraph.drawValue(tempC);
  
}
Пример #3
0
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);
  
}