Firmware for an Android accessory electric bicycle. See http://www.danielcasner.org/tag/ebike/ for some more information on my build.
Dependencies: AndroidAccessory mbed
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 }
Generated on Tue Jul 12 2022 18:57:28 by 1.7.2