ahmed ahmed / CAP_ALT_TAS

Files at this revision

API Documentation at this revision

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
--- /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
--- /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