Firmware for an Android accessory electric bicycle. See http://www.danielcasner.org/tag/ebike/ for some more information on my build.

Dependencies:   AndroidAccessory mbed

Committer:
DanielC
Date:
Sat Aug 25 20:09:35 2012 +0000
Revision:
3:dc564aaf8a81
Parent:
2:e2c3c7340fb3
A first public commit. This isn't working code yet but I think it's enough to share to show the structure of what I am developing.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DanielC 0:220280db0a7b 1 #include "mbed.h"
DanielC 0:220280db0a7b 2 #include "AndroidAccessory.h"
DanielC 2:e2c3c7340fb3 3 #include "throttle.h"
DanielC 0:220280db0a7b 4
DanielC 2:e2c3c7340fb3 5 DigitalOut l_running(LED1);
DanielC 2:e2c3c7340fb3 6 DigitalOut l_cruise(LED2);
DanielC 2:e2c3c7340fb3 7 DigitalOut l_error(LED3);
DanielC 2:e2c3c7340fb3 8 DigitalOut l_debug(LED4);
DanielC 2:e2c3c7340fb3 9
DanielC 2:e2c3c7340fb3 10 AnalogIn break_l(p19);
DanielC 2:e2c3c7340fb3 11 AnalogIn break_r(p20);
DanielC 0:220280db0a7b 12
DanielC 0:220280db0a7b 13 static const size_t OUTL=61;
DanielC 0:220280db0a7b 14 static const size_t INBL=61;
DanielC 0:220280db0a7b 15
DanielC 0:220280db0a7b 16 class DroidCycleMbed : public AndroidAccessory {
DanielC 0:220280db0a7b 17 public:
DanielC 1:be88f22fc412 18 DroidCycleMbed();
DanielC 0:220280db0a7b 19
DanielC 1:be88f22fc412 20 virtual void setupDevice();
DanielC 0:220280db0a7b 21 virtual void resetDevice();
DanielC 0:220280db0a7b 22 virtual int callbackRead(u8 *buff, int len);
DanielC 0:220280db0a7b 23 virtual int callbackWrite();
DanielC 0:220280db0a7b 24
DanielC 0:220280db0a7b 25 private:
DanielC 0:220280db0a7b 26 void onTick();
DanielC 2:e2c3c7340fb3 27 void throttleTick();
DanielC 0:220280db0a7b 28 char buffer[OUTL];
DanielC 0:220280db0a7b 29 int bcount;
DanielC 2:e2c3c7340fb3 30 unsigned int blink_counter;
DanielC 0:220280db0a7b 31 Ticker tick;
DanielC 0:220280db0a7b 32 Timeout n;
DanielC 2:e2c3c7340fb3 33 Throttle* thr;
DanielC 2:e2c3c7340fb3 34 float I, v_f, v_r, cadence;
DanielC 0:220280db0a7b 35 };
DanielC 0:220280db0a7b 36
DanielC 1:be88f22fc412 37 DroidCycleMbed::DroidCycleMbed() : AndroidAccessory(INBL, OUTL,
DanielC 2:e2c3c7340fb3 38 "DC Labs",
DanielC 2:e2c3c7340fb3 39 "DroidCycle",
DanielC 2:e2c3c7340fb3 40 "Android E-Bike controller interface",
DanielC 2:e2c3c7340fb3 41 "0.1",
DanielC 2:e2c3c7340fb3 42 "http://www.danielcasner.org",
DanielC 2:e2c3c7340fb3 43 "0000000123456789"),
DanielC 2:e2c3c7340fb3 44 bcount(0),
DanielC 2:e2c3c7340fb3 45 blink_counter(0),
DanielC 2:e2c3c7340fb3 46 thr(NULL) {
DanielC 2:e2c3c7340fb3 47 thr = Throttle::getThrottle(&I, &v_f, &v_r, &cadence, &break_l, &break_r);
DanielC 1:be88f22fc412 48 tick.attach(this, &DroidCycleMbed::onTick, 0.010);
DanielC 1:be88f22fc412 49 }
DanielC 1:be88f22fc412 50
DanielC 0:220280db0a7b 51 void DroidCycleMbed::setupDevice() {
DanielC 0:220280db0a7b 52 for (int i=0; i<OUTL; i++) buffer[i] = 0;
DanielC 0:220280db0a7b 53 bcount = 0;
DanielC 0:220280db0a7b 54 }
DanielC 0:220280db0a7b 55
DanielC 0:220280db0a7b 56 void DroidCycleMbed::resetDevice() {
DanielC 0:220280db0a7b 57 setupDevice();
DanielC 0:220280db0a7b 58 }
DanielC 0:220280db0a7b 59
DanielC 0:220280db0a7b 60 int DroidCycleMbed::callbackRead(u8 *buf, int len) {
DanielC 0:220280db0a7b 61 for (int i=0; i<INBL; i++) buf[i] = 0;
DanielC 0:220280db0a7b 62
DanielC 0:220280db0a7b 63 return 0;
DanielC 0:220280db0a7b 64 }
DanielC 0:220280db0a7b 65
DanielC 0:220280db0a7b 66 int DroidCycleMbed::callbackWrite() {
DanielC 0:220280db0a7b 67 return false;
DanielC 0:220280db0a7b 68 }
DanielC 0:220280db0a7b 69
DanielC 0:220280db0a7b 70
DanielC 0:220280db0a7b 71 void DroidCycleMbed::onTick() {
DanielC 2:e2c3c7340fb3 72 blink_counter++;
DanielC 2:e2c3c7340fb3 73 if (blink_counter < 10) l_running = 1;
DanielC 3:dc564aaf8a81 74 else if (blink_counter < 200) l_running = 0;
DanielC 2:e2c3c7340fb3 75 else blink_counter = 0;
DanielC 0:220280db0a7b 76 }
DanielC 0:220280db0a7b 77
DanielC 0:220280db0a7b 78 int main() {
DanielC 2:e2c3c7340fb3 79 DroidCycleMbed instance;
DanielC 2:e2c3c7340fb3 80
DanielC 2:e2c3c7340fb3 81 USBInit();
DanielC 2:e2c3c7340fb3 82 while (1) {
DanielC 2:e2c3c7340fb3 83 USBLoop();
DanielC 0:220280db0a7b 84 }
DanielC 0:220280db0a7b 85 }