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 | } |