a

Dependencies:   mbed

Committer:
yusuke_robocup
Date:
Wed Feb 27 02:34:05 2013 +0000
Revision:
0:52c8d2aa9944
ping)))

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yusuke_robocup 0:52c8d2aa9944 1 #include "mbed.h"
yusuke_robocup 0:52c8d2aa9944 2
yusuke_robocup 0:52c8d2aa9944 3 #define PING_ERR 0xFFFF
yusuke_robocup 0:52c8d2aa9944 4
yusuke_robocup 0:52c8d2aa9944 5 Timer timer1;
yusuke_robocup 0:52c8d2aa9944 6 Serial pc(USBTX, USBRX); // tx, rx
yusuke_robocup 0:52c8d2aa9944 7
yusuke_robocup 0:52c8d2aa9944 8
yusuke_robocup 0:52c8d2aa9944 9 uint16_t moving_ave_5point(uint16_t data)
yusuke_robocup 0:52c8d2aa9944 10 {
yusuke_robocup 0:52c8d2aa9944 11 static uint16_t tmp[5] = {0};
yusuke_robocup 0:52c8d2aa9944 12 static uint32_t sum = 0;
yusuke_robocup 0:52c8d2aa9944 13 uint8_t i;
yusuke_robocup 0:52c8d2aa9944 14 uint8_t count;
yusuke_robocup 0:52c8d2aa9944 15
yusuke_robocup 0:52c8d2aa9944 16 sum -= tmp[4];
yusuke_robocup 0:52c8d2aa9944 17 sum += data;
yusuke_robocup 0:52c8d2aa9944 18 tmp[4] = tmp[3];
yusuke_robocup 0:52c8d2aa9944 19 tmp[3] = tmp[2];
yusuke_robocup 0:52c8d2aa9944 20 tmp[2] = tmp[1];
yusuke_robocup 0:52c8d2aa9944 21 tmp[1] = tmp[0];
yusuke_robocup 0:52c8d2aa9944 22 tmp[0] = data;
yusuke_robocup 0:52c8d2aa9944 23
yusuke_robocup 0:52c8d2aa9944 24
yusuke_robocup 0:52c8d2aa9944 25 count = 0;
yusuke_robocup 0:52c8d2aa9944 26 for(i=0; i<5; i++){
yusuke_robocup 0:52c8d2aa9944 27 if(tmp[i] == PING_ERR){
yusuke_robocup 0:52c8d2aa9944 28 return PING_ERR;
yusuke_robocup 0:52c8d2aa9944 29 }
yusuke_robocup 0:52c8d2aa9944 30 }
yusuke_robocup 0:52c8d2aa9944 31
yusuke_robocup 0:52c8d2aa9944 32 return sum/5;
yusuke_robocup 0:52c8d2aa9944 33 }
yusuke_robocup 0:52c8d2aa9944 34
yusuke_robocup 0:52c8d2aa9944 35
yusuke_robocup 0:52c8d2aa9944 36 uint16_t readPing (void)
yusuke_robocup 0:52c8d2aa9944 37 {
yusuke_robocup 0:52c8d2aa9944 38
yusuke_robocup 0:52c8d2aa9944 39 DigitalOut PingPinOut(p13);
yusuke_robocup 0:52c8d2aa9944 40 PingPinOut = 1;
yusuke_robocup 0:52c8d2aa9944 41 wait_us(10);
yusuke_robocup 0:52c8d2aa9944 42 PingPinOut = 0;
yusuke_robocup 0:52c8d2aa9944 43 DigitalIn PingPin(p13);
yusuke_robocup 0:52c8d2aa9944 44 //PingPin.mode(PullUp);
yusuke_robocup 0:52c8d2aa9944 45 timer1.reset();
yusuke_robocup 0:52c8d2aa9944 46 while(PingPin == 0){
yusuke_robocup 0:52c8d2aa9944 47 if(timer1.read_us() > 1000){ //1ms以上応答なし
yusuke_robocup 0:52c8d2aa9944 48 //pc.printf("1ms\n");
yusuke_robocup 0:52c8d2aa9944 49 return PING_ERR;
yusuke_robocup 0:52c8d2aa9944 50 }
yusuke_robocup 0:52c8d2aa9944 51 }
yusuke_robocup 0:52c8d2aa9944 52 timer1.reset();
yusuke_robocup 0:52c8d2aa9944 53 while(PingPin == 1){
yusuke_robocup 0:52c8d2aa9944 54 if(timer1.read_us() > 18500){ //18.5ms以上のパルス
yusuke_robocup 0:52c8d2aa9944 55 //printf("18.5ms\n");
yusuke_robocup 0:52c8d2aa9944 56 return PING_ERR;
yusuke_robocup 0:52c8d2aa9944 57 }
yusuke_robocup 0:52c8d2aa9944 58 }
yusuke_robocup 0:52c8d2aa9944 59
yusuke_robocup 0:52c8d2aa9944 60 return timer1.read_us();
yusuke_robocup 0:52c8d2aa9944 61 }
yusuke_robocup 0:52c8d2aa9944 62
yusuke_robocup 0:52c8d2aa9944 63 int main(void)
yusuke_robocup 0:52c8d2aa9944 64 {
yusuke_robocup 0:52c8d2aa9944 65
yusuke_robocup 0:52c8d2aa9944 66 timer1.start();
yusuke_robocup 0:52c8d2aa9944 67
yusuke_robocup 0:52c8d2aa9944 68 for(;;){
yusuke_robocup 0:52c8d2aa9944 69 pc.printf("%d\n",moving_ave_5point(readPing()));
yusuke_robocup 0:52c8d2aa9944 70
yusuke_robocup 0:52c8d2aa9944 71 wait_us(200);
yusuke_robocup 0:52c8d2aa9944 72 }
yusuke_robocup 0:52c8d2aa9944 73 }