David Styles
/
LPC1
main.cpp@0:c42f357675ed, 2009-10-30 (annotated)
- Committer:
- DaveStyles
- Date:
- Fri Oct 30 17:55:27 2009 +0000
- Revision:
- 0:c42f357675ed
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DaveStyles | 0:c42f357675ed | 1 | #include "mbed.h" |
DaveStyles | 0:c42f357675ed | 2 | |
DaveStyles | 0:c42f357675ed | 3 | DigitalOut relay1(p24); |
DaveStyles | 0:c42f357675ed | 4 | DigitalOut chargeLED(p30); |
DaveStyles | 0:c42f357675ed | 5 | DigitalOut dumpLED(p29); |
DaveStyles | 0:c42f357675ed | 6 | AnalogIn load1 (p16); |
DaveStyles | 0:c42f357675ed | 7 | |
DaveStyles | 0:c42f357675ed | 8 | |
DaveStyles | 0:c42f357675ed | 9 | #define rRatio 6.6355 |
DaveStyles | 0:c42f357675ed | 10 | #define EMPTY 12.2000 |
DaveStyles | 0:c42f357675ed | 11 | #define UPPER_CHARGE_LIMIT 13.0 |
DaveStyles | 0:c42f357675ed | 12 | |
DaveStyles | 0:c42f357675ed | 13 | int justConnected = 0; |
DaveStyles | 0:c42f357675ed | 14 | |
DaveStyles | 0:c42f357675ed | 15 | void flash(void) { |
DaveStyles | 0:c42f357675ed | 16 | for (int i=0;i<5;i++) { |
DaveStyles | 0:c42f357675ed | 17 | dumpLED = 1; |
DaveStyles | 0:c42f357675ed | 18 | chargeLED = 1; |
DaveStyles | 0:c42f357675ed | 19 | wait(0.5); |
DaveStyles | 0:c42f357675ed | 20 | dumpLED = 0; |
DaveStyles | 0:c42f357675ed | 21 | chargeLED = 0; |
DaveStyles | 0:c42f357675ed | 22 | wait(0.5); |
DaveStyles | 0:c42f357675ed | 23 | } |
DaveStyles | 0:c42f357675ed | 24 | |
DaveStyles | 0:c42f357675ed | 25 | } |
DaveStyles | 0:c42f357675ed | 26 | |
DaveStyles | 0:c42f357675ed | 27 | //chargeLED = RED |
DaveStyles | 0:c42f357675ed | 28 | //dumpLED = Green |
DaveStyles | 0:c42f357675ed | 29 | |
DaveStyles | 0:c42f357675ed | 30 | void chargeOne() { |
DaveStyles | 0:c42f357675ed | 31 | |
DaveStyles | 0:c42f357675ed | 32 | justConnected = 0; |
DaveStyles | 0:c42f357675ed | 33 | |
DaveStyles | 0:c42f357675ed | 34 | //with latch |
DaveStyles | 0:c42f357675ed | 35 | relay1=1; |
DaveStyles | 0:c42f357675ed | 36 | chargeLED=1; |
DaveStyles | 0:c42f357675ed | 37 | dumpLED = 0; |
DaveStyles | 0:c42f357675ed | 38 | |
DaveStyles | 0:c42f357675ed | 39 | while (1) { |
DaveStyles | 0:c42f357675ed | 40 | |
DaveStyles | 0:c42f357675ed | 41 | float voltage1 = load1*rRatio*3.3000; |
DaveStyles | 0:c42f357675ed | 42 | |
DaveStyles | 0:c42f357675ed | 43 | float delay = 0.2; |
DaveStyles | 0:c42f357675ed | 44 | if (UPPER_CHARGE_LIMIT > voltage1) { |
DaveStyles | 0:c42f357675ed | 45 | delay=0.2+(UPPER_CHARGE_LIMIT - voltage1); |
DaveStyles | 0:c42f357675ed | 46 | } |
DaveStyles | 0:c42f357675ed | 47 | |
DaveStyles | 0:c42f357675ed | 48 | wait (delay); |
DaveStyles | 0:c42f357675ed | 49 | chargeLED=1; |
DaveStyles | 0:c42f357675ed | 50 | wait (0.25); |
DaveStyles | 0:c42f357675ed | 51 | chargeLED=0; |
DaveStyles | 0:c42f357675ed | 52 | |
DaveStyles | 0:c42f357675ed | 53 | // When the battery is charged to the limit, switch the relay off and return |
DaveStyles | 0:c42f357675ed | 54 | voltage1 = load1*rRatio*3.3000; |
DaveStyles | 0:c42f357675ed | 55 | if (voltage1 >= UPPER_CHARGE_LIMIT ) { |
DaveStyles | 0:c42f357675ed | 56 | flash(); |
DaveStyles | 0:c42f357675ed | 57 | relay1=0; |
DaveStyles | 0:c42f357675ed | 58 | chargeLED=0; |
DaveStyles | 0:c42f357675ed | 59 | return; |
DaveStyles | 0:c42f357675ed | 60 | } |
DaveStyles | 0:c42f357675ed | 61 | |
DaveStyles | 0:c42f357675ed | 62 | } //loop |
DaveStyles | 0:c42f357675ed | 63 | |
DaveStyles | 0:c42f357675ed | 64 | } |
DaveStyles | 0:c42f357675ed | 65 | |
DaveStyles | 0:c42f357675ed | 66 | void init(void) { |
DaveStyles | 0:c42f357675ed | 67 | for (int i=0;i<10;i++) { |
DaveStyles | 0:c42f357675ed | 68 | dumpLED = 1; |
DaveStyles | 0:c42f357675ed | 69 | wait(0.5); |
DaveStyles | 0:c42f357675ed | 70 | dumpLED = 0; |
DaveStyles | 0:c42f357675ed | 71 | chargeLED = 1; |
DaveStyles | 0:c42f357675ed | 72 | wait(0.5); |
DaveStyles | 0:c42f357675ed | 73 | chargeLED = 0; |
DaveStyles | 0:c42f357675ed | 74 | } |
DaveStyles | 0:c42f357675ed | 75 | for (int i=0;i<1;i++) { |
DaveStyles | 0:c42f357675ed | 76 | dumpLED = 1; |
DaveStyles | 0:c42f357675ed | 77 | chargeLED = 1; |
DaveStyles | 0:c42f357675ed | 78 | wait(0.5); |
DaveStyles | 0:c42f357675ed | 79 | dumpLED = 0; |
DaveStyles | 0:c42f357675ed | 80 | chargeLED = 0; |
DaveStyles | 0:c42f357675ed | 81 | wait(0.5); |
DaveStyles | 0:c42f357675ed | 82 | } |
DaveStyles | 0:c42f357675ed | 83 | |
DaveStyles | 0:c42f357675ed | 84 | justConnected = 1; |
DaveStyles | 0:c42f357675ed | 85 | |
DaveStyles | 0:c42f357675ed | 86 | } |
DaveStyles | 0:c42f357675ed | 87 | |
DaveStyles | 0:c42f357675ed | 88 | |
DaveStyles | 0:c42f357675ed | 89 | void dump() { |
DaveStyles | 0:c42f357675ed | 90 | |
DaveStyles | 0:c42f357675ed | 91 | dumpLED = 1; |
DaveStyles | 0:c42f357675ed | 92 | wait(0.5); |
DaveStyles | 0:c42f357675ed | 93 | dumpLED = 0; |
DaveStyles | 0:c42f357675ed | 94 | |
DaveStyles | 0:c42f357675ed | 95 | } |
DaveStyles | 0:c42f357675ed | 96 | |
DaveStyles | 0:c42f357675ed | 97 | int main() { |
DaveStyles | 0:c42f357675ed | 98 | init(); |
DaveStyles | 0:c42f357675ed | 99 | while(1) { |
DaveStyles | 0:c42f357675ed | 100 | wait(1); |
DaveStyles | 0:c42f357675ed | 101 | float voltage1 = load1*rRatio*3.3000; |
DaveStyles | 0:c42f357675ed | 102 | if ((voltage1 <= EMPTY) || ((justConnected == 1) && (voltage1 < UPPER_CHARGE_LIMIT))) { |
DaveStyles | 0:c42f357675ed | 103 | chargeOne(); |
DaveStyles | 0:c42f357675ed | 104 | } else { |
DaveStyles | 0:c42f357675ed | 105 | dump(); |
DaveStyles | 0:c42f357675ed | 106 | } |
DaveStyles | 0:c42f357675ed | 107 | |
DaveStyles | 0:c42f357675ed | 108 | } |
DaveStyles | 0:c42f357675ed | 109 | } |