Main code of our project.

Dependencies:   TextLCD mbed PID

Committer:
nicovv44
Date:
Wed Oct 24 08:42:30 2018 +0000
Revision:
15:e1a76426fb6a
Parent:
14:3f7e54ee1211
Relay for DC is OK. Attempt to get the phase angle.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nicovv44 0:1f66eaf1013d 1 #include "mbed.h"
nicovv44 0:1f66eaf1013d 2 #include "TextLCD.h"
nicovv44 9:70bfbd406554 3 #include "PID.h"
nicovv44 9:70bfbd406554 4
nicovv44 13:83cc9d66749d 5 #define PIDRATE 0.2
nicovv44 9:70bfbd406554 6
nicovv44 9:70bfbd406554 7 //Kc, Ti, Td, interval
nicovv44 13:83cc9d66749d 8 PID PIDcontroller1(2.9, 1.0, 0.0, PIDRATE);//frequency PID
nicovv44 15:e1a76426fb6a 9 PID PIDcontroller2(0.4, 1.0, 0.0, PIDRATE);//amplitude PID
nicovv44 0:1f66eaf1013d 10
nicovv44 0:1f66eaf1013d 11 TextLCD lcd(D2, D3, D4, D5, D6, D7); // rs, e, d4-d7
nicovv44 0:1f66eaf1013d 12 Serial pc(USBTX, USBRX); // tx, rx
nicovv44 5:e9766e0573d0 13 PwmOut pwmDC(D9);
nicovv44 5:e9766e0573d0 14 PwmOut pwmSY(D13);
nicovv44 5:e9766e0573d0 15 DigitalOut relay1(D8);
nicovv44 5:e9766e0573d0 16 DigitalOut relay2(D14);
nicovv44 5:e9766e0573d0 17 DigitalOut relay3(D11);
nicovv44 5:e9766e0573d0 18 DigitalOut relay4(D12);
nicovv44 0:1f66eaf1013d 19
nicovv44 14:3f7e54ee1211 20 DigitalIn userButton(USER_BUTTON);
nicovv44 14:3f7e54ee1211 21
nicovv44 3:a1b11dfd26f3 22 AnalogIn syncPin(A0);
nicovv44 3:a1b11dfd26f3 23 AnalogIn gridPin(A1);
nicovv44 3:a1b11dfd26f3 24 AnalogIn differentialPin(A2);
nicovv44 5:e9766e0573d0 25 AnalogIn potarDC(A3);
nicovv44 5:e9766e0573d0 26 AnalogIn potarSY(A4);
nicovv44 15:e1a76426fb6a 27 AnalogIn currentPin(A5);
nicovv44 0:1f66eaf1013d 28
nicovv44 0:1f66eaf1013d 29 const float sqrt2 = 1.414213562;
nicovv44 0:1f66eaf1013d 30
nicovv44 0:1f66eaf1013d 31 Timeout timeout;
nicovv44 5:e9766e0573d0 32 Ticker tickerPWMDC;
nicovv44 11:b6bee52941ea 33 Ticker tickerPID;
nicovv44 0:1f66eaf1013d 34 volatile bool looping = false;
nicovv44 4:886ce7eefa6e 35 volatile bool synchronized = false;
nicovv44 4:886ce7eefa6e 36 volatile bool mainLoop = true;
nicovv44 9:70bfbd406554 37 volatile float PID1Output;
nicovv44 13:83cc9d66749d 38 volatile float PID2Output;
nicovv44 0:1f66eaf1013d 39
nicovv44 0:1f66eaf1013d 40
nicovv44 0:1f66eaf1013d 41 // ##############################################
nicovv44 0:1f66eaf1013d 42 // ########## PROTOTYPES ########################
nicovv44 0:1f66eaf1013d 43 // #############################################################################
nicovv44 0:1f66eaf1013d 44 void stopLooping(void);
nicovv44 0:1f66eaf1013d 45 float getVolageRMS(AnalogIn ana_pin);
nicovv44 0:1f66eaf1013d 46 float getVolageReadedMax(AnalogIn ana_pin);
nicovv44 0:1f66eaf1013d 47 float getFrequency(AnalogIn ana_pin);
nicovv44 4:886ce7eefa6e 48 void displayLCD(float syncRMS, float gridRMS, float syncFreq, float gridFreq);
nicovv44 5:e9766e0573d0 49 void tickerPWMDCfunction();
nicovv44 9:70bfbd406554 50 void initPID1();
nicovv44 13:83cc9d66749d 51 void initPID2();
nicovv44 9:70bfbd406554 52 void tickerPIDfunction();
nicovv44 15:e1a76426fb6a 53 float getPhaseAngle(AnalogIn voltage_pin, AnalogIn current_pin);
nicovv44 0:1f66eaf1013d 54
nicovv44 0:1f66eaf1013d 55
nicovv44 0:1f66eaf1013d 56 // ##############################################
nicovv44 0:1f66eaf1013d 57 // ########## MAIN ##############################
nicovv44 0:1f66eaf1013d 58 // #############################################################################
nicovv44 0:1f66eaf1013d 59 int main() {
nicovv44 3:a1b11dfd26f3 60 float syncRMS, gridRMS, syncFreq, gridFreq;
nicovv44 0:1f66eaf1013d 61
nicovv44 5:e9766e0573d0 62 relay1 = 1;//Relay off=1, on=0
nicovv44 5:e9766e0573d0 63 relay2 = 1;//Relay off=1, on=0
nicovv44 5:e9766e0573d0 64 relay3 = 1;//Relay off=1, on=0
nicovv44 8:a161b056971c 65 relay4 = 0;//Relay off=1, on=0
nicovv44 15:e1a76426fb6a 66
nicovv44 15:e1a76426fb6a 67 //initialise PIDcontrollers
nicovv44 15:e1a76426fb6a 68 initPID1();
nicovv44 15:e1a76426fb6a 69 initPID2();
nicovv44 15:e1a76426fb6a 70
nicovv44 15:e1a76426fb6a 71
nicovv44 5:e9766e0573d0 72
nicovv44 14:3f7e54ee1211 73
nicovv44 4:886ce7eefa6e 74 while(mainLoop){
nicovv44 15:e1a76426fb6a 75 pwmDC.period(0.0002f);
nicovv44 14:3f7e54ee1211 76 pwmDC.write(1-0.00f); //(1-duty)
nicovv44 15:e1a76426fb6a 77 pwmSY.period(0.0002f);
nicovv44 14:3f7e54ee1211 78 pwmSY.write(1-0.00f); //(1-duty)
nicovv44 14:3f7e54ee1211 79
nicovv44 14:3f7e54ee1211 80 while(userButton==1){;}
nicovv44 14:3f7e54ee1211 81
nicovv44 15:e1a76426fb6a 82 pwmDC.write(1-0.900f); //(1-duty)
nicovv44 15:e1a76426fb6a 83 pwmSY.write(1-0.80f); //(1-duty)
nicovv44 8:a161b056971c 84 //tickerPWMDC.attach(&tickerPWMDCfunction, 0.1);
nicovv44 3:a1b11dfd26f3 85
nicovv44 12:ed2a94c17109 86 //pc.printf("\n\nAccelerating\r\n");
nicovv44 12:ed2a94c17109 87 lcd.printf("ACCELERATING");
nicovv44 9:70bfbd406554 88 wait(5);//wait so the motor get steady state
nicovv44 11:b6bee52941ea 89 //pwmDC.write(1-0.00f); //(1-duty)
nicovv44 9:70bfbd406554 90
nicovv44 4:886ce7eefa6e 91 //manual synchronisation
nicovv44 4:886ce7eefa6e 92 while(!synchronized){
nicovv44 4:886ce7eefa6e 93 //measure and calculate desired value
nicovv44 4:886ce7eefa6e 94 syncRMS = getVolageRMS(syncPin);
nicovv44 4:886ce7eefa6e 95 gridRMS = getVolageRMS(gridPin);
nicovv44 4:886ce7eefa6e 96 syncFreq = getFrequency(syncPin);
nicovv44 4:886ce7eefa6e 97 gridFreq = getFrequency(gridPin);
nicovv44 9:70bfbd406554 98 //Update the PID process variable.
nicovv44 11:b6bee52941ea 99 PIDcontroller1.setProcessValue(syncFreq);
nicovv44 13:83cc9d66749d 100 PIDcontroller2.setProcessValue(syncRMS);
nicovv44 9:70bfbd406554 101 //Interrupt for a correct PID rate
nicovv44 13:83cc9d66749d 102 //tickerPID.attach(&tickerPIDfunction, PIDRATE);
nicovv44 4:886ce7eefa6e 103 //display values on LCD
nicovv44 4:886ce7eefa6e 104 displayLCD(syncRMS, gridRMS, syncFreq, gridFreq);
nicovv44 13:83cc9d66749d 105 //update PID values
nicovv44 11:b6bee52941ea 106 PID1Output = PIDcontroller1.compute();
nicovv44 13:83cc9d66749d 107 PID2Output = PIDcontroller2.compute();
nicovv44 13:83cc9d66749d 108 //drive PWMs with PID values
nicovv44 11:b6bee52941ea 109 pwmDC.write(1-PID1Output); //(1-duty)
nicovv44 13:83cc9d66749d 110 pwmSY.write(1-PID2Output); //(1-duty)
nicovv44 13:83cc9d66749d 111 pc.printf("PID1:%f \t syncFreq:%f \r\n", PID1Output, syncFreq);
nicovv44 13:83cc9d66749d 112 pc.printf("PID2:%f \t syncRMS:%f \r\n\n", PID2Output, syncRMS);
nicovv44 11:b6bee52941ea 113 wait(PIDRATE);
nicovv44 4:886ce7eefa6e 114 //voltage and frequency matching
nicovv44 4:886ce7eefa6e 115 if(abs(syncRMS-gridRMS)<0.5 && abs(syncFreq-gridFreq)<0.1){
nicovv44 12:ed2a94c17109 116 //pc.printf("voltage and freqency OK\r\n");
nicovv44 12:ed2a94c17109 117 lcd.locate(11,0);//(col,row)
nicovv44 12:ed2a94c17109 118 lcd.printf("V&fOK");
nicovv44 4:886ce7eefa6e 119 while(!synchronized){//phase matching loop
nicovv44 12:ed2a94c17109 120 //measure and calculate desired value
nicovv44 12:ed2a94c17109 121 syncRMS = getVolageRMS(syncPin);
nicovv44 12:ed2a94c17109 122 gridRMS = getVolageRMS(gridPin);
nicovv44 12:ed2a94c17109 123 syncFreq = getFrequency(syncPin);
nicovv44 12:ed2a94c17109 124 gridFreq = getFrequency(gridPin);
nicovv44 12:ed2a94c17109 125 //display values on LCD
nicovv44 12:ed2a94c17109 126 displayLCD(syncRMS, gridRMS, syncFreq, gridFreq);
nicovv44 4:886ce7eefa6e 127 //phase matching
nicovv44 7:1f7d87007512 128 if(getVolageReadedMax(differentialPin) < 0.050){
nicovv44 12:ed2a94c17109 129 //pc.printf("SYNCHONIZATION OK\r\n\n");
nicovv44 12:ed2a94c17109 130 lcd.locate(12,1);//(col,row)
nicovv44 12:ed2a94c17109 131 lcd.printf("SYNC");
nicovv44 5:e9766e0573d0 132 relay1 = 0;//Relay off=1, on=0 // to hear the noise
nicovv44 5:e9766e0573d0 133 relay2 = 0;//Relay off=1, on=0 // to hear the noise
nicovv44 5:e9766e0573d0 134 relay3 = 0;//Relay off=1, on=0 // to hear the noise
nicovv44 8:a161b056971c 135 relay4 = 1;//Relay off=1, on=0 // to hear the noise
nicovv44 15:e1a76426fb6a 136 pwmDC.write(1-0.00f); //(1-duty)
nicovv44 15:e1a76426fb6a 137 pwmSY.write(1-0.00f); //(1-duty)
nicovv44 4:886ce7eefa6e 138 synchronized = true;
nicovv44 4:886ce7eefa6e 139 mainLoop = false;
nicovv44 4:886ce7eefa6e 140 }
nicovv44 4:886ce7eefa6e 141 }
nicovv44 4:886ce7eefa6e 142 }
nicovv44 4:886ce7eefa6e 143 }
nicovv44 15:e1a76426fb6a 144 while(true)
nicovv44 15:e1a76426fb6a 145 getPhaseAngle(currentPin, gridPin);
nicovv44 1:f31a46c62d10 146 }
nicovv44 0:1f66eaf1013d 147 }
nicovv44 0:1f66eaf1013d 148
nicovv44 0:1f66eaf1013d 149
nicovv44 0:1f66eaf1013d 150
nicovv44 0:1f66eaf1013d 151
nicovv44 0:1f66eaf1013d 152
nicovv44 0:1f66eaf1013d 153
nicovv44 0:1f66eaf1013d 154
nicovv44 0:1f66eaf1013d 155 // ##############################################
nicovv44 0:1f66eaf1013d 156 // ########## FUNCTIONS #########################
nicovv44 0:1f66eaf1013d 157 // #############################################################################
nicovv44 0:1f66eaf1013d 158 // ISR to stop loping
nicovv44 0:1f66eaf1013d 159 void stopLooping(void) {
nicovv44 0:1f66eaf1013d 160 looping = false;//looping is volatile bool
nicovv44 0:1f66eaf1013d 161 }
nicovv44 0:1f66eaf1013d 162
nicovv44 0:1f66eaf1013d 163 // #############################################################################
nicovv44 5:e9766e0573d0 164 // ISR to update pwmDC with potarDC
nicovv44 5:e9766e0573d0 165 void tickerPWMDCfunction(){
nicovv44 5:e9766e0573d0 166 float valuePotar1;
nicovv44 5:e9766e0573d0 167 float valuePotar2;
nicovv44 5:e9766e0573d0 168 valuePotar1 = potarDC.read();
nicovv44 7:1f7d87007512 169 pwmDC.write(1-valuePotar1);
nicovv44 5:e9766e0573d0 170 valuePotar2 = potarSY.read();
nicovv44 7:1f7d87007512 171 pwmSY.write(1-valuePotar2);
nicovv44 5:e9766e0573d0 172 //lcd.locate(12,0);//(col,row)
nicovv44 5:e9766e0573d0 173 //lcd.printf("%f",valuePotar);
nicovv44 5:e9766e0573d0 174 }
nicovv44 5:e9766e0573d0 175
nicovv44 9:70bfbd406554 176
nicovv44 9:70bfbd406554 177 // #############################################################################
nicovv44 9:70bfbd406554 178 // ISR to update PID
nicovv44 9:70bfbd406554 179 void tickerPIDfunction(){
nicovv44 9:70bfbd406554 180 PID1Output = PIDcontroller1.compute();
nicovv44 9:70bfbd406554 181 pwmDC.write(1-PID1Output); //(1-duty)
nicovv44 9:70bfbd406554 182 pc.printf("PID1:%f\r\n\n", PID1Output);
nicovv44 9:70bfbd406554 183 }
nicovv44 9:70bfbd406554 184
nicovv44 9:70bfbd406554 185
nicovv44 9:70bfbd406554 186 // #############################################################################
nicovv44 9:70bfbd406554 187 void initPID1(){
nicovv44 13:83cc9d66749d 188 //Input
nicovv44 13:83cc9d66749d 189 PIDcontroller1.setInputLimits(0.0, 100.0);
nicovv44 9:70bfbd406554 190 //Pwm output from 0.0 to 1.0
nicovv44 9:70bfbd406554 191 PIDcontroller1.setOutputLimits(0.0, 1.0);
nicovv44 9:70bfbd406554 192 //If there's a bias.
nicovv44 11:b6bee52941ea 193 PIDcontroller1.setBias(0.70);
nicovv44 9:70bfbd406554 194 PIDcontroller1.setMode(true);
nicovv44 9:70bfbd406554 195 //We want the process variable to be 50Hz
nicovv44 9:70bfbd406554 196 PIDcontroller1.setSetPoint(50);//50Hz
nicovv44 9:70bfbd406554 197 }
nicovv44 9:70bfbd406554 198
nicovv44 5:e9766e0573d0 199 // #############################################################################
nicovv44 13:83cc9d66749d 200 void initPID2(){
nicovv44 13:83cc9d66749d 201 //Input
nicovv44 13:83cc9d66749d 202 PIDcontroller2.setInputLimits(0.0, 25.0);
nicovv44 13:83cc9d66749d 203 //Pwm output from 0.0 to 1.0
nicovv44 13:83cc9d66749d 204 PIDcontroller2.setOutputLimits(0.0, 1.0);
nicovv44 13:83cc9d66749d 205 //If there's a bias.
nicovv44 13:83cc9d66749d 206 PIDcontroller2.setBias(0.70);
nicovv44 13:83cc9d66749d 207 PIDcontroller2.setMode(true);
nicovv44 13:83cc9d66749d 208 //We want the process variable to be 50Hz
nicovv44 13:83cc9d66749d 209 PIDcontroller2.setSetPoint(getVolageRMS(gridPin));
nicovv44 13:83cc9d66749d 210 }
nicovv44 13:83cc9d66749d 211
nicovv44 13:83cc9d66749d 212 // #############################################################################
nicovv44 0:1f66eaf1013d 213 float getVolageRMS(AnalogIn ana_pin){
nicovv44 0:1f66eaf1013d 214 float v1;//readed voltage
nicovv44 0:1f66eaf1013d 215 float v1Max = 0;//max readed voltage
nicovv44 0:1f66eaf1013d 216 float VRMS; //RMS voltage
nicovv44 0:1f66eaf1013d 217 looping = true;
nicovv44 1:f31a46c62d10 218 timeout.attach(callback(&stopLooping), 0.020);//T=20ms because f=50Hz
nicovv44 0:1f66eaf1013d 219 while(looping){
nicovv44 0:1f66eaf1013d 220 v1 = ana_pin.read()*3.3;
nicovv44 0:1f66eaf1013d 221 if(v1 > v1Max){
nicovv44 0:1f66eaf1013d 222 v1Max = v1;
nicovv44 0:1f66eaf1013d 223 }
nicovv44 0:1f66eaf1013d 224 }
nicovv44 3:a1b11dfd26f3 225 VRMS = (v1Max+0.685)*9.32/sqrt2;
nicovv44 4:886ce7eefa6e 226 //pc.printf("VRMS: %f\r\n",VRMS);
nicovv44 0:1f66eaf1013d 227 return VRMS;
nicovv44 0:1f66eaf1013d 228 }
nicovv44 0:1f66eaf1013d 229
nicovv44 0:1f66eaf1013d 230
nicovv44 0:1f66eaf1013d 231 // #############################################################################
nicovv44 0:1f66eaf1013d 232 float getVolageReadedMax(AnalogIn ana_pin){
nicovv44 0:1f66eaf1013d 233 float v1;//readed voltage
nicovv44 0:1f66eaf1013d 234 float v1Max = 0;//max readed voltage
nicovv44 0:1f66eaf1013d 235 looping = true;
nicovv44 1:f31a46c62d10 236 timeout.attach(callback(&stopLooping), 0.025);//T=25>20ms because f=50Hz
nicovv44 0:1f66eaf1013d 237 while(looping){
nicovv44 0:1f66eaf1013d 238 v1 = ana_pin.read()*3.3;
nicovv44 0:1f66eaf1013d 239 if(v1 > v1Max){
nicovv44 0:1f66eaf1013d 240 v1Max = v1;
nicovv44 0:1f66eaf1013d 241 }
nicovv44 0:1f66eaf1013d 242 }
nicovv44 0:1f66eaf1013d 243 return v1Max;
nicovv44 0:1f66eaf1013d 244 }
nicovv44 0:1f66eaf1013d 245
nicovv44 1:f31a46c62d10 246
nicovv44 0:1f66eaf1013d 247 // #############################################################################
nicovv44 0:1f66eaf1013d 248 float getFrequency(AnalogIn ana_pin){
nicovv44 0:1f66eaf1013d 249 float freq; //frequency
nicovv44 0:1f66eaf1013d 250 float maxReadedVoltage;//maximum voltage readed by the ADC
nicovv44 0:1f66eaf1013d 251 float readedVoltage;//readed voltage
nicovv44 0:1f66eaf1013d 252 int nbrRisingEdge=0;// number of rising edge detected
nicovv44 0:1f66eaf1013d 253 float T;//Periode
nicovv44 0:1f66eaf1013d 254 Timer timer;
nicovv44 0:1f66eaf1013d 255 maxReadedVoltage = getVolageReadedMax(ana_pin);
nicovv44 11:b6bee52941ea 256 //pc.printf("maxReadedVoltage: %f\r\n",maxReadedVoltage);
nicovv44 0:1f66eaf1013d 257 bool aboveLine = true;
nicovv44 11:b6bee52941ea 258 bool allowedClicTimer = false;
nicovv44 1:f31a46c62d10 259 looping = true;
nicovv44 1:f31a46c62d10 260 timeout.attach(callback(&stopLooping), 1);//try to find rising edges during 1sec max
nicovv44 1:f31a46c62d10 261 while(nbrRisingEdge<2 and looping){
nicovv44 0:1f66eaf1013d 262 readedVoltage = ana_pin.read()*3.3;
nicovv44 0:1f66eaf1013d 263 if(readedVoltage<(maxReadedVoltage/2)){//rising edge detection ready
nicovv44 0:1f66eaf1013d 264 aboveLine = false;
nicovv44 0:1f66eaf1013d 265 }
nicovv44 0:1f66eaf1013d 266 if((maxReadedVoltage/2)<readedVoltage && aboveLine==false){//rising edge detected
nicovv44 11:b6bee52941ea 267 allowedClicTimer = true;
nicovv44 0:1f66eaf1013d 268 aboveLine = true;
nicovv44 11:b6bee52941ea 269 }
nicovv44 11:b6bee52941ea 270 if((maxReadedVoltage*2/3)<readedVoltage && allowedClicTimer==true){//rising edge detected
nicovv44 11:b6bee52941ea 271 allowedClicTimer = false;
nicovv44 0:1f66eaf1013d 272 if(nbrRisingEdge==0)
nicovv44 0:1f66eaf1013d 273 timer.start();
nicovv44 0:1f66eaf1013d 274 if(nbrRisingEdge==1)
nicovv44 0:1f66eaf1013d 275 timer.stop();
nicovv44 0:1f66eaf1013d 276 nbrRisingEdge++;
nicovv44 0:1f66eaf1013d 277 }
nicovv44 11:b6bee52941ea 278
nicovv44 0:1f66eaf1013d 279 }
nicovv44 1:f31a46c62d10 280 if(nbrRisingEdge!=2){
nicovv44 1:f31a46c62d10 281 lcd.locate(13,1);
nicovv44 1:f31a46c62d10 282 lcd.printf("f!%d",nbrRisingEdge);
nicovv44 1:f31a46c62d10 283 }
nicovv44 0:1f66eaf1013d 284 T = timer.read();
nicovv44 0:1f66eaf1013d 285 freq = 1/T;
nicovv44 4:886ce7eefa6e 286 //pc.printf("T: %f\r\n",T);
nicovv44 4:886ce7eefa6e 287 //pc.printf("freq: %f\r\n\n",freq);
nicovv44 11:b6bee52941ea 288 if(looping==false)
nicovv44 11:b6bee52941ea 289 freq = 0;
nicovv44 0:1f66eaf1013d 290 return freq;
nicovv44 4:886ce7eefa6e 291 }
nicovv44 4:886ce7eefa6e 292
nicovv44 4:886ce7eefa6e 293
nicovv44 4:886ce7eefa6e 294 // #############################################################################
nicovv44 4:886ce7eefa6e 295 void displayLCD(float syncRMS, float gridRMS, float syncFreq, float gridFreq){
nicovv44 12:ed2a94c17109 296 lcd.locate(0,0);//(col,row)
nicovv44 12:ed2a94c17109 297 lcd.printf(" ");
nicovv44 9:70bfbd406554 298 lcd.locate(0,1);//(col,row)
nicovv44 9:70bfbd406554 299 lcd.printf(" ");
nicovv44 12:ed2a94c17109 300 lcd.locate(0,0);//(col,row)
nicovv44 12:ed2a94c17109 301 lcd.printf("G:%3.1f@%3.1f", gridRMS, gridFreq);
nicovv44 9:70bfbd406554 302 lcd.locate(0,1);//(col,row)
nicovv44 9:70bfbd406554 303 lcd.printf("S:%3.1f@%3.1f", syncRMS, syncFreq);
nicovv44 9:70bfbd406554 304
nicovv44 15:e1a76426fb6a 305 }
nicovv44 15:e1a76426fb6a 306
nicovv44 15:e1a76426fb6a 307
nicovv44 15:e1a76426fb6a 308 // #############################################################################
nicovv44 15:e1a76426fb6a 309 float getPhaseAngle(AnalogIn voltage_pin, AnalogIn current_pin){
nicovv44 15:e1a76426fb6a 310 bool searchingInstant = true;
nicovv44 15:e1a76426fb6a 311 Timer timer1;
nicovv44 15:e1a76426fb6a 312 float voltageValue;
nicovv44 15:e1a76426fb6a 313 //float maxReadedVoltageVoltage, maxReadedVoltageCurrent;//maximum voltage readed by the ADC
nicovv44 15:e1a76426fb6a 314 //maxReadedVoltageVoltage = getVolageReadedMax(voltage_pin);
nicovv44 15:e1a76426fb6a 315 //maxReadedVoltageCurrent= getVolageReadedMax(current_pin);
nicovv44 15:e1a76426fb6a 316 //pc.printf("maxReadedVoltageVoltage: %f \t maxReadedVoltageCurrent: %f\r\n", maxReadedVoltageVoltage, maxReadedVoltageCurrent);
nicovv44 15:e1a76426fb6a 317 while(searchingInstant){
nicovv44 15:e1a76426fb6a 318 voltageValue = voltage_pin.read();
nicovv44 15:e1a76426fb6a 319 //pc.printf("voltageValue voltage:%f\n\r",voltageValue);
nicovv44 15:e1a76426fb6a 320 if(voltageValue < 0.50){
nicovv44 15:e1a76426fb6a 321 timer1.start();
nicovv44 15:e1a76426fb6a 322 searchingInstant = false;
nicovv44 15:e1a76426fb6a 323 }
nicovv44 15:e1a76426fb6a 324 }
nicovv44 15:e1a76426fb6a 325 searchingInstant = true;
nicovv44 15:e1a76426fb6a 326 while(searchingInstant){
nicovv44 15:e1a76426fb6a 327 voltageValue = current_pin.read();
nicovv44 15:e1a76426fb6a 328 //pc.printf("voltageValue current:%f\n\r",voltageValue);
nicovv44 15:e1a76426fb6a 329 if(voltageValue < 0.050){
nicovv44 15:e1a76426fb6a 330 timer1.stop();
nicovv44 15:e1a76426fb6a 331 searchingInstant = false;
nicovv44 15:e1a76426fb6a 332 }
nicovv44 15:e1a76426fb6a 333 }
nicovv44 15:e1a76426fb6a 334 pc.printf("phaseAngle:%f\n\r",timer1.read()*180/0.020);
nicovv44 15:e1a76426fb6a 335 return 0;
nicovv44 1:f31a46c62d10 336 }