#ifndef MISSION_CONTROLLER_ACS_SUSCONVERTER_H_ #define MISSION_CONTROLLER_ACS_SUSCONVERTER_H_ #include #include #include "AcsParameters.h" class SusConverter { public: SusConverter() {} bool checkSunSensorData(const uint16_t susChannel[6]); void calcAngle(const uint16_t susChannel[6]); void calibration(const float coeffAlpha[9][10], const float coeffBeta[9][10]); float* calculateSunVector(); float* getSunVectorSensorFrame(const uint16_t susChannel[6], const float coeffAlpha[9][10], const float coeffBeta[9][10]); private: float alphaBetaRaw[2]; //[°] float alphaBetaCalibrated[2]; //[°] float sunVectorSensorFrame[3]; //[-] bool validFlag[12] = {returnvalue::OK, returnvalue::OK, returnvalue::OK, returnvalue::OK, returnvalue::OK, returnvalue::OK, returnvalue::OK, returnvalue::OK, returnvalue::OK, returnvalue::OK, returnvalue::OK, returnvalue::OK}; static const uint8_t GNDREF = 4; // =2^12[Bit]high borderline for the channel values of one sun sensor for validity Check static constexpr uint16_t SUS_CHANNEL_VALUE_HIGH = 4096; // [Bit]low borderline for the channel values of one sun sensor for validity Check static constexpr uint8_t SUS_CHANNEL_VALUE_LOW = 0; // 4096[Bit]high borderline for check if the sun sensor is illuminated by the sun or by the // reflection of sunlight from the moon/earth static constexpr uint16_t SUS_CHANNEL_SUM_HIGH = 100; // [Bit]low borderline for check if the sun sensor is illuminated by the sun or by the reflection // of sunlight from the moon/earth static constexpr uint8_t SUS_CHANNEL_SUM_LOW = 0; // [°] Width of the calibration cells --> necessary for checking in // which cell a data point should be static const uint8_t completeCellWidth = 140, halfCellWidth = 70; uint16_t susChannelValueSum = 0; AcsParameters acsParameters; }; #endif /* MISSION_CONTROLLER_ACS_SUSCONVERTER_H_ */