Example #1
0
// Read the sensor
void AP_Baro_HIL::update(void)
{
    if (_frontend._hil.updated) {
        _frontend._hil.updated = false;
        _copy_to_frontend(0, _frontend._hil.pressure, _frontend._hil.temperature);
    }
}
Example #2
0
// Read the sensor
void AP_Baro_PX4::update(void)
{
    for (uint8_t i=0; i<_num_instances; i++) {
        struct baro_report baro_report;
        struct px4_instance &instance = instances[i];
        while (::read(instance.fd, &baro_report, sizeof(baro_report)) == sizeof(baro_report) &&
               baro_report.timestamp != instance.last_timestamp) {
            instance.pressure_sum += baro_report.pressure; // Pressure in mbar
            instance.temperature_sum += baro_report.temperature; // degrees celcius
            instance.sum_count++;
            instance.last_timestamp = baro_report.timestamp;
        }
    }

    for (uint8_t i=0; i<_num_instances; i++) {
        struct px4_instance &instance = instances[i];
        if (instance.sum_count > 0) {
            float pressure = (instance.pressure_sum / instance.sum_count) * 100;
            float temperature = instance.temperature_sum / instance.sum_count;
            instance.pressure_sum = 0;
            instance.temperature_sum = 0;
            instance.sum_count = 0;
            _copy_to_frontend(instance.instance, pressure, temperature);
        }
    }
}
Example #3
0
// Read the sensor
void AP_Baro_UAVCAN::update(void)
{
    if (_sem_baro->take(HAL_SEMAPHORE_BLOCK_FOREVER)) {
        _copy_to_frontend(_instance, _pressure, _temperature);

        _frontend.set_external_temperature(_temperature);
        _sem_baro->give();
    }
}
Example #4
0
// Read the sensor
void AP_Baro_HIL::update(void)
{
    float pressure = 0.0;
    float temperature = 0.0;
    float pressure_sum = 0.0;
    float temperature_sum = 0.0;
    uint32_t sum_count = 0;

    while (_frontend._hil.press_buffer.is_empty() == false){
        _frontend._hil.press_buffer.pop_front(pressure);
        pressure_sum += pressure; // Pressure in Pascals
        _frontend._hil.temp_buffer.pop_front(temperature);
        temperature_sum += temperature; // degrees celcius
        sum_count++;
    }

    if (sum_count > 0) {
        pressure_sum /= (float)sum_count;
        temperature_sum /= (float)sum_count;
        _copy_to_frontend(0, pressure_sum, temperature_sum);
    }
}