• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C++ baro_t类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了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;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ base类代码示例发布时间:2022-05-31
下一篇:
C++ barGoLink类代码示例发布时间:2022-05-31
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap