Firmware for an Android accessory electric bicycle. See http://www.danielcasner.org/tag/ebike/ for some more information on my build.
Dependencies: AndroidAccessory mbed
throttle.cpp@3:dc564aaf8a81, 2012-08-25 (annotated)
- 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?
User | Revision | Line number | New 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 |