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

Dependencies:   AndroidAccessory mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "AndroidAccessory.h"
00003 #include "throttle.h"
00004 
00005 DigitalOut l_running(LED1);
00006 DigitalOut l_cruise(LED2);
00007 DigitalOut l_error(LED3);
00008 DigitalOut l_debug(LED4);
00009 
00010 AnalogIn break_l(p19);
00011 AnalogIn break_r(p20);
00012 
00013 static const size_t OUTL=61;
00014 static const size_t INBL=61;
00015 
00016 class DroidCycleMbed : public AndroidAccessory {
00017 public:
00018     DroidCycleMbed();
00019     
00020     virtual void setupDevice();
00021     virtual void resetDevice();
00022     virtual int callbackRead(u8 *buff, int len);
00023     virtual int callbackWrite();
00024     
00025 private:
00026     void onTick();
00027     void throttleTick();
00028     char buffer[OUTL];
00029     int bcount;
00030     unsigned int blink_counter;
00031     Ticker tick;
00032     Timeout n;
00033     Throttle* thr;
00034     float I, v_f, v_r, cadence;
00035 };
00036 
00037 DroidCycleMbed::DroidCycleMbed() : AndroidAccessory(INBL, OUTL,
00038                                                     "DC Labs",
00039                                                     "DroidCycle",
00040                                                     "Android E-Bike controller interface",
00041                                                     "0.1",
00042                                                     "http://www.danielcasner.org",
00043                                                     "0000000123456789"),
00044                                                     bcount(0),
00045                                                     blink_counter(0),
00046                                                     thr(NULL) {
00047     thr = Throttle::getThrottle(&I, &v_f, &v_r, &cadence, &break_l, &break_r);
00048     tick.attach(this, &DroidCycleMbed::onTick, 0.010);
00049 }
00050 
00051 void DroidCycleMbed::setupDevice() {
00052     for (int i=0; i<OUTL; i++) buffer[i] = 0;
00053     bcount = 0;
00054 }
00055 
00056 void DroidCycleMbed::resetDevice() {
00057     setupDevice();
00058 }
00059 
00060 int DroidCycleMbed::callbackRead(u8 *buf, int len) {
00061     for (int i=0; i<INBL; i++) buf[i] = 0;
00062     
00063     return 0;
00064 }
00065 
00066 int DroidCycleMbed::callbackWrite() {
00067     return false;
00068 }
00069 
00070 
00071 void DroidCycleMbed::onTick() {
00072     blink_counter++;
00073     if (blink_counter < 10) l_running = 1;
00074     else if (blink_counter < 200) l_running = 0;
00075     else blink_counter = 0;
00076 }
00077 
00078 int main() {
00079     DroidCycleMbed instance;
00080     
00081     USBInit();
00082     while (1) {
00083         USBLoop();
00084     }
00085 }