Charging circuit code
Dependencies: mbed
Fork of Serial_HelloWorld_Mbed by
main.cpp@1:291cc733b64a, 2016-04-28 (annotated)
- Committer:
- samuelstradling
- Date:
- Thu Apr 28 10:26:00 2016 +0000
- Revision:
- 1:291cc733b64a
- Parent:
- 0:879aa9d0247b
- Child:
- 2:091e7846d11a
initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbed_official | 0:879aa9d0247b | 1 | #include "mbed.h" |
samuelstradling | 1:291cc733b64a | 2 | |
samuelstradling | 1:291cc733b64a | 3 | #define mBED2 |
samuelstradling | 1:291cc733b64a | 4 | |
samuelstradling | 1:291cc733b64a | 5 | #define VCC 3.3 |
samuelstradling | 1:291cc733b64a | 6 | #define B 3984 |
samuelstradling | 1:291cc733b64a | 7 | #define K 273 |
samuelstradling | 1:291cc733b64a | 8 | #define T0 (K+25) |
samuelstradling | 1:291cc733b64a | 9 | #define R0 10000 |
samuelstradling | 1:291cc733b64a | 10 | #define TEMP_LIMIT 25 |
samuelstradling | 1:291cc733b64a | 11 | |
samuelstradling | 1:291cc733b64a | 12 | #ifdef mBED1 |
samuelstradling | 1:291cc733b64a | 13 | #define R1A 10037 |
samuelstradling | 1:291cc733b64a | 14 | #define R1B 10056 |
samuelstradling | 1:291cc733b64a | 15 | #define R2A 10047 |
samuelstradling | 1:291cc733b64a | 16 | #define R2B 10012 |
samuelstradling | 1:291cc733b64a | 17 | #define R3A 10041 |
samuelstradling | 1:291cc733b64a | 18 | #define R3B 10048 |
samuelstradling | 1:291cc733b64a | 19 | #else |
samuelstradling | 1:291cc733b64a | 20 | #define R1A 10033 |
samuelstradling | 1:291cc733b64a | 21 | #define R1B 10023 |
samuelstradling | 1:291cc733b64a | 22 | #define R2A 9988 |
samuelstradling | 1:291cc733b64a | 23 | #define R2B 10036 |
samuelstradling | 1:291cc733b64a | 24 | #define R3A 10070 |
samuelstradling | 1:291cc733b64a | 25 | #define R3B 10067 |
samuelstradling | 1:291cc733b64a | 26 | #endif |
mbed_official | 0:879aa9d0247b | 27 | |
mbed_official | 0:879aa9d0247b | 28 | Serial pc(USBTX, USBRX); // tx, rx |
samuelstradling | 1:291cc733b64a | 29 | DigitalOut buzzer(p22); |
samuelstradling | 1:291cc733b64a | 30 | LocalFileSystem local("local"); |
samuelstradling | 1:291cc733b64a | 31 | |
samuelstradling | 1:291cc733b64a | 32 | float res_to_temp(float res); |
samuelstradling | 1:291cc733b64a | 33 | float volt_to_temp(int batteryA, float volt); |
samuelstradling | 1:291cc733b64a | 34 | float volt_to_res(int batteryA, float volt); |
mbed_official | 0:879aa9d0247b | 35 | |
mbed_official | 0:879aa9d0247b | 36 | int main() { |
samuelstradling | 1:291cc733b64a | 37 | |
samuelstradling | 1:291cc733b64a | 38 | char myname[64]; |
samuelstradling | 1:291cc733b64a | 39 | float voltageA = .0, voltageB = .0; |
samuelstradling | 1:291cc733b64a | 40 | float tempA = .0, tempB = .0; |
samuelstradling | 1:291cc733b64a | 41 | float resA = .0, resB = .0; |
samuelstradling | 1:291cc733b64a | 42 | int i; |
samuelstradling | 1:291cc733b64a | 43 | FILE *fp; |
samuelstradling | 1:291cc733b64a | 44 | #ifdef mBED1 |
samuelstradling | 1:291cc733b64a | 45 | int mBed = 1; |
samuelstradling | 1:291cc733b64a | 46 | #else |
samuelstradling | 1:291cc733b64a | 47 | int mBed = 2; |
samuelstradling | 1:291cc733b64a | 48 | #endif |
samuelstradling | 1:291cc733b64a | 49 | |
samuelstradling | 1:291cc733b64a | 50 | buzzer = 0; |
samuelstradling | 1:291cc733b64a | 51 | |
samuelstradling | 1:291cc733b64a | 52 | pc.printf("\n\n\n"); |
samuelstradling | 1:291cc733b64a | 53 | for (i = 0; i < 1000; i++) { |
samuelstradling | 1:291cc733b64a | 54 | sprintf(myname, "/local/log%04d.csv", i); |
samuelstradling | 1:291cc733b64a | 55 | pc.printf("Try file: <%s>\n", myname); |
samuelstradling | 1:291cc733b64a | 56 | if ((fp = fopen(myname, "r")) == 0) { |
samuelstradling | 1:291cc733b64a | 57 | pc.printf("File not found: <%s>\n", myname); |
samuelstradling | 1:291cc733b64a | 58 | break; |
samuelstradling | 1:291cc733b64a | 59 | } else { |
samuelstradling | 1:291cc733b64a | 60 | pc.printf("File exists: <%s>\n", myname); |
samuelstradling | 1:291cc733b64a | 61 | fclose(fp); |
samuelstradling | 1:291cc733b64a | 62 | } |
mbed_official | 0:879aa9d0247b | 63 | } |
samuelstradling | 1:291cc733b64a | 64 | |
samuelstradling | 1:291cc733b64a | 65 | pc.printf("Creating File: <%s>\n", myname); |
samuelstradling | 1:291cc733b64a | 66 | fp = fopen(myname, "w"); |
samuelstradling | 1:291cc733b64a | 67 | fprintf(fp, "VA, resA, tempA, VB, resB, tempB\n"); |
samuelstradling | 1:291cc733b64a | 68 | |
samuelstradling | 1:291cc733b64a | 69 | AnalogIn va1(p17); |
samuelstradling | 1:291cc733b64a | 70 | AnalogIn va2(p18); |
samuelstradling | 1:291cc733b64a | 71 | AnalogIn vb1(p19); |
samuelstradling | 1:291cc733b64a | 72 | AnalogIn vb2(p20); |
samuelstradling | 1:291cc733b64a | 73 | |
samuelstradling | 1:291cc733b64a | 74 | DigitalIn run(p21); |
samuelstradling | 1:291cc733b64a | 75 | |
samuelstradling | 1:291cc733b64a | 76 | while(run) { |
samuelstradling | 1:291cc733b64a | 77 | wait_ms(5000); |
samuelstradling | 1:291cc733b64a | 78 | voltageA = (va1.read() - va2.read())*3.3; |
samuelstradling | 1:291cc733b64a | 79 | voltageB = (vb1.read() - vb2.read())*3.3; |
samuelstradling | 1:291cc733b64a | 80 | resA = volt_to_res(1, voltageA); |
samuelstradling | 1:291cc733b64a | 81 | resB = volt_to_res(0, voltageB); |
samuelstradling | 1:291cc733b64a | 82 | tempA = volt_to_temp(1, voltageA); |
samuelstradling | 1:291cc733b64a | 83 | tempB = volt_to_temp(0, voltageB); |
samuelstradling | 1:291cc733b64a | 84 | pc.printf("mBed%i: VA: %f, resA: %f, tempA: %f, VB: %f, resB: %f, tempB: %f\n", mBed, voltageA, resA, tempA-K, voltageB, resB, tempB-K); |
samuelstradling | 1:291cc733b64a | 85 | fprintf(fp, "%f, %f, %f, %f, %f, %f\n", mBed, voltageA, resA, tempA-K, voltageB, resB, tempB-K); |
samuelstradling | 1:291cc733b64a | 86 | |
samuelstradling | 1:291cc733b64a | 87 | if(((tempA-K) > TEMP_LIMIT) || ((tempB-K) > TEMP_LIMIT)){ |
samuelstradling | 1:291cc733b64a | 88 | buzzer = 1; |
samuelstradling | 1:291cc733b64a | 89 | } |
samuelstradling | 1:291cc733b64a | 90 | } |
samuelstradling | 1:291cc733b64a | 91 | |
samuelstradling | 1:291cc733b64a | 92 | fclose(fp); |
samuelstradling | 1:291cc733b64a | 93 | |
samuelstradling | 1:291cc733b64a | 94 | } |
samuelstradling | 1:291cc733b64a | 95 | |
samuelstradling | 1:291cc733b64a | 96 | float volt_to_temp(int batteryA, float volt){ |
samuelstradling | 1:291cc733b64a | 97 | float res = volt_to_res(batteryA, volt); |
samuelstradling | 1:291cc733b64a | 98 | return res_to_temp(res); |
samuelstradling | 1:291cc733b64a | 99 | } |
samuelstradling | 1:291cc733b64a | 100 | |
samuelstradling | 1:291cc733b64a | 101 | float volt_to_res(int batteryA, float volt){ |
samuelstradling | 1:291cc733b64a | 102 | if(batteryA){ |
samuelstradling | 1:291cc733b64a | 103 | return R3A * ((VCC * R2A - volt * (R1A + R2A)) / (VCC * R1A + volt * (R1A + R2A))); |
samuelstradling | 1:291cc733b64a | 104 | }else{ |
samuelstradling | 1:291cc733b64a | 105 | return R3B * ((VCC * R2B - volt * (R1B + R2B)) / (VCC * R1B + volt * (R1B + R2B))); |
samuelstradling | 1:291cc733b64a | 106 | } |
samuelstradling | 1:291cc733b64a | 107 | } |
samuelstradling | 1:291cc733b64a | 108 | |
samuelstradling | 1:291cc733b64a | 109 | float res_to_temp(float Rt){ |
samuelstradling | 1:291cc733b64a | 110 | |
samuelstradling | 1:291cc733b64a | 111 | return (B * T0) / (B + (T0 * log(Rt / R0))); |
samuelstradling | 1:291cc733b64a | 112 | |
samuelstradling | 1:291cc733b64a | 113 | } |
samuelstradling | 1:291cc733b64a | 114 |