For Hepta-Sat Lite

HeptaTemp.cpp

Committer:
HEPTA
Date:
2017-09-08
Revision:
4:845cda80eaf0
Parent:
3:96c3dd85be15

File content as of revision 4:845cda80eaf0:

#include"HeptaTemp.h"
#include"mbed.h"

HeptaTemp::HeptaTemp(PinName pin) : _pin(pin)
{

}

void HeptaTemp::temp_sense(float* temp)
{
//resistance
    R1 = 2500;//[Ω]
    R2 = 2500;//[Ω]
    R3 = 110;//[Ω]
    R4 = 1000;//[Ω]
    R5 = 68000;//[Ω]
    Pt = 100;//[Ω]
    R_1 = 3;//[kΩ]
    R_2 = 2;//[kΩ]

//current
    I = 0.001;//[A]

//voltage
    Vref = 2.5;//[V]

//Gain&Offset
    float gain = -R5*I/R4;
    float off = Vref+I*R3;

//temperature coefficient
    ce = 0.003851;
    float volt = (_pin.read())*3.3*(R_1 + R_2)/R_1;
    float Rth = (volt-off)/gain+R3;
    *temp = (Rth-Pt)/(ce*Pt);
    
// delay some time before reading again
    wait(0.5);

}

void HeptaTemp::temp_sense_u16(char* temp_u16)
{
    unsigned short temp_datas;
    char temp1[8]= {0x00},temp2[8]= {0x00};
    temp_datas=_pin.read_u16()>>4;
    sprintf( temp1, "%02X", (temp_datas >> 8) & 0x0F);
    sprintf( temp2, "%02X", (temp_datas) & 0xFF);
    temp_u16[0]=temp1[0];
    temp_u16[1]=temp1[1];
    temp_u16[2]=temp2[0];
    temp_u16[3]=temp2[1];
    //*dsize = 4;
}

void HeptaTemp::temp_sensing_vol(float* voltage)
{
    R_1 = 3;
    R_2 = 2;
    *voltage = (_pin.read())*3.3*(R_1 + R_2)/R_1;

}