本文整理汇总了C++中baro_t类的典型用法代码示例。如果您正苦于以下问题:C++ baro_t类的具体用法?C++ baro_t怎么用?C++ baro_t使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了baro_t类的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: Baro_update
void Baro_update(void) // Note Pressure is now global for telemetry 1hPa = 1mBar
{
static float BaroTab[5], BaroSpikeTab[5]; // Note: We don't care about runup bufferstate since first 50 runs are discarded anyway
static uint32_t LastGeneraltime;
static uint16_t baroDeadline = 0;
static uint8_t state = 0, Bidx = 0, SkipCnt = 0;
float temp;
bool rdy = false;
uint8_t i, maxsortidx = 4;
newbaroalt = false; // Reset Newbarovalue since it's iterative and not interrupt driven it's OK
if (micros() - LastGeneraltime < baroDeadline) return; // Make it rollover friendly
switch (state)
{
case 0:
baro.start_ut(); // Temperature Conversion start
LastGeneraltime = micros();
baroDeadline = baro.ut_delay - 1;
SkipCnt = 0; // Reset Skipcounter, reduces 27ms delay to average 20ms delay for ms baro (37Hz to 50Hz)
state++;
break;
case 1:
baro.get_ut(); // Readout Temp fall through case
state++;
case 2:
baro.start_up(); // Pressure Conversion start
LastGeneraltime = micros();
baroDeadline = baro.up_delay - 1;
state++;
break;
case 3:
baro.get_up(); // Readout Pressure
baroDeadline = 0; // Don't use delay between read. Cycletime is enough. Before: TimeNowMicros + baro.repeat_delay - 1;
ActualPressure = baro.calculate(); // ActualPressure needed by mavlink
BaroSpikeTab[0] = (1.0f - pow(ActualPressure / 101325.0f, 0.190295f)) * 4433000.0f; // I stick to the "slower", method - gives better results.
BaroSpikeTab[4] = BaroSpikeTab[0];
while(!rdy) // Spikefilter now
{
rdy = true;
for (i = 0; i < maxsortidx; i++)
{
temp = BaroSpikeTab[i];
if (temp > BaroSpikeTab[i + 1])
{
BaroSpikeTab[i] = BaroSpikeTab[i + 1];
BaroSpikeTab[i + 1] = temp;
rdy = false;
}
}
maxsortidx --;
}
BaroTab[Bidx] = BaroSpikeTab[2];
Bidx++;
if (Bidx == 5) Bidx = 0;
BaroAlt = 0;
for (i = 0; i < 5; i++) BaroAlt += BaroTab[i];
BaroAlt *= 0.2f;
SkipCnt++;
if (SkipCnt == 2 || baro.baro_type == 1) state = 0; // Read new Temp every 2nd run gives us little more speed without loosing resolution. However it worsens BMP - so not done there // baro_type: 1 = BMP 2 = MS
else state = 2;
newbaroalt = true;
break;
}
}
开发者ID:Bamfax,项目名称:TestCode3,代码行数:65,代码来源:sensors.c
示例2: Baro_update
int Baro_update(void)
{
static uint32_t baroDeadline = 0;
static int state = 0;
if ((int32_t)(currentTime - baroDeadline) < 0)
return 0;
baroDeadline = currentTime;
if (state) {
baro.get_up();
baro.start_ut();
baroDeadline += baro.ut_delay;
baro.calculate(&baroPressure, &baroTemperature);
state = 0;
return 2;
} else {
baro.get_ut();
baro.start_up();
Baro_Common();
state = 1;
baroDeadline += baro.up_delay;
return 1;
}
}
开发者ID:tommyleo,项目名称:speedyflight,代码行数:26,代码来源:sensors.c
示例3: Baro_update
void Baro_update(void)
{
static uint32_t baroDeadline = 0;
static uint8_t state = 0;
int32_t pressure;
if ((int32_t)(currentTime - baroDeadline) < 0)
return;
baroDeadline = currentTime;
switch (state) {
case 0:
baro.start_ut();
state++;
baroDeadline += baro.ut_delay;
break;
case 1:
baro.get_ut();
state++;
break;
case 2:
baro.start_up();
state++;
baroDeadline += baro.up_delay;
break;
case 3:
baro.get_up();
pressure = baro.calculate();
BaroAlt = (1.0f - pow(pressure / 101325.0f, 0.190295f)) * 4433000.0f; // centimeter
state = 0;
baroDeadline += baro.repeat_delay;
break;
}
}
开发者ID:di9it,项目名称:therminator,代码行数:35,代码来源:sensors.c
示例4: baroUpdate
void baroUpdate(uint32_t currentTime)
{
static uint32_t baroDeadline = 0;
static barometerState_e state = BAROMETER_NEEDS_SAMPLES;
if ((int32_t)(currentTime - baroDeadline) < 0)
return;
baroDeadline = currentTime;
switch (state) {
case BAROMETER_NEEDS_SAMPLES:
baro.get_ut();
baro.start_up();
state = BAROMETER_NEEDS_CALCULATION;
baroDeadline += baro.up_delay;
break;
case BAROMETER_NEEDS_CALCULATION:
baro.get_up();
baro.start_ut();
baroDeadline += baro.ut_delay;
baro.calculate(&baroPressure, &baroTemperature);
state = BAROMETER_NEEDS_PROCESSING;
break;
case BAROMETER_NEEDS_PROCESSING:
state = BAROMETER_NEEDS_SAMPLES;
baroPressureSum = recalculateBarometerTotal(barometerConfig->baro_sample_count, baroPressureSum, baroPressure);
break;
}
}
开发者ID:Reini60,项目名称:cleanflight,代码行数:32,代码来源:barometer.c
示例5: Baro_update
/*
Current Timing:
MS5611: 51 Hz
BMP085: 32.9 Hz
Some Notes: I read out baro temperature every time because a sustained datarate is better than having jitter data at a little higher rate.
Barometic formula taken from "calcSHABarASLAlt(..)" https://gentlenav.googlecode.com/svn-history/r3598/branches/MatrixPilot_DB_Breeze/MatrixPilot/barometerCntrl.c
There you can read: "This is using a super high accuracy barometric altitude computation, technicaly, +-1.5 M of the standard
atmosphere tables in the troposphere (up to 11,000 m amsl)". The implementation here does not constantly calculate a new temperature correction factor
because doing that only once on startup gives me the better results - that maybe because of the pressure / temperature correction already done in the Baro - driver.
The calculation of that temperature correction factor is IMHO the key why it works better than using a fixed number ("BaroTempCorMeter").
The calculation of the formula is not split up because the use of logf() and expf() together is 9,8 times FASTER than a single powf() instruction (measured on naze).
Benchtests suggest it is working better and 9,8 times faster than this:
#define AbsAltExponent 0.1902612003f // More precise number by using less rounding on physical constants
#define BaroTempCorMeter 44330.7692307692f // Let compiler wrap this to float. Was 44330 before.
FiveElementSpikeFilterINT32(3200.0f * ((1.0f - powf(ActualPressure / GroundPressure, AbsAltExponent)) * BaroTempCorMeter), BaroSpikeTab32); // Result in cm * 32
*/
void Baro_update(void) // Note Pressure is now global for telemetry 1hPa = 1mBar
{
static int32_t BaroSpikeTab32[5], lastlastspike32; // Note: We don't care about runup bufferstate.
static uint32_t LastGeneraltime, LastDataOutPut;
static uint16_t baroDeadline = 0;
static uint8_t state = 0;
float PressScale;
int32_t lastspike32, BaroSum, i;
if (micros() - LastGeneraltime < baroDeadline) return; // Make it rollover friendly
switch (state) // Statemachine just to schedule Baro I2C actions
{
case 0:
baro.start_ut(); // Temperature Conversion start
baroDeadline = baro.ut_delay;
break;
case 1:
baro.get_ut(); // Readout Temp
baro.start_up(); // Start the Pressure Conversion
baroDeadline = baro.up_delay;
break;
case 2:
baro.get_up(); // Readout Pressure
baroDeadline = baro.rep_delay;
break;
}
LastGeneraltime = micros(); // Timestamp after I2C actions
if (state == 2)
{
state = 0; // Reset statemachine
ActualPressure = baro.calculate(); // ActualPressure needed by mavlink. Unit: Pa (Pascal). Note: 100Pa = 1hPa = 1mbar
lastspike32 = BaroSpikeTab32[2]; // Save lastval from spiketab
PressScale = 0.190259f * logf(ActualPressure / GroundPressure);// Scale will be way off during initialization, thats why we zero out below
FiveElementSpikeFilterINT32(3200.0f * (BaroGroundTempScale * (1.0f - expf(PressScale))), BaroSpikeTab32); // Result in cm * 32
BaroSum = BaroSpikeTab32[2] + lastspike32 + lastlastspike32;
lastlastspike32 = lastspike32;
BaroAlt = (float)BaroSum * ((1.0f / 32.0f) / 3.0f);
Newbaroalt = true;
if (!GroundAltInitialized)
{
BaroDtUS = LastGeneraltime - LastDataOutPut; // We just need the time between reads during init. First read will be off, settleloop fixes that
LastDataOutPut = LastGeneraltime;
for (i = 0; i < 5; i++) BaroSpikeTab32[i] = 0; // Zero out during ini. No need to do it better, just more EEPROM and Stack waste.
lastlastspike32 = 0;
}
} else state++;
}
开发者ID:Crashpilot1000,项目名称:HarakiriWebstore1,代码行数:63,代码来源:sensors.c
示例6: baroUpdate
uint32_t baroUpdate(void)
{
static barometerState_e state = BAROMETER_NEEDS_SAMPLES;
switch (state) {
default:
case BAROMETER_NEEDS_SAMPLES:
baro.get_ut();
baro.start_up();
state = BAROMETER_NEEDS_CALCULATION;
return baro.up_delay;
break;
case BAROMETER_NEEDS_CALCULATION:
baro.get_up();
baro.start_ut();
baro.calculate(&baroPressure, &baroTemperature);
baroPressureSum = recalculateBarometerTotal(barometerConfig()->baro_sample_count, baroPressureSum, baroPressure);
state = BAROMETER_NEEDS_SAMPLES;
return baro.ut_delay;
break;
}
}
开发者ID:180jacob,项目名称:cleanflight,代码行数:23,代码来源:barometer.c
注:本文中的baro_t类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论