Giles Barton-Owen
/
MbedRanger
Allows the M3Pi to be used as a Sumo robot, using the sharp 100 distance sensors on the front.
SharpDigiDist100/SharpDigiDist100.cpp@0:342c14fb10c0, 2012-03-14 (annotated)
- Committer:
- p07gbar
- Date:
- Wed Mar 14 20:31:09 2012 +0000
- Revision:
- 0:342c14fb10c0
First upload
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
p07gbar | 0:342c14fb10c0 | 1 | #include "SharpDigiDist100.h" |
p07gbar | 0:342c14fb10c0 | 2 | |
p07gbar | 0:342c14fb10c0 | 3 | SharpDigiDist100::SharpDigiDist100(PinName pin):intin(pin),pinin(pin) |
p07gbar | 0:342c14fb10c0 | 4 | { |
p07gbar | 0:342c14fb10c0 | 5 | timer1.reset(); |
p07gbar | 0:342c14fb10c0 | 6 | intin.rise(this,&SharpDigiDist100::onInt); |
p07gbar | 0:342c14fb10c0 | 7 | intin.fall(this,&SharpDigiDist100::onInt); |
p07gbar | 0:342c14fb10c0 | 8 | timer1.start(); |
p07gbar | 0:342c14fb10c0 | 9 | //onInt(); |
p07gbar | 0:342c14fb10c0 | 10 | current = Far; |
p07gbar | 0:342c14fb10c0 | 11 | //last = NA; |
p07gbar | 0:342c14fb10c0 | 12 | onChangeAttached = false; |
p07gbar | 0:342c14fb10c0 | 13 | } |
p07gbar | 0:342c14fb10c0 | 14 | |
p07gbar | 0:342c14fb10c0 | 15 | void SharpDigiDist100::onInt() |
p07gbar | 0:342c14fb10c0 | 16 | { |
p07gbar | 0:342c14fb10c0 | 17 | timer1.stop(); |
p07gbar | 0:342c14fb10c0 | 18 | last = current; |
p07gbar | 0:342c14fb10c0 | 19 | int timeFromLast = timer1.read_ms(); |
p07gbar | 0:342c14fb10c0 | 20 | if (timeFromLast < 100) |
p07gbar | 0:342c14fb10c0 | 21 | { |
p07gbar | 0:342c14fb10c0 | 22 | current = Far; |
p07gbar | 0:342c14fb10c0 | 23 | timeout.attach(this,&SharpDigiDist100::onInt, 0.3); |
p07gbar | 0:342c14fb10c0 | 24 | } |
p07gbar | 0:342c14fb10c0 | 25 | else |
p07gbar | 0:342c14fb10c0 | 26 | { |
p07gbar | 0:342c14fb10c0 | 27 | if(pinin) |
p07gbar | 0:342c14fb10c0 | 28 | { |
p07gbar | 0:342c14fb10c0 | 29 | current = Mid; |
p07gbar | 0:342c14fb10c0 | 30 | } |
p07gbar | 0:342c14fb10c0 | 31 | else |
p07gbar | 0:342c14fb10c0 | 32 | { |
p07gbar | 0:342c14fb10c0 | 33 | current = Near; |
p07gbar | 0:342c14fb10c0 | 34 | } |
p07gbar | 0:342c14fb10c0 | 35 | } |
p07gbar | 0:342c14fb10c0 | 36 | if(current != last) |
p07gbar | 0:342c14fb10c0 | 37 | { |
p07gbar | 0:342c14fb10c0 | 38 | if(onChangeAttached) |
p07gbar | 0:342c14fb10c0 | 39 | { |
p07gbar | 0:342c14fb10c0 | 40 | onChange(); |
p07gbar | 0:342c14fb10c0 | 41 | } |
p07gbar | 0:342c14fb10c0 | 42 | } |
p07gbar | 0:342c14fb10c0 | 43 | timer1.reset(); |
p07gbar | 0:342c14fb10c0 | 44 | timer1.start(); |
p07gbar | 0:342c14fb10c0 | 45 | } |
p07gbar | 0:342c14fb10c0 | 46 | |
p07gbar | 0:342c14fb10c0 | 47 | int SharpDigiDist100::getDistance() |
p07gbar | 0:342c14fb10c0 | 48 | { |
p07gbar | 0:342c14fb10c0 | 49 | return current; |
p07gbar | 0:342c14fb10c0 | 50 | } |
p07gbar | 0:342c14fb10c0 | 51 | |
p07gbar | 0:342c14fb10c0 | 52 | void SharpDigiDist100::attachOnChange(void (*ptr) (void)) |
p07gbar | 0:342c14fb10c0 | 53 | { |
p07gbar | 0:342c14fb10c0 | 54 | onChange = ptr; |
p07gbar | 0:342c14fb10c0 | 55 | onChangeAttached = true; |
p07gbar | 0:342c14fb10c0 | 56 | } |