Battery drain test (http://adwiens.com/projects/balloons/batt/index.html)

Dependencies:   mbed-rtos mbed

See http://adwiens.com/projects/balloons/batt/index.html

Committer:
adwiens
Date:
Mon Jan 20 22:48:40 2014 +0000
Revision:
0:1c367d1c3ad3
works great

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adwiens 0:1c367d1c3ad3 1 #include "mbed.h"
adwiens 0:1c367d1c3ad3 2 #include "rtos.h"
adwiens 0:1c367d1c3ad3 3
adwiens 0:1c367d1c3ad3 4 #define ON_SECS (10)
adwiens 0:1c367d1c3ad3 5 #define OFF_SECS (10)
adwiens 0:1c367d1c3ad3 6 #define SAMPLE_RATE_HZ (5)
adwiens 0:1c367d1c3ad3 7
adwiens 0:1c367d1c3ad3 8 Serial pc(USBTX, USBRX);
adwiens 0:1c367d1c3ad3 9 DigitalOut relay(p21);
adwiens 0:1c367d1c3ad3 10 DigitalOut led1(LED1);
adwiens 0:1c367d1c3ad3 11 DigitalOut led2(LED2);
adwiens 0:1c367d1c3ad3 12 AnalogIn adc(p20);
adwiens 0:1c367d1c3ad3 13 LocalFileSystem local("local");
adwiens 0:1c367d1c3ad3 14
adwiens 0:1c367d1c3ad3 15 double get_voltage(double d) { /* calibrated in freezer */
adwiens 0:1c367d1c3ad3 16 return 8.14*d;
adwiens 0:1c367d1c3ad3 17 }
adwiens 0:1c367d1c3ad3 18
adwiens 0:1c367d1c3ad3 19 void relay_thr(void const *argument) {
adwiens 0:1c367d1c3ad3 20 int i;
adwiens 0:1c367d1c3ad3 21 while(1) {
adwiens 0:1c367d1c3ad3 22 relay = led1 = 1;
adwiens 0:1c367d1c3ad3 23 for(i=0; i<ON_SECS; ++i) Thread::wait(1000);
adwiens 0:1c367d1c3ad3 24 relay = led1 = 0;
adwiens 0:1c367d1c3ad3 25 for(i=0; i<OFF_SECS; ++i) Thread::wait(1000);
adwiens 0:1c367d1c3ad3 26 }
adwiens 0:1c367d1c3ad3 27 }
adwiens 0:1c367d1c3ad3 28
adwiens 0:1c367d1c3ad3 29 void log_thr(void const *argument) {
adwiens 0:1c367d1c3ad3 30 FILE *fp = fopen("/local/bv.csv", "a");
adwiens 0:1c367d1c3ad3 31 fprintf(fp,"BEGIN\n");
adwiens 0:1c367d1c3ad3 32 fclose(fp);
adwiens 0:1c367d1c3ad3 33 while(1) {
adwiens 0:1c367d1c3ad3 34 led2 = 1;
adwiens 0:1c367d1c3ad3 35 FILE *fp = fopen("/local/bv.csv", "a");
adwiens 0:1c367d1c3ad3 36 fprintf(fp, "%d,%f\n",(int)relay,get_voltage(adc)-5.0);
adwiens 0:1c367d1c3ad3 37 printf("%d,%f\n",(int)relay,get_voltage(adc)-5.0);
adwiens 0:1c367d1c3ad3 38 fclose(fp);
adwiens 0:1c367d1c3ad3 39 led2 = 0;
adwiens 0:1c367d1c3ad3 40 Thread::wait(1000/SAMPLE_RATE_HZ);
adwiens 0:1c367d1c3ad3 41 }
adwiens 0:1c367d1c3ad3 42 }
adwiens 0:1c367d1c3ad3 43
adwiens 0:1c367d1c3ad3 44 int main() {
adwiens 0:1c367d1c3ad3 45 Thread relay_thread(relay_thr); // toggles relay
adwiens 0:1c367d1c3ad3 46 Thread log_thread(log_thr); // logs batt voltage
adwiens 0:1c367d1c3ad3 47 while(1);
adwiens 0:1c367d1c3ad3 48 }