bool BaroSensorClass::getTempAndPressure(float *temperature, float *pressure, TempUnit tempScale, BaroOversampleLevel level) { if(err || !initialised) return false; int32_t d2 = takeReading(CMD_START_D2(level), level); if(d2 == 0) return false; int64_t dt = d2 - c5 * (1L<<8); int32_t temp = 2000 + (dt * c6) / (1L<<23); /* Second order temperature compensation */ int64_t t2; if(temp >= 2000) { /* High temperature */ t2 = 5 * (dt * dt) / (1LL<<38); } else { /* Low temperature */ t2 = 3 * (dt * dt) / (1LL<<33); } if(temperature != NULL) { *temperature = (float)(temp - t2) / 100; if(tempScale == FAHRENHEIT) *temperature = *temperature * 9 / 5 + 32; } if(pressure != NULL) { int32_t d1 = takeReading(CMD_START_D1(level), level); if(d1 == 0) return false; int64_t off = c2 * (1LL<<17) + (c4 * dt) / (1LL<<6); int64_t sens = c1 * (1LL<<16) + (c3 * dt) / (1LL<<7); /* Second order temperature compensation for pressure */ if(temp < 2000) { /* Low temperature */ int32_t tx = temp-2000; tx *= tx; int32_t off2 = 61 * tx / (1<<4); int32_t sens2 = 29 * tx / (1<<4); if(temp < -1500) { /* Very low temperature */ tx = temp+1500; tx *= tx; off2 += 17 * tx; sens2 += 9 * tx; } off -= off2; sens -= sens2; } int32_t p = ((int64_t)d1 * sens/(1LL<<21) - off) / (1LL << 15); *pressure = (float)p / 100; } return true; }
void IRSensor::setBalance(){ short fwd_average, bwd_average = 0; for ( int i = 0; i < 8; i++){ takeReading(); fwd_average += getLastReading(0); bwd_average += getLastReading(1); } fwd_average /= 8; bwd_average /= 8; fwd_balanced_reading = fwd_average; bwd_balanced_reading = bwd_average; }
void loop() { char *cmd; if ((cmd = getCmd()) != 0) { switch(cmd[0]) { case 'v': sendMsg(VERSION_STR); break; case 'l': cmdLed(cmd); break; case 'b': cmdBut(); break; case 'a': getI2Caddresses(); break; case 'r': takeReading(); break; } } procBut(); }
void BaroSensorClass::dumpDebugOutput() { Serial.print(F("C1 = 0x")); Serial.println(c1, HEX); Serial.print(F("C2 = 0x")); Serial.println(c2, HEX); Serial.print(F("C3 = 0x")); Serial.println(c3, HEX); Serial.print(F("C4 = 0x")); Serial.println(c4, HEX); Serial.print(F("C5 = 0x")); Serial.println(c5, HEX); Serial.print(F("C6 = 0x")); Serial.println(c6, HEX); Serial.print(F("d1 first = 0x")); Serial.println(takeReading(CMD_START_D1(OSR_8192), OSR_8192)); Serial.print(F("d2 first = 0x")); Serial.println(takeReading(CMD_START_D2(OSR_8192), OSR_8192)); Serial.print(F("d1 second = 0x")); Serial.println(takeReading(CMD_START_D1(OSR_8192), OSR_8192)); Serial.print(F("d2 second = 0x")); Serial.println(takeReading(CMD_START_D2(OSR_8192), OSR_8192)); Serial.print(F("d1 third = 0x")); Serial.println(takeReading(CMD_START_D1(OSR_8192), OSR_8192)); Serial.print(F("d2 third = 0x")); Serial.println(takeReading(CMD_START_D2(OSR_8192), OSR_8192)); float temp, pressure; bool res = getTempAndPressure(&temp, &pressure); Serial.print(F("result (fourth) = ")); Serial.println(res ? F("OK") : F("ERR")); Serial.print(F("Temp (fourth) = ")); Serial.println(temp); Serial.print(F("Pressure (fourth) = ")); Serial.println(pressure); Serial.print(F("Error (fourth) = ")); Serial.println(err); }
uint8_t PhotoCountSelectMonitor::getCount() { takeReading(); //update m_selectedPhotoCount return m_selectedPhotoCount; }//end getCount