Priliminary
Dependencies: DS1307 MAX17048 MODSERIAL SSD1308_128x64_I2C WatchDog mbed-rpc mbed
Fork of ECGAFE_copy by
main.cpp@0:ee0649a9025a, 2015-09-30 (annotated)
- Committer:
- zainulcharbiwala
- Date:
- Wed Sep 30 11:30:56 2015 +0000
- Revision:
- 0:ee0649a9025a
Priliminary
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
zainulcharbiwala | 0:ee0649a9025a | 1 | // Copyright 2013, Zainul Charbiwala |
zainulcharbiwala | 0:ee0649a9025a | 2 | |
zainulcharbiwala | 0:ee0649a9025a | 3 | /* Includes */ |
zainulcharbiwala | 0:ee0649a9025a | 4 | #include "mbed.h" |
zainulcharbiwala | 0:ee0649a9025a | 5 | #include "ADS1298.h" |
zainulcharbiwala | 0:ee0649a9025a | 6 | #include "SSD1308.h" |
zainulcharbiwala | 0:ee0649a9025a | 7 | #include "ds1307.h" |
zainulcharbiwala | 0:ee0649a9025a | 8 | #include "MAX17048.h" |
zainulcharbiwala | 0:ee0649a9025a | 9 | #include "WatchDog.h" |
zainulcharbiwala | 0:ee0649a9025a | 10 | #include "oledicons.h" |
zainulcharbiwala | 0:ee0649a9025a | 11 | #include "mbed_rpc.h" |
zainulcharbiwala | 0:ee0649a9025a | 12 | #include "DebouncedIn.h" |
zainulcharbiwala | 0:ee0649a9025a | 13 | #include "MODSERIAL.h" |
zainulcharbiwala | 0:ee0649a9025a | 14 | |
zainulcharbiwala | 0:ee0649a9025a | 15 | /* mbed Objects */ |
zainulcharbiwala | 0:ee0649a9025a | 16 | DigitalOut myled(LED1); |
zainulcharbiwala | 0:ee0649a9025a | 17 | DigitalOut lWatchdog(LED4); |
zainulcharbiwala | 0:ee0649a9025a | 18 | WatchDog_ms wdt(10000); |
zainulcharbiwala | 0:ee0649a9025a | 19 | Ticker wdtTicker; |
zainulcharbiwala | 0:ee0649a9025a | 20 | MODSERIAL pc(USBTX, USBRX); |
zainulcharbiwala | 0:ee0649a9025a | 21 | Timer tt; |
zainulcharbiwala | 0:ee0649a9025a | 22 | I2C i2c(p28, p27); // sda, scl |
zainulcharbiwala | 0:ee0649a9025a | 23 | SSD1308 oled = SSD1308(i2c, SSD1308_SA0); |
zainulcharbiwala | 0:ee0649a9025a | 24 | ADS1298 ads = ADS1298(p5, p6, p7, p24, p23, p22, p21); //mosi, miso, sclk, cs, reset, drdy, start |
zainulcharbiwala | 0:ee0649a9025a | 25 | DS1307 rtc(p28,p27); // start DS1307 class and give it pins for connections of the DS1307 device |
zainulcharbiwala | 0:ee0649a9025a | 26 | MAX17048 gauge(p28, p27); |
zainulcharbiwala | 0:ee0649a9025a | 27 | DigitalIn battChging(p14); |
zainulcharbiwala | 0:ee0649a9025a | 28 | DebouncedIn button(p20); |
zainulcharbiwala | 0:ee0649a9025a | 29 | |
zainulcharbiwala | 0:ee0649a9025a | 30 | /* Constants */ |
zainulcharbiwala | 0:ee0649a9025a | 31 | #define OLEDPAGEMAX 14 |
zainulcharbiwala | 0:ee0649a9025a | 32 | // Page 0 for general use |
zainulcharbiwala | 0:ee0649a9025a | 33 | // Page 1-12 for signals |
zainulcharbiwala | 0:ee0649a9025a | 34 | // Page 13 for network status |
zainulcharbiwala | 0:ee0649a9025a | 35 | // Page 14 for something else |
zainulcharbiwala | 0:ee0649a9025a | 36 | |
zainulcharbiwala | 0:ee0649a9025a | 37 | /* Global Variables */ |
zainulcharbiwala | 0:ee0649a9025a | 38 | uint8_t buf[27]; |
zainulcharbiwala | 0:ee0649a9025a | 39 | char rpcInBuf[256], rpcOutBuf[256]; |
zainulcharbiwala | 0:ee0649a9025a | 40 | int vCapturing; |
zainulcharbiwala | 0:ee0649a9025a | 41 | |
zainulcharbiwala | 0:ee0649a9025a | 42 | static char oledstr[16]; |
zainulcharbiwala | 0:ee0649a9025a | 43 | static int vOledPage; |
zainulcharbiwala | 0:ee0649a9025a | 44 | |
zainulcharbiwala | 0:ee0649a9025a | 45 | /* External Functions */ |
zainulcharbiwala | 0:ee0649a9025a | 46 | |
zainulcharbiwala | 0:ee0649a9025a | 47 | /* Local Functions */ |
zainulcharbiwala | 0:ee0649a9025a | 48 | static void dataReady(void); |
zainulcharbiwala | 0:ee0649a9025a | 49 | static void wdtKicker(); |
zainulcharbiwala | 0:ee0649a9025a | 50 | static void oledBattery(uint8_t percentage, uint8_t charging); |
zainulcharbiwala | 0:ee0649a9025a | 51 | static void oledNetwork(uint8_t percentage, const char *mode); |
zainulcharbiwala | 0:ee0649a9025a | 52 | static void oledTime(); |
zainulcharbiwala | 0:ee0649a9025a | 53 | static void fCaptureStart(Arguments *arg, Reply *r); |
zainulcharbiwala | 0:ee0649a9025a | 54 | static void fCaptureStop(Arguments *arg, Reply *r); |
zainulcharbiwala | 0:ee0649a9025a | 55 | static void fButtonLongPress(); |
zainulcharbiwala | 0:ee0649a9025a | 56 | static void fButtonShortPress(); |
zainulcharbiwala | 0:ee0649a9025a | 57 | static void fOledPage0(); |
zainulcharbiwala | 0:ee0649a9025a | 58 | static void fOledPageSignal(); |
zainulcharbiwala | 0:ee0649a9025a | 59 | static void fOledPageNetwork(); |
zainulcharbiwala | 0:ee0649a9025a | 60 | static void fOledPageSomethingElse(); |
zainulcharbiwala | 0:ee0649a9025a | 61 | |
zainulcharbiwala | 0:ee0649a9025a | 62 | |
zainulcharbiwala | 0:ee0649a9025a | 63 | /* RPC Variables */ |
zainulcharbiwala | 0:ee0649a9025a | 64 | RPCVariable<int> rpc_vCapturing(&vCapturing, "vCapturing"); |
zainulcharbiwala | 0:ee0649a9025a | 65 | |
zainulcharbiwala | 0:ee0649a9025a | 66 | /* RPC Functions */ |
zainulcharbiwala | 0:ee0649a9025a | 67 | RPCFunction rpc_fCaptureStart(&fCaptureStart, "fCaptureStart"); |
zainulcharbiwala | 0:ee0649a9025a | 68 | RPCFunction rpc_fCaptureStop(&fCaptureStop, "fCaptureStop"); |
zainulcharbiwala | 0:ee0649a9025a | 69 | |
zainulcharbiwala | 0:ee0649a9025a | 70 | |
zainulcharbiwala | 0:ee0649a9025a | 71 | static void wdtKicker() { |
zainulcharbiwala | 0:ee0649a9025a | 72 | wdt.feed(); |
zainulcharbiwala | 0:ee0649a9025a | 73 | } |
zainulcharbiwala | 0:ee0649a9025a | 74 | |
zainulcharbiwala | 0:ee0649a9025a | 75 | static void fCaptureStart(Arguments *arg, Reply *r){ |
zainulcharbiwala | 0:ee0649a9025a | 76 | vCapturing = 1; |
zainulcharbiwala | 0:ee0649a9025a | 77 | ads.startCapture(); |
zainulcharbiwala | 0:ee0649a9025a | 78 | oled.writeString(7, 0, "Capture started."); |
zainulcharbiwala | 0:ee0649a9025a | 79 | } |
zainulcharbiwala | 0:ee0649a9025a | 80 | |
zainulcharbiwala | 0:ee0649a9025a | 81 | static void fCaptureStop(Arguments *arg, Reply *r){ |
zainulcharbiwala | 0:ee0649a9025a | 82 | vCapturing = 0; |
zainulcharbiwala | 0:ee0649a9025a | 83 | ads.stopCapture(); |
zainulcharbiwala | 0:ee0649a9025a | 84 | oled.writeString(7, 0, "Capture stopped."); |
zainulcharbiwala | 0:ee0649a9025a | 85 | } |
zainulcharbiwala | 0:ee0649a9025a | 86 | |
zainulcharbiwala | 0:ee0649a9025a | 87 | static void fOledPage0() { |
zainulcharbiwala | 0:ee0649a9025a | 88 | oled.writeString(5, 0, " HR: xxx bpm "); |
zainulcharbiwala | 0:ee0649a9025a | 89 | oled.writeString(6, 0, " LO: "); |
zainulcharbiwala | 0:ee0649a9025a | 90 | |
zainulcharbiwala | 0:ee0649a9025a | 91 | sprintf(oledstr, "Display Page: %02d", vOledPage); |
zainulcharbiwala | 0:ee0649a9025a | 92 | oled.writeString(7, 0, oledstr); |
zainulcharbiwala | 0:ee0649a9025a | 93 | |
zainulcharbiwala | 0:ee0649a9025a | 94 | } |
zainulcharbiwala | 0:ee0649a9025a | 95 | |
zainulcharbiwala | 0:ee0649a9025a | 96 | static void fOledPageSignal() { |
zainulcharbiwala | 0:ee0649a9025a | 97 | sprintf(oledstr, "Display Page: %02d", vOledPage); |
zainulcharbiwala | 0:ee0649a9025a | 98 | oled.writeString(7, 0, oledstr); |
zainulcharbiwala | 0:ee0649a9025a | 99 | |
zainulcharbiwala | 0:ee0649a9025a | 100 | } |
zainulcharbiwala | 0:ee0649a9025a | 101 | |
zainulcharbiwala | 0:ee0649a9025a | 102 | static void fOledPageNetwork() { |
zainulcharbiwala | 0:ee0649a9025a | 103 | sprintf(oledstr, "Display Page: %02d", vOledPage); |
zainulcharbiwala | 0:ee0649a9025a | 104 | oled.writeString(7, 0, oledstr); |
zainulcharbiwala | 0:ee0649a9025a | 105 | |
zainulcharbiwala | 0:ee0649a9025a | 106 | } |
zainulcharbiwala | 0:ee0649a9025a | 107 | |
zainulcharbiwala | 0:ee0649a9025a | 108 | static void fOledPageSomethingElse() { |
zainulcharbiwala | 0:ee0649a9025a | 109 | sprintf(oledstr, "Display Page: %02d", vOledPage); |
zainulcharbiwala | 0:ee0649a9025a | 110 | oled.writeString(7, 0, oledstr); |
zainulcharbiwala | 0:ee0649a9025a | 111 | |
zainulcharbiwala | 0:ee0649a9025a | 112 | } |
zainulcharbiwala | 0:ee0649a9025a | 113 | |
zainulcharbiwala | 0:ee0649a9025a | 114 | static void fButtonShortPress() |
zainulcharbiwala | 0:ee0649a9025a | 115 | { |
zainulcharbiwala | 0:ee0649a9025a | 116 | // Scroll to the next page of the oled display |
zainulcharbiwala | 0:ee0649a9025a | 117 | vOledPage++; |
zainulcharbiwala | 0:ee0649a9025a | 118 | if (vOledPage > OLEDPAGEMAX) { |
zainulcharbiwala | 0:ee0649a9025a | 119 | vOledPage = 0; |
zainulcharbiwala | 0:ee0649a9025a | 120 | } |
zainulcharbiwala | 0:ee0649a9025a | 121 | if (vOledPage == 0) { |
zainulcharbiwala | 0:ee0649a9025a | 122 | fOledPage0(); |
zainulcharbiwala | 0:ee0649a9025a | 123 | } |
zainulcharbiwala | 0:ee0649a9025a | 124 | if (vOledPage >= 1 && vOledPage <= 12) { |
zainulcharbiwala | 0:ee0649a9025a | 125 | fOledPageSignal(); |
zainulcharbiwala | 0:ee0649a9025a | 126 | } |
zainulcharbiwala | 0:ee0649a9025a | 127 | if (vOledPage == 13) { |
zainulcharbiwala | 0:ee0649a9025a | 128 | fOledPageNetwork(); |
zainulcharbiwala | 0:ee0649a9025a | 129 | } |
zainulcharbiwala | 0:ee0649a9025a | 130 | if (vOledPage == 0) { |
zainulcharbiwala | 0:ee0649a9025a | 131 | fOledPageSomethingElse(); |
zainulcharbiwala | 0:ee0649a9025a | 132 | } |
zainulcharbiwala | 0:ee0649a9025a | 133 | } |
zainulcharbiwala | 0:ee0649a9025a | 134 | |
zainulcharbiwala | 0:ee0649a9025a | 135 | static void fButtonLongPress() |
zainulcharbiwala | 0:ee0649a9025a | 136 | { |
zainulcharbiwala | 0:ee0649a9025a | 137 | // If in capture mode, stop capture |
zainulcharbiwala | 0:ee0649a9025a | 138 | // If not in capture mode, start capture |
zainulcharbiwala | 0:ee0649a9025a | 139 | if (vCapturing) { |
zainulcharbiwala | 0:ee0649a9025a | 140 | oled.writeString(7, 0, "Capture Stopping"); |
zainulcharbiwala | 0:ee0649a9025a | 141 | fCaptureStop(NULL, NULL); |
zainulcharbiwala | 0:ee0649a9025a | 142 | } else { |
zainulcharbiwala | 0:ee0649a9025a | 143 | oled.writeString(7, 0, "Capture Starting"); |
zainulcharbiwala | 0:ee0649a9025a | 144 | fCaptureStart(NULL, NULL); |
zainulcharbiwala | 0:ee0649a9025a | 145 | } |
zainulcharbiwala | 0:ee0649a9025a | 146 | } |
zainulcharbiwala | 0:ee0649a9025a | 147 | |
zainulcharbiwala | 0:ee0649a9025a | 148 | |
zainulcharbiwala | 0:ee0649a9025a | 149 | static void oledBattery(uint8_t percentage, uint8_t charging) |
zainulcharbiwala | 0:ee0649a9025a | 150 | { |
zainulcharbiwala | 0:ee0649a9025a | 151 | // Hardcoded a 24 column, 1 page high battery meter icon |
zainulcharbiwala | 0:ee0649a9025a | 152 | // It has 18 columns that can be set |
zainulcharbiwala | 0:ee0649a9025a | 153 | uint8_t battimg[24]; |
zainulcharbiwala | 0:ee0649a9025a | 154 | uint8_t i; |
zainulcharbiwala | 0:ee0649a9025a | 155 | percentage=(percentage>100?100:percentage); |
zainulcharbiwala | 0:ee0649a9025a | 156 | memcpy((uint8_t *)battimg, (uint8_t *)iconBattery, 24); |
zainulcharbiwala | 0:ee0649a9025a | 157 | for (i=2; i<2+(18*percentage)/100; i++) { |
zainulcharbiwala | 0:ee0649a9025a | 158 | battimg[i] |= 0x3C; |
zainulcharbiwala | 0:ee0649a9025a | 159 | } |
zainulcharbiwala | 0:ee0649a9025a | 160 | |
zainulcharbiwala | 0:ee0649a9025a | 161 | if (charging) { |
zainulcharbiwala | 0:ee0649a9025a | 162 | for (i=0; i<20; i++) { |
zainulcharbiwala | 0:ee0649a9025a | 163 | battimg[i+2] ^= iconBattChg[i]; |
zainulcharbiwala | 0:ee0649a9025a | 164 | } |
zainulcharbiwala | 0:ee0649a9025a | 165 | } |
zainulcharbiwala | 0:ee0649a9025a | 166 | oled.writeBitmap((uint8_t*) battimg, 0, 0, 104, 127); |
zainulcharbiwala | 0:ee0649a9025a | 167 | } |
zainulcharbiwala | 0:ee0649a9025a | 168 | |
zainulcharbiwala | 0:ee0649a9025a | 169 | static void oledNetwork(uint8_t percentage, const char *mode) |
zainulcharbiwala | 0:ee0649a9025a | 170 | { |
zainulcharbiwala | 0:ee0649a9025a | 171 | // Hardcoded a 16 column, 1 page high network meter icon |
zainulcharbiwala | 0:ee0649a9025a | 172 | // It has 6 columns that can be set |
zainulcharbiwala | 0:ee0649a9025a | 173 | uint8_t netwimg[16]; |
zainulcharbiwala | 0:ee0649a9025a | 174 | percentage=(percentage>100?100:percentage); |
zainulcharbiwala | 0:ee0649a9025a | 175 | memcpy((uint8_t *)netwimg, (uint8_t *)iconNetwork, 16); |
zainulcharbiwala | 0:ee0649a9025a | 176 | |
zainulcharbiwala | 0:ee0649a9025a | 177 | if (percentage > 0) |
zainulcharbiwala | 0:ee0649a9025a | 178 | netwimg[1] = 0xF0; |
zainulcharbiwala | 0:ee0649a9025a | 179 | if (percentage > 16) |
zainulcharbiwala | 0:ee0649a9025a | 180 | netwimg[2] = 0xF0; |
zainulcharbiwala | 0:ee0649a9025a | 181 | if (percentage > 33) |
zainulcharbiwala | 0:ee0649a9025a | 182 | netwimg[6] = 0xFC; |
zainulcharbiwala | 0:ee0649a9025a | 183 | if (percentage > 49) |
zainulcharbiwala | 0:ee0649a9025a | 184 | netwimg[7] = 0xFC; |
zainulcharbiwala | 0:ee0649a9025a | 185 | if (percentage > 66) |
zainulcharbiwala | 0:ee0649a9025a | 186 | netwimg[11] = 0xFF; |
zainulcharbiwala | 0:ee0649a9025a | 187 | if (percentage > 83) |
zainulcharbiwala | 0:ee0649a9025a | 188 | netwimg[12] = 0xFF; |
zainulcharbiwala | 0:ee0649a9025a | 189 | |
zainulcharbiwala | 0:ee0649a9025a | 190 | oled.writeBitmap((uint8_t*) netwimg, 0, 0, 0, 15); |
zainulcharbiwala | 0:ee0649a9025a | 191 | oled.writeString(0, 2, mode); |
zainulcharbiwala | 0:ee0649a9025a | 192 | } |
zainulcharbiwala | 0:ee0649a9025a | 193 | |
zainulcharbiwala | 0:ee0649a9025a | 194 | static void oledTime() |
zainulcharbiwala | 0:ee0649a9025a | 195 | { |
zainulcharbiwala | 0:ee0649a9025a | 196 | int sec = 0, min = 0, hours = 0; |
zainulcharbiwala | 0:ee0649a9025a | 197 | int day = 0, date = 0, month = 0, year = 0; |
zainulcharbiwala | 0:ee0649a9025a | 198 | int ret = 0; |
zainulcharbiwala | 0:ee0649a9025a | 199 | |
zainulcharbiwala | 0:ee0649a9025a | 200 | char timestr[7]; |
zainulcharbiwala | 0:ee0649a9025a | 201 | ret = rtc.gettime( &sec, &min, &hours, &day, &date, &month, &year); |
zainulcharbiwala | 0:ee0649a9025a | 202 | if (ret == 0) { |
zainulcharbiwala | 0:ee0649a9025a | 203 | if (hours == 0) { |
zainulcharbiwala | 0:ee0649a9025a | 204 | sprintf(timestr, "%02d:%02da", hours+12, min); |
zainulcharbiwala | 0:ee0649a9025a | 205 | } else if (hours == 12) { |
zainulcharbiwala | 0:ee0649a9025a | 206 | sprintf(timestr, "%02d:%02dp", hours, min); |
zainulcharbiwala | 0:ee0649a9025a | 207 | } else if (hours>12) { |
zainulcharbiwala | 0:ee0649a9025a | 208 | sprintf(timestr, "%02d:%02dp", hours-12, min); |
zainulcharbiwala | 0:ee0649a9025a | 209 | } else { |
zainulcharbiwala | 0:ee0649a9025a | 210 | sprintf(timestr, "%02d:%02da", hours, min); |
zainulcharbiwala | 0:ee0649a9025a | 211 | } |
zainulcharbiwala | 0:ee0649a9025a | 212 | oled.writeString(0, 5, timestr); |
zainulcharbiwala | 0:ee0649a9025a | 213 | } else { |
zainulcharbiwala | 0:ee0649a9025a | 214 | oled.writeString(0, 5, "00:00!"); |
zainulcharbiwala | 0:ee0649a9025a | 215 | } |
zainulcharbiwala | 0:ee0649a9025a | 216 | |
zainulcharbiwala | 0:ee0649a9025a | 217 | } |
zainulcharbiwala | 0:ee0649a9025a | 218 | |
zainulcharbiwala | 0:ee0649a9025a | 219 | static void fSetTime() |
zainulcharbiwala | 0:ee0649a9025a | 220 | { |
zainulcharbiwala | 0:ee0649a9025a | 221 | } |
zainulcharbiwala | 0:ee0649a9025a | 222 | |
zainulcharbiwala | 0:ee0649a9025a | 223 | void dataReady() |
zainulcharbiwala | 0:ee0649a9025a | 224 | { |
zainulcharbiwala | 0:ee0649a9025a | 225 | ads.readData(buf); |
zainulcharbiwala | 0:ee0649a9025a | 226 | ads.updateLeadOff(buf); |
zainulcharbiwala | 0:ee0649a9025a | 227 | |
zainulcharbiwala | 0:ee0649a9025a | 228 | if (vCapturing) { |
zainulcharbiwala | 0:ee0649a9025a | 229 | // Send it to the serial port |
zainulcharbiwala | 0:ee0649a9025a | 230 | // How much time does this take ? |
zainulcharbiwala | 0:ee0649a9025a | 231 | // We have 2ms until the next interrupt comes |
zainulcharbiwala | 0:ee0649a9025a | 232 | //pc.printf("\r\n%d", tt.read_ms()); |
zainulcharbiwala | 0:ee0649a9025a | 233 | for (int i=0; i<27; i++) { |
zainulcharbiwala | 0:ee0649a9025a | 234 | //if (!(i%3)) pc.printf(" "); |
zainulcharbiwala | 0:ee0649a9025a | 235 | //pc.printf("%02x", buf[i]); |
zainulcharbiwala | 0:ee0649a9025a | 236 | pc.putc(buf[i]); |
zainulcharbiwala | 0:ee0649a9025a | 237 | } |
zainulcharbiwala | 0:ee0649a9025a | 238 | } |
zainulcharbiwala | 0:ee0649a9025a | 239 | myled = !myled; |
zainulcharbiwala | 0:ee0649a9025a | 240 | } |
zainulcharbiwala | 0:ee0649a9025a | 241 | |
zainulcharbiwala | 0:ee0649a9025a | 242 | |
zainulcharbiwala | 0:ee0649a9025a | 243 | |
zainulcharbiwala | 0:ee0649a9025a | 244 | int main() { |
zainulcharbiwala | 0:ee0649a9025a | 245 | uint8_t lev=0; |
zainulcharbiwala | 0:ee0649a9025a | 246 | char ch; |
zainulcharbiwala | 0:ee0649a9025a | 247 | |
zainulcharbiwala | 0:ee0649a9025a | 248 | vOledPage = 0; |
zainulcharbiwala | 0:ee0649a9025a | 249 | vCapturing = 0; |
zainulcharbiwala | 0:ee0649a9025a | 250 | i2c.frequency(400000); // according to the spec the max bitrate for the SSD1308 is 400 kbit/s |
zainulcharbiwala | 0:ee0649a9025a | 251 | battChging.mode(PullUp); |
zainulcharbiwala | 0:ee0649a9025a | 252 | pc.baud(921600); |
zainulcharbiwala | 0:ee0649a9025a | 253 | pc.printf("starting\r\n"); |
zainulcharbiwala | 0:ee0649a9025a | 254 | |
zainulcharbiwala | 0:ee0649a9025a | 255 | wdtTicker.attach(&wdtKicker, 5); |
zainulcharbiwala | 0:ee0649a9025a | 256 | |
zainulcharbiwala | 0:ee0649a9025a | 257 | myled=1; |
zainulcharbiwala | 0:ee0649a9025a | 258 | oled.setDisplayOn(); |
zainulcharbiwala | 0:ee0649a9025a | 259 | oled.writeString(7, 0, "Initializing... "); |
zainulcharbiwala | 0:ee0649a9025a | 260 | ads.initialize(&dataReady); |
zainulcharbiwala | 0:ee0649a9025a | 261 | if (!gauge.open()) { |
zainulcharbiwala | 0:ee0649a9025a | 262 | oled.writeString(7, 0, "Gauge Error !!!"); |
zainulcharbiwala | 0:ee0649a9025a | 263 | wait(5); |
zainulcharbiwala | 0:ee0649a9025a | 264 | } |
zainulcharbiwala | 0:ee0649a9025a | 265 | |
zainulcharbiwala | 0:ee0649a9025a | 266 | fCaptureStart(NULL, NULL); |
zainulcharbiwala | 0:ee0649a9025a | 267 | |
zainulcharbiwala | 0:ee0649a9025a | 268 | while(1) { |
zainulcharbiwala | 0:ee0649a9025a | 269 | wait(0.1); |
zainulcharbiwala | 0:ee0649a9025a | 270 | |
zainulcharbiwala | 0:ee0649a9025a | 271 | // Check if there's a command over RPC |
zainulcharbiwala | 0:ee0649a9025a | 272 | if (pc.readable()) { |
zainulcharbiwala | 0:ee0649a9025a | 273 | pc.gets(rpcInBuf, 256); |
zainulcharbiwala | 0:ee0649a9025a | 274 | RPC::call(rpcInBuf, rpcOutBuf); |
zainulcharbiwala | 0:ee0649a9025a | 275 | //pc.printf("%s", rpcOutBuf); |
zainulcharbiwala | 0:ee0649a9025a | 276 | } |
zainulcharbiwala | 0:ee0649a9025a | 277 | |
zainulcharbiwala | 0:ee0649a9025a | 278 | // Check if there's a user event |
zainulcharbiwala | 0:ee0649a9025a | 279 | if (button.releasing()) { |
zainulcharbiwala | 0:ee0649a9025a | 280 | // Short press |
zainulcharbiwala | 0:ee0649a9025a | 281 | if (button.pressed() < 50) { |
zainulcharbiwala | 0:ee0649a9025a | 282 | fButtonShortPress(); |
zainulcharbiwala | 0:ee0649a9025a | 283 | } |
zainulcharbiwala | 0:ee0649a9025a | 284 | // Long press |
zainulcharbiwala | 0:ee0649a9025a | 285 | if (button.pressed() > 100) { |
zainulcharbiwala | 0:ee0649a9025a | 286 | fButtonLongPress(); |
zainulcharbiwala | 0:ee0649a9025a | 287 | } |
zainulcharbiwala | 0:ee0649a9025a | 288 | } |
zainulcharbiwala | 0:ee0649a9025a | 289 | |
zainulcharbiwala | 0:ee0649a9025a | 290 | // Update battery status icon |
zainulcharbiwala | 0:ee0649a9025a | 291 | oledBattery(gauge.socInt(), !battChging); |
zainulcharbiwala | 0:ee0649a9025a | 292 | // Update time |
zainulcharbiwala | 0:ee0649a9025a | 293 | oledTime(); |
zainulcharbiwala | 0:ee0649a9025a | 294 | // Update network |
zainulcharbiwala | 0:ee0649a9025a | 295 | if (++lev > 100) lev = 0; |
zainulcharbiwala | 0:ee0649a9025a | 296 | oledNetwork(lev, "H"); |
zainulcharbiwala | 0:ee0649a9025a | 297 | |
zainulcharbiwala | 0:ee0649a9025a | 298 | //Print the current state of charge |
zainulcharbiwala | 0:ee0649a9025a | 299 | sprintf(oledstr, "VCell = %.2fV\n", gauge.vcell()); |
zainulcharbiwala | 0:ee0649a9025a | 300 | oled.writeString(3, 0, oledstr); |
zainulcharbiwala | 0:ee0649a9025a | 301 | |
zainulcharbiwala | 0:ee0649a9025a | 302 | //myled = !myled; |
zainulcharbiwala | 0:ee0649a9025a | 303 | } |
zainulcharbiwala | 0:ee0649a9025a | 304 | |
zainulcharbiwala | 0:ee0649a9025a | 305 | |
zainulcharbiwala | 0:ee0649a9025a | 306 | } |