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