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 MicroteslameterV2 by
main.cpp@1:50fbbe10dea4, 2017-08-21 (annotated)
- Committer:
- zbobze
- Date:
- Mon Aug 21 13:50:02 2017 +0000
- Revision:
- 1:50fbbe10dea4
- Parent:
- 0:d35d9bdef147
program designed to be implemented on the Mlx MBed for remote tesla meter.
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| odu | 0:d35d9bdef147 | 1 | #include "mbed.h" | 
| odu | 0:d35d9bdef147 | 2 | #include "C12832.h" | 
| odu | 0:d35d9bdef147 | 3 | #include "microteslameter.h" | 
| odu | 0:d35d9bdef147 | 4 | #include "MLX90393.h" | 
| odu | 0:d35d9bdef147 | 5 | #define FIELD_LIMIT 100 | 
| odu | 0:d35d9bdef147 | 6 | |
| zbobze | 1:50fbbe10dea4 | 7 | |
| zbobze | 1:50fbbe10dea4 | 8 | |
| zbobze | 1:50fbbe10dea4 | 9 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 10 | // Global variable: | 
| zbobze | 1:50fbbe10dea4 | 11 | //****************************************************************************************************************** | 
| odu | 0:d35d9bdef147 | 12 | |
| zbobze | 1:50fbbe10dea4 | 13 | DigitalOut LedRGR(p9); | 
| zbobze | 1:50fbbe10dea4 | 14 | DigitalOut LedRGG(p10); | 
| zbobze | 1:50fbbe10dea4 | 15 | DigitalOut LedG1(p17); | 
| zbobze | 1:50fbbe10dea4 | 16 | DigitalOut LedG2(p18); | 
| zbobze | 1:50fbbe10dea4 | 17 | DigitalOut LedG3(p19); | 
| zbobze | 1:50fbbe10dea4 | 18 | DigitalOut LedG4(p20); | 
| zbobze | 1:50fbbe10dea4 | 19 | DigitalOut LedG5(p21); | 
| zbobze | 1:50fbbe10dea4 | 20 | DigitalOut LedG6(p22); | 
| zbobze | 1:50fbbe10dea4 | 21 | DigitalOut LedG7(p23); | 
| zbobze | 1:50fbbe10dea4 | 22 | DigitalOut LedR1(p24); | 
| zbobze | 1:50fbbe10dea4 | 23 | DigitalOut LedR2(p25); | 
| zbobze | 1:50fbbe10dea4 | 24 | DigitalOut LedR3(p26); | 
| zbobze | 1:50fbbe10dea4 | 25 | |
| zbobze | 1:50fbbe10dea4 | 26 | AnalogIn BatteryVolt(p15); // analog input on p15 for getting Battery level | 
| odu | 0:d35d9bdef147 | 27 | C12832 lcd(p5, p7, p6, p8, p11); //define pin for LCD screen | 
| zbobze | 1:50fbbe10dea4 | 28 | |
| zbobze | 1:50fbbe10dea4 | 29 | |
| odu | 0:d35d9bdef147 | 30 | InterruptIn button(p14); // button used for zeroing - joystick | 
| zbobze | 1:50fbbe10dea4 | 31 | InterruptIn button2(p12); // button used for change Display on screen | 
| zbobze | 1:50fbbe10dea4 | 32 | InterruptIn button3(p13); | 
| odu | 0:d35d9bdef147 | 33 | I2C i2c(p28, p27); | 
| odu | 0:d35d9bdef147 | 34 | Serial pc(USBTX, USBRX); | 
| odu | 0:d35d9bdef147 | 35 | Timeout to1; // timeer... | 
| odu | 0:d35d9bdef147 | 36 | MLX90393 sensor(MLX90393::i2c_address,&i2c); | 
| odu | 0:d35d9bdef147 | 37 | |
| odu | 0:d35d9bdef147 | 38 | float CorrX,CorrY,CorrZ; | 
| zbobze | 1:50fbbe10dea4 | 39 | bool Led_on = false; | 
| zbobze | 1:50fbbe10dea4 | 40 | bool Blink_started = false; | 
| zbobze | 1:50fbbe10dea4 | 41 | bool CleanScreen = false; | 
| zbobze | 1:50fbbe10dea4 | 42 | bool IsConnected = true; | 
| zbobze | 1:50fbbe10dea4 | 43 | int ScreenDisplay = 1; | 
| zbobze | 1:50fbbe10dea4 | 44 | int const NbValHist=5; | 
| zbobze | 1:50fbbe10dea4 | 45 | float SaveData[NbValHist]; | 
| zbobze | 1:50fbbe10dea4 | 46 | int DataTable (0); | 
| zbobze | 1:50fbbe10dea4 | 47 | float modulus; | 
| odu | 0:d35d9bdef147 | 48 | |
| odu | 0:d35d9bdef147 | 49 | |
| odu | 0:d35d9bdef147 | 50 | |
| zbobze | 1:50fbbe10dea4 | 51 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 52 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 53 | // Begining of the Main function | 
| zbobze | 1:50fbbe10dea4 | 54 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 55 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 56 | |
| zbobze | 1:50fbbe10dea4 | 57 | |
| odu | 0:d35d9bdef147 | 58 | int main() | 
| odu | 0:d35d9bdef147 | 59 | { | 
| zbobze | 1:50fbbe10dea4 | 60 | float X,Y,Z,T,X2,Y2,Z2,BatLevel; | 
| odu | 0:d35d9bdef147 | 61 | int content_buffer[63]; | 
| odu | 0:d35d9bdef147 | 62 | char read_buffer[11]; | 
| zbobze | 1:50fbbe10dea4 | 63 | |
| odu | 0:d35d9bdef147 | 64 | init(); | 
| zbobze | 1:50fbbe10dea4 | 65 | // Wake up Messages | 
| zbobze | 1:50fbbe10dea4 | 66 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 67 | |
| odu | 0:d35d9bdef147 | 68 | lcd.cls(); // clean screen | 
| zbobze | 1:50fbbe10dea4 | 69 | lcd.locate(0,12); | 
| zbobze | 1:50fbbe10dea4 | 70 | lcd.printf("Micro Tesla Meter"); | 
| zbobze | 1:50fbbe10dea4 | 71 | wait(1.5); | 
| zbobze | 1:50fbbe10dea4 | 72 | lcd.cls(); | 
| zbobze | 1:50fbbe10dea4 | 73 | // interruption Button for zeroing and choice of display | 
| zbobze | 1:50fbbe10dea4 | 74 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 75 | |
| zbobze | 1:50fbbe10dea4 | 76 | |
| zbobze | 1:50fbbe10dea4 | 77 | button.rise(&startZeroing); //link button on the joystick with the start of zeroing | 
| zbobze | 1:50fbbe10dea4 | 78 | button2.rise(&changeDisplay); | 
| zbobze | 1:50fbbe10dea4 | 79 | button3.rise(&saveData); | 
| zbobze | 1:50fbbe10dea4 | 80 | |
| zbobze | 1:50fbbe10dea4 | 81 | lcd.cls(); | 
| zbobze | 1:50fbbe10dea4 | 82 | updateLCD_2(X,Y,Z,modulus); //Display the opperator mode ( default) | 
| zbobze | 1:50fbbe10dea4 | 83 | |
| zbobze | 1:50fbbe10dea4 | 84 | |
| zbobze | 1:50fbbe10dea4 | 85 | // Get and display on led the level of the battery | 
| zbobze | 1:50fbbe10dea4 | 86 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 87 | BatLevel = BatteryVolt.read(); | 
| zbobze | 1:50fbbe10dea4 | 88 | if (BatLevel> 0.77) | 
| zbobze | 1:50fbbe10dea4 | 89 | { | 
| zbobze | 1:50fbbe10dea4 | 90 | LedRGR = 0; | 
| zbobze | 1:50fbbe10dea4 | 91 | LedRGG = 1; | 
| zbobze | 1:50fbbe10dea4 | 92 | } | 
| zbobze | 1:50fbbe10dea4 | 93 | else | 
| zbobze | 1:50fbbe10dea4 | 94 | { | 
| zbobze | 1:50fbbe10dea4 | 95 | LedRGR = 1; | 
| zbobze | 1:50fbbe10dea4 | 96 | LedRGG = 0; | 
| zbobze | 1:50fbbe10dea4 | 97 | } | 
| zbobze | 1:50fbbe10dea4 | 98 | |
| zbobze | 1:50fbbe10dea4 | 99 | |
| zbobze | 1:50fbbe10dea4 | 100 | |
| zbobze | 1:50fbbe10dea4 | 101 | |
| odu | 0:d35d9bdef147 | 102 | pc.printf("Microteslameter"); | 
| odu | 0:d35d9bdef147 | 103 | if(0)//activate deactivate memory dump | 
| odu | 0:d35d9bdef147 | 104 | { | 
| odu | 0:d35d9bdef147 | 105 | pc.printf("Memory dump at startup: \n"); | 
| odu | 0:d35d9bdef147 | 106 | for (int i = 0; i<63; i++) { | 
| odu | 0:d35d9bdef147 | 107 | sensor.RR(read_buffer,i,0); | 
| odu | 0:d35d9bdef147 | 108 | content_buffer[i] = (read_buffer[0]*65536)+(read_buffer[1]*256) + read_buffer[2]; | 
| odu | 0:d35d9bdef147 | 109 | } | 
| odu | 0:d35d9bdef147 | 110 | for (int i = 0; i<63; i++) { | 
| odu | 0:d35d9bdef147 | 111 | pc.printf("%i \n",content_buffer[i]); | 
| odu | 0:d35d9bdef147 | 112 | } | 
| odu | 0:d35d9bdef147 | 113 | } | 
| odu | 0:d35d9bdef147 | 114 | //sensor.WR(read_buffer, 2, 2016, 0); //put DIF_FILT at max | 
| zbobze | 1:50fbbe10dea4 | 115 | |
| zbobze | 1:50fbbe10dea4 | 116 | |
| zbobze | 1:50fbbe10dea4 | 117 | |
| zbobze | 1:50fbbe10dea4 | 118 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 119 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 120 | // Begining of the infinite loop | 
| zbobze | 1:50fbbe10dea4 | 121 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 122 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 123 | |
| odu | 0:d35d9bdef147 | 124 | while(1) | 
| odu | 0:d35d9bdef147 | 125 | { | 
| odu | 0:d35d9bdef147 | 126 | //X=p1.read()*200; //use potentiometer for debug | 
| odu | 0:d35d9bdef147 | 127 | //Y=0; | 
| odu | 0:d35d9bdef147 | 128 | //Z=0; | 
| zbobze | 1:50fbbe10dea4 | 129 | |
| zbobze | 1:50fbbe10dea4 | 130 | // Get and display on led the level of the battery | 
| zbobze | 1:50fbbe10dea4 | 131 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 132 | BatLevel = BatteryVolt.read(); | 
| zbobze | 1:50fbbe10dea4 | 133 | if (BatLevel> 0.77) | 
| zbobze | 1:50fbbe10dea4 | 134 | { | 
| zbobze | 1:50fbbe10dea4 | 135 | LedRGR = 0; | 
| zbobze | 1:50fbbe10dea4 | 136 | LedRGG = 1; | 
| zbobze | 1:50fbbe10dea4 | 137 | } | 
| zbobze | 1:50fbbe10dea4 | 138 | else | 
| zbobze | 1:50fbbe10dea4 | 139 | { | 
| zbobze | 1:50fbbe10dea4 | 140 | LedRGR = 1; | 
| zbobze | 1:50fbbe10dea4 | 141 | LedRGG = 0; | 
| zbobze | 1:50fbbe10dea4 | 142 | } | 
| zbobze | 1:50fbbe10dea4 | 143 | |
| zbobze | 1:50fbbe10dea4 | 144 | // Get measurement of the tesla sensor | 
| zbobze | 1:50fbbe10dea4 | 145 | //****************************************************************************************************************** | 
| odu | 0:d35d9bdef147 | 146 | MeasureXYZT(&X,&Y,&Z,&T); | 
| odu | 0:d35d9bdef147 | 147 | CorrectXYZ(&X,&Y,&Z); // correct for zeroing and convert LSB in uT | 
| odu | 0:d35d9bdef147 | 148 | modulus=calculateModulus(X,Y,Z); | 
| zbobze | 1:50fbbe10dea4 | 149 | IsConnected = isConnected(&X,&Y ,&Z, &X2,&Y2,&Z2); // verifie if the sensor is or insnt connected | 
| odu | 0:d35d9bdef147 | 150 | //--------------- interface---------------- | 
| zbobze | 1:50fbbe10dea4 | 151 | setColor(normalize(modulus)); // display the correct Led value | 
| zbobze | 1:50fbbe10dea4 | 152 | //lcd.printf("%f ",BatLevel); // debug purpose | 
| zbobze | 1:50fbbe10dea4 | 153 | if (IsConnected) | 
| zbobze | 1:50fbbe10dea4 | 154 | { | 
| zbobze | 1:50fbbe10dea4 | 155 | |
| zbobze | 1:50fbbe10dea4 | 156 | if ( ScreenDisplay == 0) | 
| zbobze | 1:50fbbe10dea4 | 157 | { | 
| zbobze | 1:50fbbe10dea4 | 158 | updateLCD_1(X,Y,Z,modulus); | 
| zbobze | 1:50fbbe10dea4 | 159 | } | 
| zbobze | 1:50fbbe10dea4 | 160 | else if (ScreenDisplay == 1) | 
| zbobze | 1:50fbbe10dea4 | 161 | { | 
| zbobze | 1:50fbbe10dea4 | 162 | updateLCD_2(X,Y,Z,modulus); | 
| zbobze | 1:50fbbe10dea4 | 163 | } | 
| zbobze | 1:50fbbe10dea4 | 164 | else if (ScreenDisplay == 2) | 
| zbobze | 1:50fbbe10dea4 | 165 | { | 
| zbobze | 1:50fbbe10dea4 | 166 | updateLCD_3(SaveData[0],SaveData[1],SaveData[2],modulus); | 
| zbobze | 1:50fbbe10dea4 | 167 | //updateLCD_2(X,Y,Z,modulus); | 
| zbobze | 1:50fbbe10dea4 | 168 | } | 
| zbobze | 1:50fbbe10dea4 | 169 | |
| zbobze | 1:50fbbe10dea4 | 170 | //lcd.printf("isConnected"); | 
| zbobze | 1:50fbbe10dea4 | 171 | } | 
| zbobze | 1:50fbbe10dea4 | 172 | else | 
| zbobze | 1:50fbbe10dea4 | 173 | { | 
| zbobze | 1:50fbbe10dea4 | 174 | lcd.cls(); | 
| zbobze | 1:50fbbe10dea4 | 175 | lcd.locate(0,12); | 
| zbobze | 1:50fbbe10dea4 | 176 | lcd.printf(" the sensor isn't well connected"); | 
| zbobze | 1:50fbbe10dea4 | 177 | lcd.cls(); | 
| zbobze | 1:50fbbe10dea4 | 178 | //lcd.printf("isntConnected"); | 
| zbobze | 1:50fbbe10dea4 | 179 | |
| zbobze | 1:50fbbe10dea4 | 180 | |
| zbobze | 1:50fbbe10dea4 | 181 | } | 
| zbobze | 1:50fbbe10dea4 | 182 | pc.printf("T= %f,X= %f, Y= %f, Z= %f\n",T,X,Y,Z); | 
| zbobze | 1:50fbbe10dea4 | 183 | |
| odu | 0:d35d9bdef147 | 184 | } | 
| odu | 0:d35d9bdef147 | 185 | } | 
| odu | 0:d35d9bdef147 | 186 | |
| odu | 0:d35d9bdef147 | 187 | |
| zbobze | 1:50fbbe10dea4 | 188 | |
| zbobze | 1:50fbbe10dea4 | 189 | |
| zbobze | 1:50fbbe10dea4 | 190 | |
| zbobze | 1:50fbbe10dea4 | 191 | |
| zbobze | 1:50fbbe10dea4 | 192 | |
| zbobze | 1:50fbbe10dea4 | 193 | |
| zbobze | 1:50fbbe10dea4 | 194 | |
| zbobze | 1:50fbbe10dea4 | 195 | //Function init the variable | 
| zbobze | 1:50fbbe10dea4 | 196 | //****************************************************************************************************************** | 
| odu | 0:d35d9bdef147 | 197 | void init(void) | 
| odu | 0:d35d9bdef147 | 198 | { | 
| zbobze | 1:50fbbe10dea4 | 199 | LedG1 =0; | 
| zbobze | 1:50fbbe10dea4 | 200 | LedG2 =0; | 
| zbobze | 1:50fbbe10dea4 | 201 | LedG3 =0; | 
| zbobze | 1:50fbbe10dea4 | 202 | LedG4 =0; | 
| zbobze | 1:50fbbe10dea4 | 203 | LedG5 =0; | 
| zbobze | 1:50fbbe10dea4 | 204 | LedG6 =0; | 
| zbobze | 1:50fbbe10dea4 | 205 | LedG7 =0; | 
| zbobze | 1:50fbbe10dea4 | 206 | LedR1 =0; | 
| zbobze | 1:50fbbe10dea4 | 207 | LedR2 =0; | 
| zbobze | 1:50fbbe10dea4 | 208 | LedR3 =0; | 
| zbobze | 1:50fbbe10dea4 | 209 | |
| zbobze | 1:50fbbe10dea4 | 210 | |
| odu | 0:d35d9bdef147 | 211 | i2c.frequency(7000); | 
| odu | 0:d35d9bdef147 | 212 | } | 
| odu | 0:d35d9bdef147 | 213 | |
| zbobze | 1:50fbbe10dea4 | 214 | //Function detecting if the sensor is or isnt connected | 
| zbobze | 1:50fbbe10dea4 | 215 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 216 | |
| zbobze | 1:50fbbe10dea4 | 217 | bool isConnected (float *X, float *Y,float *Z,float *X2, float *Y2,float *Z2) | 
| zbobze | 1:50fbbe10dea4 | 218 | { | 
| zbobze | 1:50fbbe10dea4 | 219 | float DiffX,DiffY, DiffZ; | 
| zbobze | 1:50fbbe10dea4 | 220 | bool isConnected; | 
| zbobze | 1:50fbbe10dea4 | 221 | |
| zbobze | 1:50fbbe10dea4 | 222 | DiffX = (*X)-(*X2); | 
| zbobze | 1:50fbbe10dea4 | 223 | DiffY = (*Y)-(*Y2); | 
| zbobze | 1:50fbbe10dea4 | 224 | DiffZ = (*Z)-(*Z2); | 
| zbobze | 1:50fbbe10dea4 | 225 | |
| zbobze | 1:50fbbe10dea4 | 226 | /*lcd.cls(); | 
| zbobze | 1:50fbbe10dea4 | 227 | lcd.locate(0,0); | 
| zbobze | 1:50fbbe10dea4 | 228 | lcd.printf("X= %4.1fuT",DiffX); | 
| zbobze | 1:50fbbe10dea4 | 229 | lcd.locate(0,10); | 
| zbobze | 1:50fbbe10dea4 | 230 | lcd.printf("Y= %4.1fuT",DiffY); | 
| zbobze | 1:50fbbe10dea4 | 231 | lcd.locate(0,20); | 
| zbobze | 1:50fbbe10dea4 | 232 | lcd.printf("Z= %4.1fuT",DiffZ); | 
| zbobze | 1:50fbbe10dea4 | 233 | */ | 
| zbobze | 1:50fbbe10dea4 | 234 | if (DiffX > 1000 || DiffY > 1000 || DiffZ > 1000) | 
| zbobze | 1:50fbbe10dea4 | 235 | { | 
| zbobze | 1:50fbbe10dea4 | 236 | isConnected = false; | 
| zbobze | 1:50fbbe10dea4 | 237 | } | 
| zbobze | 1:50fbbe10dea4 | 238 | else | 
| zbobze | 1:50fbbe10dea4 | 239 | { | 
| zbobze | 1:50fbbe10dea4 | 240 | isConnected = true; | 
| zbobze | 1:50fbbe10dea4 | 241 | } | 
| zbobze | 1:50fbbe10dea4 | 242 | *X2 = *X; | 
| zbobze | 1:50fbbe10dea4 | 243 | *Y2 = *Y; | 
| zbobze | 1:50fbbe10dea4 | 244 | *Z2 = *Z; | 
| zbobze | 1:50fbbe10dea4 | 245 | return isConnected; | 
| zbobze | 1:50fbbe10dea4 | 246 | } | 
| zbobze | 1:50fbbe10dea4 | 247 | |
| odu | 0:d35d9bdef147 | 248 | |
| zbobze | 1:50fbbe10dea4 | 249 | void setColor(int intensity) // Display the corresponding Leds | 
| odu | 0:d35d9bdef147 | 250 | { | 
| zbobze | 1:50fbbe10dea4 | 251 | if (IsConnected) | 
| odu | 0:d35d9bdef147 | 252 | { | 
| zbobze | 1:50fbbe10dea4 | 253 | to1.detach(); | 
| zbobze | 1:50fbbe10dea4 | 254 | Blink_started=false; | 
| zbobze | 1:50fbbe10dea4 | 255 | if(intensity<=10) //if intensity if greater than 100 blink the led in red | 
| zbobze | 1:50fbbe10dea4 | 256 | { | 
| zbobze | 1:50fbbe10dea4 | 257 | LedG1 =1; | 
| zbobze | 1:50fbbe10dea4 | 258 | LedG2 =0; | 
| zbobze | 1:50fbbe10dea4 | 259 | LedG3 =0; | 
| zbobze | 1:50fbbe10dea4 | 260 | LedG4 =0; | 
| zbobze | 1:50fbbe10dea4 | 261 | LedG5 =0; | 
| zbobze | 1:50fbbe10dea4 | 262 | LedG6 =0; | 
| zbobze | 1:50fbbe10dea4 | 263 | LedG7 =0; | 
| zbobze | 1:50fbbe10dea4 | 264 | LedR1 =0; | 
| zbobze | 1:50fbbe10dea4 | 265 | LedR2 =0; | 
| zbobze | 1:50fbbe10dea4 | 266 | LedR3 =0; | 
| zbobze | 1:50fbbe10dea4 | 267 | } | 
| zbobze | 1:50fbbe10dea4 | 268 | else if (intensity<=20) | 
| zbobze | 1:50fbbe10dea4 | 269 | { | 
| zbobze | 1:50fbbe10dea4 | 270 | LedG1 =1; | 
| zbobze | 1:50fbbe10dea4 | 271 | LedG2 =1; | 
| zbobze | 1:50fbbe10dea4 | 272 | LedG3 =0; | 
| zbobze | 1:50fbbe10dea4 | 273 | LedG4 =0; | 
| zbobze | 1:50fbbe10dea4 | 274 | LedG5 =0; | 
| zbobze | 1:50fbbe10dea4 | 275 | LedG6 =0; | 
| zbobze | 1:50fbbe10dea4 | 276 | LedG7 =0; | 
| zbobze | 1:50fbbe10dea4 | 277 | LedR1 =0; | 
| zbobze | 1:50fbbe10dea4 | 278 | LedR2 =0; | 
| zbobze | 1:50fbbe10dea4 | 279 | LedR3 =0; | 
| zbobze | 1:50fbbe10dea4 | 280 | } | 
| zbobze | 1:50fbbe10dea4 | 281 | else if (intensity<=30) | 
| zbobze | 1:50fbbe10dea4 | 282 | { | 
| zbobze | 1:50fbbe10dea4 | 283 | LedG1 =1; | 
| zbobze | 1:50fbbe10dea4 | 284 | LedG2 =1; | 
| zbobze | 1:50fbbe10dea4 | 285 | LedG3 =0; | 
| zbobze | 1:50fbbe10dea4 | 286 | LedG4 =0; | 
| zbobze | 1:50fbbe10dea4 | 287 | LedG5 =0; | 
| zbobze | 1:50fbbe10dea4 | 288 | LedG6 =0; | 
| zbobze | 1:50fbbe10dea4 | 289 | LedG7 =0; | 
| zbobze | 1:50fbbe10dea4 | 290 | LedR1 =0; | 
| zbobze | 1:50fbbe10dea4 | 291 | LedR2 =0; | 
| zbobze | 1:50fbbe10dea4 | 292 | LedR3 =0; | 
| zbobze | 1:50fbbe10dea4 | 293 | } | 
| zbobze | 1:50fbbe10dea4 | 294 | else if (intensity<=40) | 
| zbobze | 1:50fbbe10dea4 | 295 | { | 
| zbobze | 1:50fbbe10dea4 | 296 | LedG1 =1; | 
| zbobze | 1:50fbbe10dea4 | 297 | LedG2 =1; | 
| zbobze | 1:50fbbe10dea4 | 298 | LedG3 =1; | 
| zbobze | 1:50fbbe10dea4 | 299 | LedG4 =0; | 
| zbobze | 1:50fbbe10dea4 | 300 | LedG5 =0; | 
| zbobze | 1:50fbbe10dea4 | 301 | LedG6 =0; | 
| zbobze | 1:50fbbe10dea4 | 302 | LedG7 =0; | 
| zbobze | 1:50fbbe10dea4 | 303 | LedR1 =0; | 
| zbobze | 1:50fbbe10dea4 | 304 | LedR2 =0; | 
| zbobze | 1:50fbbe10dea4 | 305 | LedR3 =0; | 
| zbobze | 1:50fbbe10dea4 | 306 | } | 
| zbobze | 1:50fbbe10dea4 | 307 | else if (intensity<=50) | 
| zbobze | 1:50fbbe10dea4 | 308 | { | 
| zbobze | 1:50fbbe10dea4 | 309 | LedG1 =1; | 
| zbobze | 1:50fbbe10dea4 | 310 | LedG2 =1; | 
| zbobze | 1:50fbbe10dea4 | 311 | LedG3 =1; | 
| zbobze | 1:50fbbe10dea4 | 312 | LedG4 =1; | 
| zbobze | 1:50fbbe10dea4 | 313 | LedG5 =0; | 
| zbobze | 1:50fbbe10dea4 | 314 | LedG6 =0; | 
| zbobze | 1:50fbbe10dea4 | 315 | LedG7 =0; | 
| zbobze | 1:50fbbe10dea4 | 316 | LedR1 =0; | 
| zbobze | 1:50fbbe10dea4 | 317 | LedR2 =0; | 
| zbobze | 1:50fbbe10dea4 | 318 | LedR3 =0; | 
| zbobze | 1:50fbbe10dea4 | 319 | } | 
| zbobze | 1:50fbbe10dea4 | 320 | else if (intensity<=60) | 
| zbobze | 1:50fbbe10dea4 | 321 | { | 
| zbobze | 1:50fbbe10dea4 | 322 | LedG1 =1; | 
| zbobze | 1:50fbbe10dea4 | 323 | LedG2 =1; | 
| zbobze | 1:50fbbe10dea4 | 324 | LedG3 =1; | 
| zbobze | 1:50fbbe10dea4 | 325 | LedG4 =1; | 
| zbobze | 1:50fbbe10dea4 | 326 | LedG5 =1; | 
| zbobze | 1:50fbbe10dea4 | 327 | LedG6 =0; | 
| zbobze | 1:50fbbe10dea4 | 328 | LedG7 =0; | 
| zbobze | 1:50fbbe10dea4 | 329 | LedR1 =0; | 
| zbobze | 1:50fbbe10dea4 | 330 | LedR2 =0; | 
| zbobze | 1:50fbbe10dea4 | 331 | LedR3 =0; | 
| zbobze | 1:50fbbe10dea4 | 332 | } | 
| zbobze | 1:50fbbe10dea4 | 333 | else if (intensity<=70) | 
| zbobze | 1:50fbbe10dea4 | 334 | { | 
| zbobze | 1:50fbbe10dea4 | 335 | LedG1 =1; | 
| zbobze | 1:50fbbe10dea4 | 336 | LedG2 =1; | 
| zbobze | 1:50fbbe10dea4 | 337 | LedG3 =1; | 
| zbobze | 1:50fbbe10dea4 | 338 | LedG4 =1; | 
| zbobze | 1:50fbbe10dea4 | 339 | LedG5 =1; | 
| zbobze | 1:50fbbe10dea4 | 340 | LedG6 =1; | 
| zbobze | 1:50fbbe10dea4 | 341 | LedG7 =0; | 
| zbobze | 1:50fbbe10dea4 | 342 | LedR1 =0; | 
| zbobze | 1:50fbbe10dea4 | 343 | LedR2 =0; | 
| zbobze | 1:50fbbe10dea4 | 344 | LedR3 =0; | 
| zbobze | 1:50fbbe10dea4 | 345 | } | 
| zbobze | 1:50fbbe10dea4 | 346 | else if (intensity<=80) | 
| zbobze | 1:50fbbe10dea4 | 347 | { | 
| zbobze | 1:50fbbe10dea4 | 348 | LedG1 =1; | 
| zbobze | 1:50fbbe10dea4 | 349 | LedG2 =1; | 
| zbobze | 1:50fbbe10dea4 | 350 | LedG3 =1; | 
| zbobze | 1:50fbbe10dea4 | 351 | LedG4 =1; | 
| zbobze | 1:50fbbe10dea4 | 352 | LedG5 =1; | 
| zbobze | 1:50fbbe10dea4 | 353 | LedG6 =1; | 
| zbobze | 1:50fbbe10dea4 | 354 | LedG7 =1; | 
| zbobze | 1:50fbbe10dea4 | 355 | LedR1 =0; | 
| zbobze | 1:50fbbe10dea4 | 356 | LedR2 =0; | 
| zbobze | 1:50fbbe10dea4 | 357 | LedR3 =0; | 
| zbobze | 1:50fbbe10dea4 | 358 | } | 
| zbobze | 1:50fbbe10dea4 | 359 | else if (intensity<=90) | 
| zbobze | 1:50fbbe10dea4 | 360 | { | 
| zbobze | 1:50fbbe10dea4 | 361 | LedG1 =1; | 
| zbobze | 1:50fbbe10dea4 | 362 | LedG2 =1; | 
| zbobze | 1:50fbbe10dea4 | 363 | LedG3 =1; | 
| zbobze | 1:50fbbe10dea4 | 364 | LedG4 =1; | 
| zbobze | 1:50fbbe10dea4 | 365 | LedG5 =1; | 
| zbobze | 1:50fbbe10dea4 | 366 | LedG6 =1; | 
| zbobze | 1:50fbbe10dea4 | 367 | LedG7 =1; | 
| zbobze | 1:50fbbe10dea4 | 368 | LedR1 =1; | 
| zbobze | 1:50fbbe10dea4 | 369 | LedR2 =0; | 
| zbobze | 1:50fbbe10dea4 | 370 | LedR3 =0; | 
| zbobze | 1:50fbbe10dea4 | 371 | } | 
| zbobze | 1:50fbbe10dea4 | 372 | else if (intensity<=100) | 
| zbobze | 1:50fbbe10dea4 | 373 | { | 
| zbobze | 1:50fbbe10dea4 | 374 | LedG1 =1; | 
| zbobze | 1:50fbbe10dea4 | 375 | LedG2 =1; | 
| zbobze | 1:50fbbe10dea4 | 376 | LedG2 =1; | 
| zbobze | 1:50fbbe10dea4 | 377 | LedG3 =1; | 
| zbobze | 1:50fbbe10dea4 | 378 | LedG4 =1; | 
| zbobze | 1:50fbbe10dea4 | 379 | LedG5 =1; | 
| zbobze | 1:50fbbe10dea4 | 380 | LedG6 =1; | 
| zbobze | 1:50fbbe10dea4 | 381 | LedG7 =1; | 
| zbobze | 1:50fbbe10dea4 | 382 | LedR1 =1; | 
| zbobze | 1:50fbbe10dea4 | 383 | LedR2 =1; | 
| zbobze | 1:50fbbe10dea4 | 384 | LedR3 =0; | 
| zbobze | 1:50fbbe10dea4 | 385 | } | 
| zbobze | 1:50fbbe10dea4 | 386 | else { | 
| zbobze | 1:50fbbe10dea4 | 387 | LedG1 =1; | 
| zbobze | 1:50fbbe10dea4 | 388 | LedG2 =1; | 
| zbobze | 1:50fbbe10dea4 | 389 | LedG3 =1; | 
| zbobze | 1:50fbbe10dea4 | 390 | LedG4 =1; | 
| zbobze | 1:50fbbe10dea4 | 391 | LedG5 =1; | 
| zbobze | 1:50fbbe10dea4 | 392 | LedG6 =1; | 
| zbobze | 1:50fbbe10dea4 | 393 | LedG7 =1; | 
| zbobze | 1:50fbbe10dea4 | 394 | LedR1 =1; | 
| zbobze | 1:50fbbe10dea4 | 395 | LedR2 =1; | 
| zbobze | 1:50fbbe10dea4 | 396 | LedR3 =1; | 
| zbobze | 1:50fbbe10dea4 | 397 | } | 
| odu | 0:d35d9bdef147 | 398 | } | 
| odu | 0:d35d9bdef147 | 399 | else | 
| odu | 0:d35d9bdef147 | 400 | { | 
| zbobze | 1:50fbbe10dea4 | 401 | if(Blink_started==false) to1.attach(&blink, 0.2); | 
| odu | 0:d35d9bdef147 | 402 | } | 
| zbobze | 1:50fbbe10dea4 | 403 | |
| zbobze | 1:50fbbe10dea4 | 404 | |
| zbobze | 1:50fbbe10dea4 | 405 | |
| odu | 0:d35d9bdef147 | 406 | } | 
| odu | 0:d35d9bdef147 | 407 | |
| zbobze | 1:50fbbe10dea4 | 408 | //LCD Display options | 
| zbobze | 1:50fbbe10dea4 | 409 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 410 | void changeDisplay() | 
| odu | 0:d35d9bdef147 | 411 | { | 
| zbobze | 1:50fbbe10dea4 | 412 | if ( ScreenDisplay == 0) | 
| zbobze | 1:50fbbe10dea4 | 413 | { | 
| zbobze | 1:50fbbe10dea4 | 414 | ScreenDisplay = 1 ; | 
| zbobze | 1:50fbbe10dea4 | 415 | lcd.cls(); | 
| zbobze | 1:50fbbe10dea4 | 416 | lcd.locate(0,14); | 
| zbobze | 1:50fbbe10dea4 | 417 | lcd.printf("Display opperator mode"); | 
| zbobze | 1:50fbbe10dea4 | 418 | wait(1.5); | 
| zbobze | 1:50fbbe10dea4 | 419 | } | 
| zbobze | 1:50fbbe10dea4 | 420 | else if ( ScreenDisplay == 1 ) | 
| zbobze | 1:50fbbe10dea4 | 421 | { | 
| zbobze | 1:50fbbe10dea4 | 422 | ScreenDisplay = 2; | 
| zbobze | 1:50fbbe10dea4 | 423 | lcd.cls(); | 
| zbobze | 1:50fbbe10dea4 | 424 | lcd.locate(0,14); | 
| zbobze | 1:50fbbe10dea4 | 425 | lcd.printf("Display Historical mode"); | 
| zbobze | 1:50fbbe10dea4 | 426 | wait(1.5); | 
| zbobze | 1:50fbbe10dea4 | 427 | } | 
| zbobze | 1:50fbbe10dea4 | 428 | else if ( ScreenDisplay == 2 ) | 
| zbobze | 1:50fbbe10dea4 | 429 | { | 
| zbobze | 1:50fbbe10dea4 | 430 | ScreenDisplay = 0; | 
| zbobze | 1:50fbbe10dea4 | 431 | lcd.cls(); | 
| zbobze | 1:50fbbe10dea4 | 432 | lcd.locate(0,14); | 
| zbobze | 1:50fbbe10dea4 | 433 | lcd.printf("Display debugger mode"); | 
| zbobze | 1:50fbbe10dea4 | 434 | wait(1.5); | 
| zbobze | 1:50fbbe10dea4 | 435 | } | 
| zbobze | 1:50fbbe10dea4 | 436 | CleanScreen = true; | 
| zbobze | 1:50fbbe10dea4 | 437 | } | 
| zbobze | 1:50fbbe10dea4 | 438 | |
| zbobze | 1:50fbbe10dea4 | 439 | void saveData() | 
| zbobze | 1:50fbbe10dea4 | 440 | { | 
| zbobze | 1:50fbbe10dea4 | 441 | SaveData[DataTable] = modulus; | 
| zbobze | 1:50fbbe10dea4 | 442 | |
| zbobze | 1:50fbbe10dea4 | 443 | switch (DataTable){ | 
| zbobze | 1:50fbbe10dea4 | 444 | |
| zbobze | 1:50fbbe10dea4 | 445 | case 0 : //or 3 or 4: change for bigger screen | 
| zbobze | 1:50fbbe10dea4 | 446 | DataTable++; | 
| zbobze | 1:50fbbe10dea4 | 447 | break; | 
| zbobze | 1:50fbbe10dea4 | 448 | |
| zbobze | 1:50fbbe10dea4 | 449 | case 1 : //or 3 or 4: change for bigger screen | 
| zbobze | 1:50fbbe10dea4 | 450 | DataTable++; | 
| zbobze | 1:50fbbe10dea4 | 451 | break; | 
| zbobze | 1:50fbbe10dea4 | 452 | |
| zbobze | 1:50fbbe10dea4 | 453 | case 2 : //or 3 or 4: change for bigger screen | 
| zbobze | 1:50fbbe10dea4 | 454 | DataTable++; | 
| zbobze | 1:50fbbe10dea4 | 455 | break; | 
| zbobze | 1:50fbbe10dea4 | 456 | |
| zbobze | 1:50fbbe10dea4 | 457 | case 3 : | 
| zbobze | 1:50fbbe10dea4 | 458 | DataTable = 0; | 
| zbobze | 1:50fbbe10dea4 | 459 | break; | 
| zbobze | 1:50fbbe10dea4 | 460 | } | 
| zbobze | 1:50fbbe10dea4 | 461 | } | 
| zbobze | 1:50fbbe10dea4 | 462 | |
| zbobze | 1:50fbbe10dea4 | 463 | void updateLCD_1(float X,float Y,float Z,float modulus) // display the dubugger screen! | 
| zbobze | 1:50fbbe10dea4 | 464 | { | 
| zbobze | 1:50fbbe10dea4 | 465 | if(CleanScreen==true) // clean screen in case the screen displayed something else | 
| odu | 0:d35d9bdef147 | 466 | { | 
| odu | 0:d35d9bdef147 | 467 | lcd.cls(); | 
| odu | 0:d35d9bdef147 | 468 | CleanScreen=false; | 
| odu | 0:d35d9bdef147 | 469 | } | 
| zbobze | 1:50fbbe10dea4 | 470 | |
| odu | 0:d35d9bdef147 | 471 | //lcd.setmode(XOR); | 
| odu | 0:d35d9bdef147 | 472 | lcd.line(lcd.width()/2, 0, lcd.width()/2, lcd.height(), 1); // vertical line to separate field to norm... | 
| odu | 0:d35d9bdef147 | 473 | lcd.locate(0,0); | 
| odu | 0:d35d9bdef147 | 474 | lcd.printf("X= %7.1fuT",X); | 
| odu | 0:d35d9bdef147 | 475 | lcd.locate(0,10); | 
| odu | 0:d35d9bdef147 | 476 | lcd.printf("Y= %7.1fuT",Y); | 
| odu | 0:d35d9bdef147 | 477 | lcd.locate(0,20); | 
| odu | 0:d35d9bdef147 | 478 | lcd.printf("Z= %7.1fuT",Z); | 
| odu | 0:d35d9bdef147 | 479 | lcd.locate((lcd.width()/2)+5,0); | 
| odu | 0:d35d9bdef147 | 480 | lcd.printf("n= %7.1fuT",modulus); | 
| odu | 0:d35d9bdef147 | 481 | if(modulus>FIELD_LIMIT) | 
| odu | 0:d35d9bdef147 | 482 | { | 
| odu | 0:d35d9bdef147 | 483 | lcd.locate((lcd.width()/2)+20,15); | 
| odu | 0:d35d9bdef147 | 484 | lcd.printf("ALERT"); | 
| odu | 0:d35d9bdef147 | 485 | lcd.print_bm(bitmWarning,(lcd.width()/2)+2,15); // print warning sign | 
| odu | 0:d35d9bdef147 | 486 | lcd.copy_to_lcd(); // update lcd | 
| odu | 0:d35d9bdef147 | 487 | } | 
| odu | 0:d35d9bdef147 | 488 | else | 
| odu | 0:d35d9bdef147 | 489 | { | 
| odu | 0:d35d9bdef147 | 490 | lcd.locate((lcd.width()/2)+2,15); | 
| odu | 0:d35d9bdef147 | 491 | lcd.printf(" "); // clean the warning sign | 
| odu | 0:d35d9bdef147 | 492 | } | 
| odu | 0:d35d9bdef147 | 493 | wait(0.010); // needed? | 
| odu | 0:d35d9bdef147 | 494 | |
| zbobze | 1:50fbbe10dea4 | 495 | } | 
| zbobze | 1:50fbbe10dea4 | 496 | |
| zbobze | 1:50fbbe10dea4 | 497 | void updateLCD_2(float X,float Y,float Z,float modulus) // Display the operator screen | 
| zbobze | 1:50fbbe10dea4 | 498 | { | 
| zbobze | 1:50fbbe10dea4 | 499 | if(CleanScreen==true) // clean screen in case the screen displayed something else | 
| zbobze | 1:50fbbe10dea4 | 500 | { | 
| zbobze | 1:50fbbe10dea4 | 501 | lcd.cls(); | 
| zbobze | 1:50fbbe10dea4 | 502 | CleanScreen=false; | 
| zbobze | 1:50fbbe10dea4 | 503 | } | 
| zbobze | 1:50fbbe10dea4 | 504 | //lcd.setmode(XOR); | 
| zbobze | 1:50fbbe10dea4 | 505 | |
| zbobze | 1:50fbbe10dea4 | 506 | lcd.locate( 0,(lcd.height()/2)); | 
| zbobze | 1:50fbbe10dea4 | 507 | lcd.printf("n= %7.1fuT",modulus); | 
| zbobze | 1:50fbbe10dea4 | 508 | if(modulus>FIELD_LIMIT) | 
| zbobze | 1:50fbbe10dea4 | 509 | { | 
| zbobze | 1:50fbbe10dea4 | 510 | lcd.locate((lcd.width()/2)+20,15); | 
| zbobze | 1:50fbbe10dea4 | 511 | lcd.printf("ALERT"); | 
| zbobze | 1:50fbbe10dea4 | 512 | lcd.print_bm(bitmWarning,(lcd.width()/2)+2,15); // print warning sign | 
| zbobze | 1:50fbbe10dea4 | 513 | lcd.copy_to_lcd(); // update lcd | 
| zbobze | 1:50fbbe10dea4 | 514 | } | 
| zbobze | 1:50fbbe10dea4 | 515 | else | 
| zbobze | 1:50fbbe10dea4 | 516 | { | 
| zbobze | 1:50fbbe10dea4 | 517 | lcd.locate((lcd.width()/2)+2,15); | 
| zbobze | 1:50fbbe10dea4 | 518 | lcd.printf(" "); // clean the warning sign | 
| zbobze | 1:50fbbe10dea4 | 519 | } | 
| zbobze | 1:50fbbe10dea4 | 520 | wait(0.010); // needed? | 
| zbobze | 1:50fbbe10dea4 | 521 | |
| zbobze | 1:50fbbe10dea4 | 522 | } | 
| zbobze | 1:50fbbe10dea4 | 523 | |
| zbobze | 1:50fbbe10dea4 | 524 | void updateLCD_3(float SaveData0, float SaveData1 ,float SaveData2 ,float modulus) // display the dubugger screen! | 
| zbobze | 1:50fbbe10dea4 | 525 | { | 
| zbobze | 1:50fbbe10dea4 | 526 | if(CleanScreen==true) // clean screen in case the screen displayed something else | 
| zbobze | 1:50fbbe10dea4 | 527 | { | 
| zbobze | 1:50fbbe10dea4 | 528 | lcd.cls(); | 
| zbobze | 1:50fbbe10dea4 | 529 | CleanScreen=false; | 
| zbobze | 1:50fbbe10dea4 | 530 | } | 
| zbobze | 1:50fbbe10dea4 | 531 | |
| zbobze | 1:50fbbe10dea4 | 532 | //lcd.setmode(XOR); | 
| zbobze | 1:50fbbe10dea4 | 533 | lcd.line(lcd.width()/2, 0, lcd.width()/2, lcd.height(), 1); // vertical line to separate field to norm... | 
| zbobze | 1:50fbbe10dea4 | 534 | lcd.locate(0,0); | 
| zbobze | 1:50fbbe10dea4 | 535 | lcd.printf("N1= %5.1fuT",SaveData0); | 
| zbobze | 1:50fbbe10dea4 | 536 | lcd.locate(0,10); | 
| zbobze | 1:50fbbe10dea4 | 537 | lcd.printf("N2= %5.1fuT",SaveData1); | 
| zbobze | 1:50fbbe10dea4 | 538 | lcd.locate(0,20); | 
| zbobze | 1:50fbbe10dea4 | 539 | lcd.printf("N3= %5.1fuT",SaveData2); | 
| zbobze | 1:50fbbe10dea4 | 540 | lcd.locate((lcd.width()/2)+5,0); | 
| zbobze | 1:50fbbe10dea4 | 541 | lcd.printf("n= %5.1fuT",modulus); | 
| zbobze | 1:50fbbe10dea4 | 542 | if(modulus>FIELD_LIMIT) | 
| zbobze | 1:50fbbe10dea4 | 543 | { | 
| zbobze | 1:50fbbe10dea4 | 544 | lcd.locate((lcd.width()/2)+20,15); | 
| zbobze | 1:50fbbe10dea4 | 545 | lcd.printf("ALERT"); | 
| zbobze | 1:50fbbe10dea4 | 546 | lcd.print_bm(bitmWarning,(lcd.width()/2)+2,15); // print warning sign | 
| zbobze | 1:50fbbe10dea4 | 547 | lcd.copy_to_lcd(); // update lcd | 
| zbobze | 1:50fbbe10dea4 | 548 | } | 
| zbobze | 1:50fbbe10dea4 | 549 | else | 
| zbobze | 1:50fbbe10dea4 | 550 | { | 
| zbobze | 1:50fbbe10dea4 | 551 | lcd.locate((lcd.width()/2)+2,15); | 
| zbobze | 1:50fbbe10dea4 | 552 | lcd.printf(" "); // clean the warning sign | 
| zbobze | 1:50fbbe10dea4 | 553 | } | 
| zbobze | 1:50fbbe10dea4 | 554 | wait(0.010); // needed? | 
| zbobze | 1:50fbbe10dea4 | 555 | |
| odu | 0:d35d9bdef147 | 556 | } | 
| odu | 0:d35d9bdef147 | 557 | |
| odu | 0:d35d9bdef147 | 558 | |
| odu | 0:d35d9bdef147 | 559 | float calculateModulus(float X, float Y, float Z) | 
| odu | 0:d35d9bdef147 | 560 | { | 
| odu | 0:d35d9bdef147 | 561 | float norm; | 
| odu | 0:d35d9bdef147 | 562 | norm=X*X; | 
| odu | 0:d35d9bdef147 | 563 | norm+=Y*Y; | 
| odu | 0:d35d9bdef147 | 564 | norm+=Z*Z; | 
| odu | 0:d35d9bdef147 | 565 | norm=sqrt(norm); | 
| odu | 0:d35d9bdef147 | 566 | return norm; | 
| odu | 0:d35d9bdef147 | 567 | |
| odu | 0:d35d9bdef147 | 568 | } | 
| odu | 0:d35d9bdef147 | 569 | |
| odu | 0:d35d9bdef147 | 570 | float normalize(float field) //normalize the field versus the field limit to have something in percent of field limit | 
| odu | 0:d35d9bdef147 | 571 | { | 
| odu | 0:d35d9bdef147 | 572 | return (field/FIELD_LIMIT )*100; | 
| odu | 0:d35d9bdef147 | 573 | } | 
| odu | 0:d35d9bdef147 | 574 | |
| zbobze | 1:50fbbe10dea4 | 575 | //Make blink the leds | 
| zbobze | 1:50fbbe10dea4 | 576 | //****************************************************************************************************************** | 
| odu | 0:d35d9bdef147 | 577 | void blink() | 
| odu | 0:d35d9bdef147 | 578 | { | 
| odu | 0:d35d9bdef147 | 579 | if(Led_on==false) | 
| odu | 0:d35d9bdef147 | 580 | { | 
| zbobze | 1:50fbbe10dea4 | 581 | LedG1 =0; | 
| zbobze | 1:50fbbe10dea4 | 582 | LedG2 =0; | 
| zbobze | 1:50fbbe10dea4 | 583 | LedG3 =0; | 
| zbobze | 1:50fbbe10dea4 | 584 | LedG4 =0; | 
| zbobze | 1:50fbbe10dea4 | 585 | LedG5 =0; | 
| zbobze | 1:50fbbe10dea4 | 586 | LedG6 =0; | 
| zbobze | 1:50fbbe10dea4 | 587 | LedG7 =0; | 
| zbobze | 1:50fbbe10dea4 | 588 | LedR1 =0; | 
| zbobze | 1:50fbbe10dea4 | 589 | LedR2 =0; | 
| zbobze | 1:50fbbe10dea4 | 590 | LedR3 =0;//led on in red | 
| odu | 0:d35d9bdef147 | 591 | Led_on=true; | 
| odu | 0:d35d9bdef147 | 592 | } | 
| odu | 0:d35d9bdef147 | 593 | else | 
| odu | 0:d35d9bdef147 | 594 | { | 
| zbobze | 1:50fbbe10dea4 | 595 | LedG1 =1; | 
| zbobze | 1:50fbbe10dea4 | 596 | LedG2 =1; | 
| zbobze | 1:50fbbe10dea4 | 597 | LedG3 =1; | 
| zbobze | 1:50fbbe10dea4 | 598 | LedG4 =1; | 
| zbobze | 1:50fbbe10dea4 | 599 | LedG5 =1; | 
| zbobze | 1:50fbbe10dea4 | 600 | LedG6 =1; | 
| zbobze | 1:50fbbe10dea4 | 601 | LedG7 =1; | 
| zbobze | 1:50fbbe10dea4 | 602 | LedR1 =1; | 
| zbobze | 1:50fbbe10dea4 | 603 | LedR2 =1; | 
| zbobze | 1:50fbbe10dea4 | 604 | LedR3 =1; //led off | 
| odu | 0:d35d9bdef147 | 605 | Led_on=false; | 
| odu | 0:d35d9bdef147 | 606 | } | 
| odu | 0:d35d9bdef147 | 607 | to1.attach(&blink, 0.2); | 
| odu | 0:d35d9bdef147 | 608 | } | 
| odu | 0:d35d9bdef147 | 609 | |
| zbobze | 1:50fbbe10dea4 | 610 | |
| zbobze | 1:50fbbe10dea4 | 611 | //Function Measuring the magnetic field | 
| zbobze | 1:50fbbe10dea4 | 612 | //****************************************************************************************************************** | 
| odu | 0:d35d9bdef147 | 613 | void MeasureXYZT(float *X,float *Y,float *Z, float *T) | 
| odu | 0:d35d9bdef147 | 614 | { | 
| odu | 0:d35d9bdef147 | 615 | char read_buffer[11]; | 
| odu | 0:d35d9bdef147 | 616 | sensor.SM(read_buffer, 15, 0); //start measurement | 
| odu | 0:d35d9bdef147 | 617 | wait(0.2);// needed? according the AN worse case (big filter and low conversion time) the measurment take 198.5 ms | 
| odu | 0:d35d9bdef147 | 618 | sensor.RM(read_buffer, 15, 0);//read measurement | 
| odu | 0:d35d9bdef147 | 619 | |
| odu | 0:d35d9bdef147 | 620 | // concatenate the two bytes | 
| odu | 0:d35d9bdef147 | 621 | *T=read_buffer[1]*256+read_buffer[2]; | 
| odu | 0:d35d9bdef147 | 622 | *X=read_buffer[3]*256+read_buffer[4]; | 
| odu | 0:d35d9bdef147 | 623 | *Y=read_buffer[5]*256+read_buffer[6]; | 
| odu | 0:d35d9bdef147 | 624 | *Z=read_buffer[7]*256+read_buffer[8]; | 
| odu | 0:d35d9bdef147 | 625 | |
| odu | 0:d35d9bdef147 | 626 | //deal with sign | 
| odu | 0:d35d9bdef147 | 627 | if(*X>32768) *X-=65536; | 
| odu | 0:d35d9bdef147 | 628 | if(*Y>32768) *Y-=65536; | 
| odu | 0:d35d9bdef147 | 629 | if(*Z>32768) *Z-=65536; | 
| odu | 0:d35d9bdef147 | 630 | } | 
| odu | 0:d35d9bdef147 | 631 | |
| zbobze | 1:50fbbe10dea4 | 632 | |
| zbobze | 1:50fbbe10dea4 | 633 | //Make the Zero | 
| zbobze | 1:50fbbe10dea4 | 634 | //****************************************************************************************************************** | 
| zbobze | 1:50fbbe10dea4 | 635 | void startZeroing() | 
| odu | 0:d35d9bdef147 | 636 | { | 
| zbobze | 1:50fbbe10dea4 | 637 | to1.attach(&blink, 0.2); | 
| odu | 0:d35d9bdef147 | 638 | float X,Y,Z,T; | 
| odu | 0:d35d9bdef147 | 639 | int iteration=20;// to be defined | 
| odu | 0:d35d9bdef147 | 640 | //char read_buffer[11]; | 
| odu | 0:d35d9bdef147 | 641 | CorrX=0;CorrY=0;CorrZ=0; | 
| zbobze | 1:50fbbe10dea4 | 642 | SaveData[0]=SaveData[1]=SaveData[2]=SaveData[3]=SaveData[4]=0; | 
| odu | 0:d35d9bdef147 | 643 | lcd.cls(); | 
| odu | 0:d35d9bdef147 | 644 | |
| odu | 0:d35d9bdef147 | 645 | for(int i=0;i<iteration;i++) | 
| odu | 0:d35d9bdef147 | 646 | { | 
| odu | 0:d35d9bdef147 | 647 | MeasureXYZT(&X,&Y,&Z,&T); | 
| odu | 0:d35d9bdef147 | 648 | CorrX+=X; | 
| odu | 0:d35d9bdef147 | 649 | CorrY+=Y; | 
| odu | 0:d35d9bdef147 | 650 | CorrZ+=Z; | 
| odu | 0:d35d9bdef147 | 651 | lcd.locate(0,0); | 
| odu | 0:d35d9bdef147 | 652 | lcd.printf("ZEROING progress: %i%%",i*100/iteration); | 
| odu | 0:d35d9bdef147 | 653 | } | 
| zbobze | 1:50fbbe10dea4 | 654 | to1.detach(); | 
| odu | 0:d35d9bdef147 | 655 | CorrX/=iteration; | 
| odu | 0:d35d9bdef147 | 656 | CorrY/=iteration; | 
| odu | 0:d35d9bdef147 | 657 | CorrZ/=iteration; | 
| odu | 0:d35d9bdef147 | 658 | CleanScreen=true; | 
| odu | 0:d35d9bdef147 | 659 | } | 
| odu | 0:d35d9bdef147 | 660 | |
| odu | 0:d35d9bdef147 | 661 | |
| odu | 0:d35d9bdef147 | 662 | |
| odu | 0:d35d9bdef147 | 663 | float getGainXY(int GAIN_SEL,int RES_XYZ) | 
| odu | 0:d35d9bdef147 | 664 | { | 
| odu | 0:d35d9bdef147 | 665 | return 2.576; //fix value for the moment... for RES_XYZ=3 and GAIN_SEL=4 | 
| odu | 0:d35d9bdef147 | 666 | } | 
| odu | 0:d35d9bdef147 | 667 | |
| odu | 0:d35d9bdef147 | 668 | float getGainZ(int GAIN_SEL,int RES_XYZ) | 
| odu | 0:d35d9bdef147 | 669 | { | 
| odu | 0:d35d9bdef147 | 670 | return 4.698; //fix value for the moment... for RES_XYZ=3 and GAIN_SEL=4 | 
| odu | 0:d35d9bdef147 | 671 | } | 
| odu | 0:d35d9bdef147 | 672 | |
| zbobze | 1:50fbbe10dea4 | 673 | |
| zbobze | 1:50fbbe10dea4 | 674 | //Function Correct the magnetic field depending on the the zeroing and the corresponding gain | 
| zbobze | 1:50fbbe10dea4 | 675 | //****************************************************************************************************************** | 
| odu | 0:d35d9bdef147 | 676 | void CorrectXYZ(float *X,float *Y,float *Z) // correct for zeroing and convert LSB in uT | 
| odu | 0:d35d9bdef147 | 677 | { | 
| odu | 0:d35d9bdef147 | 678 | *X-=CorrX; | 
| odu | 0:d35d9bdef147 | 679 | *Y-=CorrY; | 
| odu | 0:d35d9bdef147 | 680 | *Z-=CorrZ; | 
| odu | 0:d35d9bdef147 | 681 | |
| odu | 0:d35d9bdef147 | 682 | *X= *X*getGainXY(0,0); | 
| odu | 0:d35d9bdef147 | 683 | *Y= *Y*getGainXY(0,0); | 
| odu | 0:d35d9bdef147 | 684 | *Z= *Z*getGainZ(0,0); | 
| odu | 0:d35d9bdef147 | 685 | } | 
