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 3:dc564aaf8a81 1 #include "throttle.h"
DanielC 3:dc564aaf8a81 2
DanielC 3:dc564aaf8a81 3 AnalogIn gripThrottle(p17);
DanielC 3:dc564aaf8a81 4 AnalogOut throttleOut(p18);
DanielC 3:dc564aaf8a81 5 DigitalIn gripButton(p6);
DanielC 3:dc564aaf8a81 6
DanielC 3:dc564aaf8a81 7 Throttle* Throttle::instance = NULL;
DanielC 3:dc564aaf8a81 8
DanielC 3:dc564aaf8a81 9 Throttle *Throttle::getThrottle(float *I, float *v_f, float *v_r, float *cadence, AnalogIn* break_l, AnalogIn *break_r) {
DanielC 3:dc564aaf8a81 10 if (instance == NULL) {
DanielC 3:dc564aaf8a81 11 instance = new Throttle(I, v_f, v_r, cadence, break_l, break_r);
DanielC 3:dc564aaf8a81 12 }
DanielC 3:dc564aaf8a81 13 return instance;
DanielC 3:dc564aaf8a81 14 }
DanielC 3:dc564aaf8a81 15
DanielC 3:dc564aaf8a81 16 Throttle::Throttle(float *I, float *v_f, float *v_r, float *cadence, AnalogIn* break_l, AnalogIn *break_r) :
DanielC 3:dc564aaf8a81 17 mode(off), state(waiting),
DanielC 3:dc564aaf8a81 18 I(I), v_f(v_f), v_r(v_r), cadence(cadence),
DanielC 3:dc564aaf8a81 19 brkl(break_l), brkr(break_r),
DanielC 3:dc564aaf8a81 20 target(0.0f), iLimit(0.0f), speedLimit(0.0f),
DanielC 3:dc564aaf8a81 21 enforceSpeedLimit(false)
DanielC 3:dc564aaf8a81 22 {
DanielC 3:dc564aaf8a81 23 throttleOut = 0.0f;
DanielC 3:dc564aaf8a81 24 gripButton.mode(PullUp);
DanielC 3:dc564aaf8a81 25 tick.attach(this, &Throttle::onTick, 0.001);
DanielC 3:dc564aaf8a81 26 }
DanielC 3:dc564aaf8a81 27
DanielC 3:dc564aaf8a81 28 Throttle::~Throttle() {
DanielC 3:dc564aaf8a81 29 tick.detach();
DanielC 3:dc564aaf8a81 30 throttleOut = 0.0f;
DanielC 3:dc564aaf8a81 31 }
DanielC 3:dc564aaf8a81 32
DanielC 3:dc564aaf8a81 33 void Throttle::onTick() {
DanielC 3:dc564aaf8a81 34 if (brkl->read() < break_inhibit_threshold && brkr->read() < break_inhibit_threshold) {
DanielC 3:dc564aaf8a81 35 switch(mode) {
DanielC 3:dc564aaf8a81 36 case off:
DanielC 3:dc564aaf8a81 37 throttleOut = 0.0f;
DanielC 3:dc564aaf8a81 38 break;
DanielC 3:dc564aaf8a81 39 case raw:
DanielC 3:dc564aaf8a81 40 throttleOut = gripThrottle;
DanielC 3:dc564aaf8a81 41 break;
DanielC 3:dc564aaf8a81 42 case cruise_raw:
DanielC 3:dc564aaf8a81 43 throttleOut = target;
DanielC 3:dc564aaf8a81 44 break;
DanielC 3:dc564aaf8a81 45 default:
DanielC 3:dc564aaf8a81 46 throttleOut = 0.0f;
DanielC 3:dc564aaf8a81 47 }
DanielC 3:dc564aaf8a81 48 }
DanielC 3:dc564aaf8a81 49 else {
DanielC 3:dc564aaf8a81 50 state = inhibited;
DanielC 3:dc564aaf8a81 51 }
DanielC 3:dc564aaf8a81 52 }
DanielC 3:dc564aaf8a81 53
DanielC 3:dc564aaf8a81 54 void Throttle::setMode(ThrottleMode m) { mode = m; }
DanielC 3:dc564aaf8a81 55
DanielC 3:dc564aaf8a81 56 void Throttle::setILimit(float I) { iLimit = I; }
DanielC 3:dc564aaf8a81 57
DanielC 3:dc564aaf8a81 58 void Throttle::setSpeedLimit(float v, bool enforce) {
DanielC 3:dc564aaf8a81 59 speedLimit = v;
DanielC 3:dc564aaf8a81 60 enforceSpeedLimit = enforce;
DanielC 3:dc564aaf8a81 61 }
DanielC 3:dc564aaf8a81 62