Nate Chandler
/
capacitor
4180 Final Project
Diff: main.cpp
- Revision:
- 0:60d48344319c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Dec 03 00:04:32 2016 +0000 @@ -0,0 +1,221 @@ +#include "mbed.h" + +Serial pc(USBTX, USBRX); + +double xLoc, yLoc; + +DigitalOut myled(LED1); +DigitalOut control(p21); + +DigitalOut charge1M(p5);//1M output +DigitalOut charge100K(p6);//100K output +DigitalOut charge10K(p7);//10K output +DigitalOut charge1K(p8);//1K output +DigitalOut charge100(p9);//100 output + +AnalogIn fullIndic(p15); +AnalogIn emptyIndic(p19); +DigitalInOut pin20(p20); +Timer t; +int timeElaps; +float microFarads; +double changeTime = 1000; + +double R100 = 98.94; +double R1K = 981.7; +double R10K = 9922.0; +double R100K = 99200.0; +double R1M = 987200.0; + +double Rval = 0.0; + +bool fail; +bool leave = true; +float RC=0.54;//53; + +char startSig[5]; + +bool checkForC(void) +{ + startSig[0] = pc.getc(); + if(startSig[0] == 'c'){return true;} + return false; +} + +void checkDischarge(void) +{ + + myled = 1; + + charge1M = 0; + charge100K = 0; + charge10K = 0; + charge1K = 0; + charge100 = 0; + + control = 1; + //bool success = true; + charge1M = 0; + pin20.output(); + pin20 = 0; + while(fullIndic.read() > 0.07){}//pc.printf("read: %f\n",fullIndic.read());} +} + +void start1M(void) +{ + Rval = R1M; + fail = false; + control = 0; + pin20.input(); + pin20.mode(PullNone); + charge1M = 1; + t.reset(); + t.start(); + + while(fullIndic < RC){ + if(t.read_ms() > changeTime){ + fail = true; + charge1M = 0; + break; + } + } + t.stop(); +} + +void start100K(void) +{ + Rval = R100K; + fail = false; + control = 0; + pin20.input(); + pin20.mode(PullNone); + charge100K = 1; + t.reset(); + t.start(); + + while(fullIndic < RC){ + if(t.read_ms() > changeTime){ + fail = true; + charge100K = 0; + break; + } + } + t.stop(); +} + +void start10K(void) +{ + Rval = R10K; + fail = false; + control = 0; + pin20.input(); + pin20.mode(PullNone); + charge10K = 1; + t.reset(); + t.start(); + + while(fullIndic < RC){ + if(t.read_ms() > changeTime){ + fail = true; + charge10K = 0; + break; + } + } + t.stop(); +} + +void start1K(void) +{ + Rval = R1K; + fail = false; + control = 0; + pin20.input(); + pin20.mode(PullNone); + charge1K = 1; + t.reset(); + t.start(); + + while(fullIndic < RC){ + if(t.read_ms() > changeTime){ + fail = true; + charge1K = 0; + break; + } + } + t.stop(); +} + +void start100(void) +{ + Rval = R100; + fail = false; + control = 0; + pin20.input(); + pin20.mode(PullNone); + charge100 = 1; + t.reset(); + t.start(); + + while(fullIndic < RC){ + /*if(t.read_ms() > changeTime){ + fail = true; + charge100 = 0; + break; + }*/ + } + t.stop(); +} + +void sendErrorMsg(void){ + pc.printf("could not read capacitor\n"); +} + +int main() { + while(1){ + + leave = true; + startSig [0] = pc.getc(); + while(startSig[0] != 's'){startSig [0] = pc.getc();} + + for(int count = 0; count < 10; count++){ + + checkDischarge(); + myled = 0; + start1M(); + //pc.printf("1M\n"); + + if(fail){ + checkDischarge(); + + //pc.printf("100K\n"); + if(fail){// && leave){ + checkDischarge(); + start10K(); + + //pc.printf("10K\n"); + if(fail){// && leave){ + checkDischarge(); + start1K(); + + if(fail){// && leave){ + checkDischarge(); + start100(); + + if(fail){}//&& leave){}//sendErrorMsg();} + } + } + } + } + + + timeElaps = t.read_ms(); + t.reset(); + t.start(); + t.stop(); + + microFarads = (((double)timeElaps-t.read_ms())/Rval); + pc.printf("%f", microFarads); + //pc.printf("This is the cap: %f", microFarads); + } + } +}