a
Revision 0:c308751fd941, committed 2015-04-21
- Comitter:
- pfe
- Date:
- Tue Apr 21 10:22:08 2015 +0000
- Commit message:
- a
Changed in this revision
SANSORS.cpp | Show annotated file Show diff for this revision Revisions of this file |
SANSORS.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r c308751fd941 SANSORS.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SANSORS.cpp Tue Apr 21 10:22:08 2015 +0000 @@ -0,0 +1,83 @@ +#include "SANSORS.h" +Sansors::Sansors(PinName sda, PinName scl){ + i2c_ = new I2C(sda, scl); + //100KHz, as specified by the datasheet. + i2c_->frequency(100000); +} +void Sansors::CAP_ALT_TAS_Init(){ + //i2c.frequency (100000) ;//void frequency(int hz); + //------------ init Compass HMC //Continuous mode, periodic set/reset, 20Hz measurement rate. + i2c_Data[0] = HMC6352_CONTINUOUS; + i2c_Data[1] = 0x01; + i2c_Data[2] = 20; + addr=AdSensorALT; + i2c_->write(addr, i2c_Data, 3); // Send command + //------------- Get Alt Init + addr=AdSensorALT; + i2c_Data[0] = 0x07; // Send "read data" command to sensor + i2c_->write(addr, i2c_Data, 1); // Send command string + wait_ms(20); // attendre 20mS avant de relancer + i2c_->read(addr, i2c_Data, 2); + OldALT = (((int)i2c_Data[0] << 8) | (int)i2c_Data[1]);//*((unsigned short*)i2c_Data)&0xffff; //altitude en décimètre + OldALT = OldALT - 3000; + //---------------------------- + wait_ms(1); //attendre 1mS avant de relancer + //------------- Get Offset TAS + addr=AdSensorTAS; + i2c_Data[0] = 0x01; // Send "read data" command to sensor + i2c_->write(addr, i2c_Data, 1); // Send command string + wait_us(400);//attendre 400µS avant de relancer + i2c_->read(addr, i2c_Data, 2); + offset_TAS=(0xff00 & (((unsigned char)i2c_Data[1]) << 8)) | ((unsigned char)i2c_Data[0]&0xff); +} +signed short Sansors::GetCAP(){ + unsigned int CAP10; + char Error; + Error = 0; + addr = AdSensorCAP; + i2c_Data[0] = 0x41; // Send "read data" command to sensor + Error=i2c_->write(addr, i2c_Data, 1); // Send command string + wait_ms(1); //attendre 20mS avant de relancer + Error=Error+i2c_->read(addr, i2c_Data, 2); + CAP10 = (((int)i2c_Data[0] << 8) | (int)i2c_Data[1]); + if (Error==0) return CAP10; + return -1; +} + +signed short Sansors::GetALT(){ + int ALT; + char Error; + Error = 0; + addr=AdSensorALT; + i2c_Data[0] = 0x07; // Send "read data" command to sensor + Error=i2c_->write(addr, i2c_Data, 1); // Send command string + wait_ms(1); //attendre 20mS avant de relancer + Error=Error+i2c_->read(addr, i2c_Data, 2); + ALT = (((int)i2c_Data[0] << 8) | (int)i2c_Data[1]);//*((unsigned short*)i2c_Data)&0xffff; //altitude en décimètre + ALT = ALT-3000; + //ALT = (ALT+OldALT)/2; // calcul moyenne pour réduire le bruit + //OldALT = ALT; + if (Error==0) return ALT;//*3.28084; + return -1; +} +signed int Sansors::GetTAS(){ + float TAS_f; + unsigned int TASbrut; + unsigned int TAS10; + char Error; + Error = 0; + + addr=AdSensorTAS; + i2c_Data[0] = 0x01; // Send "read data" command to sensor + Error = i2c_->write(addr, i2c_Data, 1); // Send command string + wait_us(400); //attendre 100µS avant de relancer + Error = Error + i2c_->read(addr, i2c_Data, 2); + + TASbrut = (0xff00 & ( ((unsigned)i2c_Data[1]) << 8)) | ((unsigned char)i2c_Data[0]&0xff); + //vitesse = sqrt((float)(vbrut-offset_v)*2*3.6/1.225); + TAS_f = sqrt((float)(TASbrut-offset_TAS)*5.87755102); + TAS10 = TAS_f*10; + if (TAS10>4000)TAS10 = 0; + if (Error==0) return TAS10; + return -1; +} \ No newline at end of file
diff -r 000000000000 -r c308751fd941 SANSORS.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SANSORS.h Tue Apr 21 10:22:08 2015 +0000 @@ -0,0 +1,38 @@ +#ifndef SANSORS_H +#define SANSORS_H + +#define AdSensorCAP 0x0042 +#define AdSensorALT 0x00EC +#define AdSensorTAS 0x00EA +#define HMC6352_CONTINUOUS 0x02 +#include "mbed.h" + +class Sansors{ + public: + Sansors(PinName sda, PinName scl); + unsigned char SansorsStatus; + void CAP_ALT_TAS_Init(); + signed short GetCAP(); + signed short GetALT(); + signed int GetTAS(); + private: + I2C* i2c_; + unsigned int addr,offset_TAS; + char i2c_Data[3]; + unsigned int OldALT; +}; +#endif + + + + + + + + + + + + + + \ No newline at end of file