Files @ 9ae5559ab974
Branch filter:

Location: therm-ng/src/thermostat.c

matthewreed
Added current setpoint number to heating screens, and a few fixes for floating point numbers and such.
//
// Thermostat: Thermostatic controller
//

#include "thermostat.h"

// PID implementation

float thermostat_process(void)
{

    //            #ifdef MAX31865_RTD_SENSOR
    //            max31865_readtemp(spi_get(), &set, &status);
    //			#else
    //			max31855_readtemp(spi_get(), &set, &status); // Read MAX31855
    //			#endif

    float ssr_output = 0.0;
    uint8_t thermostat_plant_on = 0;

    // TODO: Migrate this FxP conversion to the readtemp code or similar
    float temp = runtime_status()->temp;


    // EMZ FIXME: This could be way simpler
    if(flash_getsettings()->val.plant_type == PLANT_HEATER && runtime_status()->setpoint * 10 < temp - flash_getsettings()->val.hysteresis * 10)
        thermostat_plant_on = 1;
    else if(flash_getsettings()->val.plant_type == PLANT_HEATER && runtime_status()->setpoint * 10 > temp + flash_getsettings()->val.hysteresis * 10)
        thermostat_plant_on = 0;

    if(flash_getsettings()->val.plant_type == PLANT_COOLER && runtime_status()->setpoint * 10 > temp + flash_getsettings()->val.hysteresis * 10)
        thermostat_plant_on = 1;
    else if(flash_getsettings()->val.plant_type == PLANT_COOLER && runtime_status()->setpoint * 10 < temp - flash_getsettings()->val.hysteresis * 10)
        thermostat_plant_on = 0;

    // EMZ: TODO: Refactor to output_enabled or something
    if(runtime_status()->pid_enabled && thermostat_plant_on)
    {
        // EMZ TODO: functionalize this
        // put ssr output on display
        ssd1306_drawstring("      ", 0, 90); //fixme: this is bad, but I can't get the old digits to clear otherwise
        char tempstr[6];
        itoa(ssr_output, tempstr, 10);
        ssd1306_drawstring(tempstr, 0, 90);



        //                HAL_GPIO_WritePin(SSR_PIN, 1);
        HAL_GPIO_WritePin(LED, 1);
    }
    else
    {
        //                HAL_GPIO_WritePin(SSR_PIN, 0);
        HAL_GPIO_WritePin(LED, 0);
    }

    return ssr_output;
}