Files @ c1b2840961f0
Branch filter:

Location: therm-ng/src/main.c

Ethan Zonca <ethanzonca>
Hacking thermostatic mode into operation. This code needs some love.
//
// Therm Firmware
// Copyright 2018 Ethan Zonca
// Author(s): Ethan Zonca and Matthew Reed
//

#include "stm32f3xx_hal.h"
#include "config.h"
#include "watchdog.h"
#include "system.h"
#include "display.h"
#include "thermostat.h"
#include "gpio.h"
#include "tempsense.h"
#include "pid.h"
#include "error.h"
#include "flash.h"
#include "ssd1306/ssd1306.h"
#include "pwmout.h"


int main(void)
{
    sysclock_init();
    hal_init();
    gpio_init();
    flash_init();

    ssd1306_init();

    // Startup screen
    display_startup_screen();
    HAL_Delay(2000);
    ssd1306_clearscreen();
    //ssd1306_drawlogo();

    // Default status
    runtime_status()->temp = 0.0;
    runtime_status()->state_resume = 0;
    runtime_status()->setpoint = 70.0;
    runtime_status()->pid_enabled = 0;
    runtime_status()->setpoint_index = 0;
    if (flash_getsettings()->val.boottobrew)
    {
        runtime_status()->state = STATE_PREHEAT;
    }
    else
    {
        runtime_status()->state = STATE_IDLE;
    }

    pid_init();
    pwmout_init();
    watchdog_init();
    tempsense_init();

    // Soft timers
    uint32_t last_pid = 0;
    uint32_t last_thermostat = 0;
    uint32_t last_1hz = 0;
    uint32_t last_5hz = 0;

    int16_t duty = 0;

    while (1)
    {

        if(HAL_GetTick() - last_1hz > 750)
        {
            display_1hz();
            last_1hz = HAL_GetTick();
        }

        if(HAL_GetTick() - last_5hz > 200)
        {
            tempsense_readtemp();
            runtime_status()->temp = tempsense_gettemp();
            last_5hz = HAL_GetTick();
        }

        if(flash_getsettings()->val.control_mode == MODE_PID && (HAL_GetTick() - last_pid > PID_PERIOD))
        {
            //duty = pid_process();
            last_pid = HAL_GetTick();
        }

        // Thermostatic control
        if(flash_getsettings()->val.control_mode == MODE_THERMOSTAT && HAL_GetTick() - last_thermostat > SSR_PERIOD)
        {
            duty = thermostat_process();
            last_thermostat = HAL_GetTick();
        }

        //pwmout_process((int16_t)duty);
        display_process();
        watchdog_feed();


        //        // Transmit temperature over USB-CDC on a regular basis
        //        if(HAL_GetTick() - last_vcp_tx > VCP_TX_FREQ)
        //        {
        //            // Print temp to cdc
        //            char tempstr[16];
        //            itoa_fp(status.temp, status.temp_frac, tempstr);
        //            uint8_t numlen = strlen(tempstr);
        //            tempstr[numlen] = '\r';
        //            tempstr[numlen+1] = '\n';
        //
        //    //        if(set.val.usb_plugged)
        //    //            CDC_Transmit_FS(tempstr, numlen+2);
        //           // while(CDC_Transmit_FS("\r\n", 2) == USBD_BUSY);
        //
        //            last_vcp_tx = HAL_GetTick();
        //        }

    }
}