Charging circuit code

Dependencies:   mbed

Fork of Serial_HelloWorld_Mbed by mbed official

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?

UserRevisionLine numberNew 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