Dependencies:   mbed-rtos mbed

HK.cpp

Committer:
greenroshks
Date:
2014-07-09
Revision:
3:307c56629df0
Parent:
2:1792c9cda669

File content as of revision 3:307c56629df0:

#include "HK.h"
 
DigitalOut SelectLine3 (p24); // MSB of Select Lines
DigitalOut SelectLine2 (p23);
DigitalOut SelectLine1 (p22);
DigitalOut SelectLine0 (p21); // LSB of Select Lines
 
AnalogIn CurrentInput(p15); // Input from Current Multiplexer
AnalogIn VoltageInput(p16); // Input from Voltage Multiplexer
AnalogIn TemperatureInput(p17); // input from Temperature Multiplexer

SensorData Sensor; 
int quantiz(float start,float step,float x)
{
    int y=(x-start)/step;
    if(y<=0)y=0;
    if(y>=15)y=15;
    return y;
}
 
void init_beacon(ShortBeacy x){
    x.Voltage[0]=1;
    x.AngularSpeed[0]=2;
    x.AngularSpeed[1]=3;
    x.SubsystemStatus[0]=145;
    x.Temp[0]=1;
    x.Temp[1]=2;
    x.Temp[2]=3;
    x.ErrorFlag[0]=3;
}
 
void FUNC_HK_MAIN()
{
    
    ShortBeacy ShortBeacon;
    init_beacon(ShortBeacon);
 
    int LoopIterator;
 
    SelectLine0=0;
    SelectLine1=0;
    SelectLine2=0;
    SelectLine3=0;
 
    for(LoopIterator=0; LoopIterator<16; LoopIterator++) {
 
        if(LoopIterator%2==0) {
            Sensor.Current[LoopIterator/2]=quantiz(cstart,cstep,(CurrentInput.read()/(50*rsens)));
            Sensor.Voltage[LoopIterator/2]=quantiz(vstart,vstep,(VoltageInput.read()/5.37));
            Sensor.Temperature[LoopIterator/2]=quantiz(tstart,tstep,(-90.7*3.18*TemperatureInput.read()+190.1543));
        } else {
            Sensor.Current[(LoopIterator-1)/2]=Sensor.Current[LoopIterator-1]<<4+quantiz(cstart,cstep,(CurrentInput.read()/(50*rsens)));
            Sensor.Voltage[(LoopIterator-1)/2]=Sensor.Voltage[LoopIterator-1]<<4+quantiz(vstart,vstep,(VoltageInput.read()/5.37));
            Sensor.Temperature[(LoopIterator-1)/2]=Sensor.Temperature[LoopIterator-1]<<4+quantiz(tstart,tstep,(-90.7*3.18*TemperatureInput.read()+190.1543));
        }
// The following lines are used to iterate the select lines from 0 to 15
        SelectLine0=!(SelectLine0);
 
        if(LoopIterator%2==1)
            SelectLine1=!(SelectLine1);
 
        if(LoopIterator%4==3)
            SelectLine2=!(SelectLine2);
 
        if(LoopIterator%8==7)
            SelectLine3=!(SelectLine3);
 
        wait_us(10.0); //  A delay of 10 microseconds between each sensor output. Can be changed.
 
    }
 
}