Heater for threaded program

Dependents:   LEX_Threaded_Programming

Heater.cpp

Committer:
omatthews
Date:
2019-07-17
Revision:
0:4e33cc8171f4
Child:
1:4435d407d827

File content as of revision 0:4e33cc8171f4:

/*------------------------------------------------------------------------------
Library code file for interface to Heater
Date: 16/07/2018


------------------------------------------------------------------------------*/

#include "Heater.h"
#include "ADS8568_ADC.h"

extern ADS8568_ADC adc;
extern float scale_factors[8];
extern Timer timer;
extern int MEAS_DELAY;
extern int N_ROLL_AVG;

    
Heater::Heater(int i_port, int v_port, DigitalOut drive, float R_set)
    :i_port(i_port),v_port(v_port),drive(drive), R_set(R_set){}


void Heater::read_R()
{
    adc.read_channels();
    i = adc.read_channel_result(i_port)/scale_factors[i_port];
    v = adc.read_channel_result(v_port)/scale_factors[v_port];
    if (i != 0) R = v/i;
}

void Heater::hold(int hold_time)
{
    int end_time = timer.read_ms() + hold_time;
    while (int time = timer.read_ms() < end_time)
    {
        drive = 1;
        wait_us(MEAS_DELAY);
        read_R();
        while (float R_avg = ((N_ROLL_AVG-1)*R_avg + R)/N_ROLL_AVG > R_set)
        {
            drive = 0;
            wait_us(MEAS_DELAY);
            read_R();
        }
    }
}    

void Heater::Set_R_set(float R) {R_set = R;}

float Heater::Get_R() {return R;}