Allows the M3Pi to be used as a Sumo robot, using the sharp 100 distance sensors on the front. Run away strategy

Dependencies:   mbed

Committer:
jonmarsh
Date:
Mon Jun 18 09:38:17 2012 +0000
Revision:
0:11d0f3e0d1ad
Not tested

Who changed what in which revision?

UserRevisionLine numberNew 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 }