3 формулки

Dependencies:   X_NUCLEO_IKS01A1 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /* Includes */
00002 
00003 #include "mbed.h"
00004 #include "x_nucleo_iks01a1.h"
00005 #include  "lsm6ds0_class.h"
00006 #include <stdio.h>
00007 #include <stdlib.h>
00008 #include <string.h>
00009 
00010 
00011 //------------------------------------
00012 // Hyperterminal configuration
00013 // 9600 bauds, 8-bit data, no parity
00014 //------------------------------------
00015 
00016 //Serial pc(PC_4, PC_5); //TX, RX UART !!!!!!!!
00017 Serial pc(SERIAL_TX, SERIAL_RX); //PC
00018 
00019 
00020 /* Instantiate the expansion board */
00021 static X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance(D14, D15);
00022 
00023 static HumiditySensor *humidity_sensor = mems_expansion_board->ht_sensor;
00024 static PressureSensor *pressure_sensor = mems_expansion_board->pt_sensor;
00025 static TempSensor *temp_sensor1 = mems_expansion_board->ht_sensor;
00026 static TempSensor *temp_sensor2 = mems_expansion_board->pt_sensor;
00027 
00028 
00029 void From_Pressure_mb_To_Altitude_US_Std_Atmosphere_1976_ft(float* Pressure_mb, float* Altitude_ft);
00030 void From_Temp_and_pressure_to_altitude_in_feer(float* Pressure_mb, float* temp_in_fahrenheit, float* Altitude_ft);
00031 void From_ft_To_m(float* ft, float* m);
00032 void altitude_from_press_and_presscurrent(float* Pressure_mb,float* Altitude_m);
00033 
00034 /* Helper function for printing floats & doubles */
00035 static char *printDouble(char* str, double v, int decimalDigits=2)
00036 {
00037     int i = 1;
00038     int intPart, fractPart;
00039     int len;
00040     char *ptr;
00041 
00042     /* prepare decimal digits multiplicator */
00043     for (; decimalDigits!=0; i*=10, decimalDigits--);
00044 
00045     /* calculate integer & fractinal parts */
00046     intPart = (int)v;
00047     fractPart = (int)((v-(double)(int)v)*i);
00048 
00049     /* fill in integer part */
00050     sprintf(str, "%i.", intPart);
00051 
00052     /* prepare fill in of fractional part */
00053     len = strlen(str);
00054     ptr = &str[len];
00055 
00056     /* fill in leading fractional zeros */
00057     for (i/=10; i>1; i/=10, ptr++) {
00058         if(fractPart >= i) break;
00059         *ptr = '0';
00060     }
00061 
00062     /* fill in (rest of) fractional part */
00063     sprintf(ptr, "%i", fractPart);
00064 
00065     return str;
00066 }
00067 
00068 
00069 
00070 /* Simple main function */
00071 int main()
00072 {
00073     uint8_t id;
00074     float value1, value2;
00075     char buffer1[32], buffer2[32];
00076     float Altitude_ft,Altitude_m;
00077     float m;
00078 
00079 
00080     pc.printf("\r\n--- Starting new run ---\r\n");
00081 
00082     humidity_sensor->ReadID(&id);
00083     pc.printf("HTS221  humidity & temperature    = 0x%X\r\n", id);
00084     pressure_sensor->ReadID(&id);
00085     pc.printf("LPS25H  pressure & temperature    = 0x%X\r\n", id);
00086 
00087     wait(3);
00088 
00089     while(1) {
00090         printf("\r\n");
00091 
00092         temp_sensor1->GetTemperature(&value1);
00093         humidity_sensor->GetHumidity(&value2);
00094         pc.printf("HTS221: [temp] %7s°C,   [hum] %s%%\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2));
00095 
00096         temp_sensor2->GetFahrenheit(&value1);
00097         pressure_sensor->GetPressure(&value2);
00098         pc.printf("LPS25H: [temp] %7s°F, [press] %smbar\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2));
00099        
00100         From_Pressure_mb_To_Altitude_US_Std_Atmosphere_1976_ft(&value2,&Altitude_ft);
00101         From_ft_To_m(&Altitude_ft,&m);
00102         pc.printf("LPS25H: [altitude] %7sfeet, [altitude] %smetres\r\n",printDouble(buffer1, Altitude_ft), printDouble(buffer2, m) );
00103         temp_sensor1->GetTemperature(&value1);
00104         From_Temp_and_pressure_to_altitude_in_feer(&value2, &value1, &Altitude_ft);
00105         From_ft_To_m(&Altitude_ft,&m);
00106         pc.printf("LPS25H: [altitude] %7sfeet, [altitude] %smetres\r\n",printDouble(buffer1, Altitude_ft), printDouble(buffer2, m) );
00107         altitude_from_press_and_presscurrent(&value2,&Altitude_m);
00108         pc.printf("LPS25H: [altitude] %smetres\r\n",printDouble(buffer2, Altitude_m) );
00109         pc.printf("---\r\n");
00110 
00111         wait(2);
00112     }
00113 }
00114 void altitude_from_press_and_presscurrent(float* Pressure_mb,float* Altitude_m){
00115     
00116     *Altitude_m=44330*(1-pow(*Pressure_mb/1013.25,1/5.255));
00117       
00118     }
00119 
00120 void From_Temp_and_pressure_to_altitude_in_feer(float* Pressure_mb, float* temp_in_celsius, float* Altitude_ft)
00121 {
00122     float tempf=*temp_in_celsius;
00123     float PA=*Pressure_mb;
00124     *Altitude_ft=1.24*PA + 118.8*tempf-1782;
00125     
00126 }
00127 
00128 void From_Pressure_mb_To_Altitude_US_Std_Atmosphere_1976_ft(float*
00129         Pressure_mb, float* Altitude_ft)
00130 {
00131 //=(1-(Pressure/1013.25)^0.190284)*145366.45
00132     *Altitude_ft = (1-pow(*Pressure_mb/1013.25,0.190284))*145366.45;
00133 }
00134 
00135 void From_ft_To_m(float* ft, float* m)
00136 {
00137     //=feet/3.280839895
00138     *m = *ft/3.280839895;
00139 }