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