Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of BAE_hw_test1_2 by
HK.cpp
00001 #include "HK.h" 00002 #include "pin_config.h" 00003 00004 00005 //GPIO pins used=> D2-D12, A0-A1 00006 00007 DigitalOut SelectLinesA[]={PIN43,PIN44,PIN45,PIN46};//to mux1=>voltage mux , PTA 13-16 , CHNGE TO PIN43 LATER 00008 DigitalOut SelectLinesB[]={PTD3,PTC4,PTC8,PIN59};//to mux2=>current mux(differential mux) , PTB 3,7,8,9 00009 DigitalOut SelectLinesC[]={PIN64,PIN65,PIN66,PTA12};//to mux3=>temp mux PTB 18-21 00010 00011 //--------------------------------------------MSB is SelectLines[0],LSB is SelectLines[3]-------------------------------- 00012 00013 AnalogIn CurrentInput(PIN53); // Input from Current Mux PTB0 00014 AnalogIn VoltageInput(PIN54); // Input from Voltage Multiplexer PTB1 00015 AnalogIn TemperatureInput(PIN55); /*PTB2 Input from Temperature Multiplexer,thermistor Multiplexer- same multiplexer for both(lines 1-4 for thermistor,line 0 for temperature sensor)*/ 00016 00017 00018 00019 00020 int quantiz(float start,float step,float x) // accepts min and measured values and step->quantises on a scale 0-15..(4 bit quantisation) 00021 { 00022 int y=(x-start)/step; 00023 if(y<=0)y=0; 00024 if(y>=15)y=15; 00025 return y; 00026 } 00027 00028 void init_beacon(ShortBeacy* x,SensorDataQuantised y) 00029 { 00030 (*x).Voltage[0]=2;//quantised value 00031 (*x).Temp[0]=y.PanelTemperature[0];//quantised value 00032 (*x).Temp[1]=y.PanelTemperature[1];//quantised value 00033 (*x).AngularSpeed[0]=y.AngularSpeed[0]; 00034 (*x).AngularSpeed[1]=y.AngularSpeed[1]; 00035 00036 (*x).SubsystemStatus[0]=145;//dummy values----------to be changed------------------- 00037 (*x).ErrorFlag[0]=3;//dummy values----------to be changed------------------- 00038 } 00039 00040 SensorData Sensor; 00041 SensorDataQuantised SensorQuantised; 00042 ShortBeacy Shortbeacon; 00043 void FUNC_HK_MAIN() 00044 { 00045 //define structure variables 00046 00047 00048 00049 00050 //initialise all selectlines to zeroes->1st line of muxes selected 00051 SelectLinesA[0]=SelectLinesA[1]=SelectLinesA[2]=SelectLinesA[3]=0; 00052 SelectLinesB[0]=SelectLinesB[1]=SelectLinesB[2]=0; 00053 SelectLinesC[0]=SelectLinesC[1]=SelectLinesC[2]=SelectLinesC[3]=0; 00054 00055 int LoopIterator; 00056 int SelectLineIterator; 00057 00058 float resistance_thermistor,voltage_thermistor;//for thermistor 00059 00060 //measurement from voltage sensor=> 16 sensors in place 00061 for(LoopIterator=0; LoopIterator<16; LoopIterator++) 00062 { 00063 //following lines read the sensor values and stores them in 'SensorData' structure's variable 'Sensor' 00064 Sensor.Voltage[LoopIterator]=(VoltageInput.read()*3.3*5.545454);//resistors in voltage divider=>15Mohm,3.3Mohm 00065 00066 if(LoopIterator%2==0) 00067 SensorQuantised.Voltage[LoopIterator/2]=quantiz(vstart,vstep,Sensor.Voltage[LoopIterator]); 00068 00069 else 00070 SensorQuantised.Voltage[(LoopIterator)/2]=SensorQuantised.Voltage[(LoopIterator)/2]<<4+quantiz(vstart,vstep,Sensor.Voltage[LoopIterator]); 00071 00072 00073 00074 // The following lines are used to iterate the select lines from 0 to 15 00075 //following is an algorithm similar to counting binary numbers of 4 bit 00076 for(SelectLineIterator=3;SelectLineIterator>=0;SelectLineIterator--) 00077 { 00078 if(SelectLinesA[SelectLineIterator]==0) 00079 { 00080 SelectLinesA[SelectLineIterator]=1; 00081 break; 00082 } 00083 else SelectLinesA[SelectLineIterator]=0; 00084 00085 } 00086 00087 00088 wait_us(10.0); // A delay of 10 microseconds between each sensor output. Can be changed. 00089 00090 } 00091 00092 00093 00094 00095 00096 //measurement from current sensor=> 8 sensors in place 00097 00098 for(LoopIterator=0; LoopIterator<8; LoopIterator++) 00099 { 00100 //following lines read the sensor values and stores them in 'SensorData' structure variable 'Sensor' 00101 Sensor.Current[LoopIterator]=(CurrentInput.read()*3.3/(50*rsens)); 00102 if(LoopIterator%2==0) 00103 SensorQuantised.Current[LoopIterator/2]=quantiz(cstart,cstep,Sensor.Current[LoopIterator]); 00104 else 00105 SensorQuantised.Current[(LoopIterator)/2]=SensorQuantised.Current[(LoopIterator)/2]<<4+quantiz(cstart,cstep,Sensor.Current[LoopIterator]); 00106 00107 00108 // The following lines are used to iterate the select lines from 0 to 7 00109 //following is an algorithm similar to counting binary numbers of 3 bits 00110 for(SelectLineIterator=2;SelectLineIterator>=0;SelectLineIterator--) 00111 { 00112 if(SelectLinesB[SelectLineIterator]==0) 00113 { 00114 SelectLinesB[SelectLineIterator]=1; 00115 break; 00116 } 00117 else SelectLinesB[SelectLineIterator]=0; 00118 00119 } 00120 00121 00122 wait_us(10.0); // A delay of 10 microseconds between each sensor output. Can be changed. 00123 00124 } 00125 00126 00127 //measurement of temperature 00128 //temperature measurement=> 4 thermistors, 1 temperature sensor 00129 //mux line 1=>temp sensor, mux lines 2 to 5 =>thermistors 00130 00131 for(LoopIterator=0; LoopIterator<5; LoopIterator++) 00132 { 00133 00134 //following lines read the sensor values and stores them in 'SensorData' structure variable 'Sensor' 00135 Sensor.Temperature[LoopIterator]=(-90.7*3.3*TemperatureInput.read()+190.1543); 00136 voltage_thermistor=TemperatureInput.read()*3.3;//voltage across thermistor 00137 resistance_thermistor=24000*voltage_thermistor/(3.3-voltage_thermistor);//resistance of thermistor 00138 if (LoopIterator==0) 00139 { 00140 printf(" \n\rTemp =%f",-90.7*3.3*TemperatureInput.read()+190.1543); 00141 } 00142 00143 if(LoopIterator%2==0) 00144 { 00145 if(LoopIterator<1) //->corresponding to temperature sensor 00146 SensorQuantised.Temperature[(LoopIterator)/2]=quantiz(tstart,tstep,Sensor.Temperature[LoopIterator]); 00147 00148 else //->corresponding to thermistor 00149 { 00150 if(voltage_thermistor<1.378) //Temperature>12 degC 00151 Sensor.PanelTemperature[(LoopIterator-1)]=(3694/log(24.032242*resistance_thermistor)); 00152 00153 else 00154 Sensor.PanelTemperature[(LoopIterator-1)]=(3365.4792/log(7.60404*resistance_thermistor)); 00155 00156 00157 SensorQuantised.PanelTemperature[(LoopIterator-1)/2]=quantiz(tstart_thermistor,tstep_thermistor,Sensor.PanelTemperature[(LoopIterator-1)]); 00158 00159 } 00160 00161 } 00162 00163 else 00164 { 00165 if(LoopIterator<1) 00166 SensorQuantised.Temperature[(LoopIterator)/2]=SensorQuantised.Temperature[(LoopIterator)/2]<<4+quantiz(tstart,tstep,Sensor.Temperature[LoopIterator]); 00167 00168 else 00169 { 00170 if(voltage_thermistor<1.378) //Temperature>12 degC 00171 Sensor.PanelTemperature[LoopIterator-1]=(3694/log(24.032242*resistance_thermistor)); 00172 00173 00174 else 00175 Sensor.PanelTemperature[LoopIterator-1]=(3365.4792/log(7.60404*resistance_thermistor)); 00176 00177 SensorQuantised.PanelTemperature[(LoopIterator-1)/2]=SensorQuantised.PanelTemperature[(LoopIterator-1)/2]<<4+quantiz(tstart_thermistor,tstep_thermistor,Sensor.PanelTemperature[LoopIterator-1]); 00178 00179 } 00180 00181 } 00182 00183 strcpy(SensorQuantised.Voltage,"green"); 00184 00185 // The following lines are used to iterate the select lines from 0 to 4 00186 00187 //following is an algorithm similar to counting binary numbers of 4 bit 00188 for(SelectLineIterator=3;SelectLineIterator>=0;SelectLineIterator--) 00189 { 00190 if(SelectLinesC[SelectLineIterator]==0) 00191 { 00192 SelectLinesC[SelectLineIterator]=1; 00193 break; 00194 } 00195 else SelectLinesC[SelectLineIterator]=0; 00196 00197 } 00198 00199 00200 wait_us(10.0); // A delay of 10 microseconds between each sensor output. Can be changed. 00201 00202 } 00203 00204 00205 00206 00207 00208 //update magnetometer data-> 00209 //populate values in structure variable 'Sensor' from data to be given by Green 00210 SensorQuantised.AngularSpeed[0]=quantiz(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[1]); 00211 SensorQuantised.AngularSpeed[0]=SensorQuantised.AngularSpeed[0]<<4+quantiz(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[0]); 00212 SensorQuantised.AngularSpeed[1]=quantiz(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[2]); 00213 00214 //update gyro data-> 00215 //populate values in structure variable 'Sensor' from data to be given by Green 00216 SensorQuantised.Bnewvalue[0]=quantiz(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[1]); 00217 SensorQuantised.Bnewvalue[0]=SensorQuantised.Bnewvalue[0]<<4+quantiz(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[0]); 00218 SensorQuantised.Bnewvalue[1]=quantiz(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[2]); 00219 00220 00221 00222 00223 //update beacon structure 00224 init_beacon(&Shortbeacon,SensorQuantised);//Shortbeacon is passed 00225 00226 00227 } 00228 00229 00230
Generated on Mon Jul 25 2022 05:05:59 by
1.7.2
