Skip to content
Snippets Groups Projects
orders.c 2.76 KiB
Newer Older
Jean-Benoist Leger's avatar
Jean-Benoist Leger committed
#include "orders.h"

orders_t orders;

void do_orders()
{
    if(orders.open_ev_step)
    {
        vanne_step_open(orders.open_ev_step_value);
        orders.open_ev_step = 0;
    }
    if(orders.close_ev_step)
    {
        vanne_step_close(orders.close_ev_step_value);
        orders.close_ev_step = 0;
    }
    if(orders.open_ev)
    {
        vanne_open();
        orders.open_ev=0;
    }
    if(orders.close_ev)
    {
        vanne_close();
        orders.close_ev=0;
    }
    if(orders.vidange_ev)
    {
        vanne_vidange();
        orders.vidange_ev=0;
    }
Jean-Benoist Leger's avatar
Jean-Benoist Leger committed
    if(orders.write_config)
    {
        orders.write_config=0;
        config_write();
    }
Jean-Benoist Leger's avatar
Jean-Benoist Leger committed
    if(orders.get_T)
    {
        orders.get_T=0;

        int16_t temp;
        uint8_t status_thermo;
        uint8_t tries=0;
        while(1)
        {
            status_thermo = thermometer_gettemp(&temp,1000);
            debug_printf("get temp, status = %u\n", status_thermo);
            if(status_thermo==0)
                break;
            tries++;
            if(tries>=4)
                break;
        }
        if(status_thermo > 0)
        {
Jean-Benoist Leger's avatar
Jean-Benoist Leger committed
            status.fail |= STATUS_FAIL_T;
Jean-Benoist Leger's avatar
Jean-Benoist Leger committed
        }
        else
        {
Jean-Benoist Leger's avatar
Jean-Benoist Leger committed
            status.fail &= ~STATUS_FAIL_T;
Jean-Benoist Leger's avatar
Jean-Benoist Leger committed
            status.temperature_insta = temp;
            if(median_filter_thermometer_filled)
                median_filter_thermometer_update(temp);
            else
            {
                median_filter_thermometer_fill(temp);
                status.temperature.v1 = status.temperature.v2 = .0625*temp;
            }
            float Tinstamf = .0625*median_filter_thermometer_read();
            update_filtre2(&(status.temperature), THERMO_FACTOR_FILTRE, Tinstamf);

            if(cconfig.mode == MODE_AUTO)
            {
                float temperature_diff = status.temperature.v2 - cconfig.consigne_temperature;
                status.accu_integrateur += temperature_diff * 5 / cconfig.ti;
                float max_integrateur = cconfig.debit_max/cconfig.Kp - temperature_diff;
                if(max_integrateur<0)
                    max_integrateur = 0;
                if(status.accu_integrateur>max_integrateur)
                    status.accu_integrateur = max_integrateur;
                if(status.accu_integrateur<0)
                    status.accu_integrateur = 0;
Jean-Benoist Leger's avatar
Jean-Benoist Leger committed
                float consigne_debit = cconfig.Kp * (temperature_diff + status.accu_integrateur);
                if(consigne_debit>cconfig.debit_max)
                    consigne_debit = cconfig.debit_max;
                if(consigne_debit < 0)
                {
                    status.consigne_debit = 0;
                    status.volume_manque = 0;
                }
                else
                    status.consigne_debit = consigne_debit;
Jean-Benoist Leger's avatar
Jean-Benoist Leger committed
            }
        }
    }
}