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

Dependencies:   mbed

Committer:
p07gbar
Date:
Wed Mar 14 20:31:09 2012 +0000
Revision:
0:342c14fb10c0
First upload

Who changed what in which revision?

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