MMlab / Mbed 2 deprecated PING_ultrasonic

Dependencies:   USBDevice mbed

main.cpp

Committer:
ikuta
Date:
2016-09-22
Revision:
2:fed59450f2ed
Parent:
1:5aa590d1f1bf
Child:
3:814cb36d0f90

File content as of revision 2:fed59450f2ed:

#include "mbed.h"
#include "stdio.h"
#include "math.h"

Serial pc(USBTX,USBRX);

DigitalInOut pingPin1(p18);
DigitalInOut pingPin2(p19);

Timer tmr1, tmr2,tmr;
Timeout timeouter;
int flag=0;
float sum1=0,sum2=0,count1=0,count2=0,timecount1=0,timecount2=0,timesum1=0,timesum2=0;
long microsecondsToCentimeters(long microseconds);

void reset()
{
    flag = 0;
    tmr.reset();
    sum1=0,sum2=0,count1=0,count2=0,timecount1=0,timecount2=0,timesum1=0,timesum2=0;
}

int main()
{
    float avg1,avg2,timeavg1,timeavg2;
    pc.baud(115200);
    while (1) {
        long duration1, duration2,USSDistance1, USSDistance2, cm1, cm2, time1,time2;

        pingPin1.output();
        pingPin1 = 0;
        wait_us(2);
        pingPin1 = 1;
        wait_us(5);
        pingPin1 = 0;

        pingPin1.input(); // pulseIn
        tmr1.reset();

        while (!pingPin1); // wait for high
        tmr1.start();
        while (pingPin1); // wait for low
        tmr1.stop();
        duration1 = tmr1.read_us();
        USSDistance1 = duration1;// * 0.0170;

        cm1 = microsecondsToCentimeters(USSDistance1);

        if(15<cm1&&cm1<40) {
            if(flag==0) {
                flag=1;
                tmr.reset();
                tmr.start();
                timeouter.attach(&reset, 5);
            }
            if(flag==1) {
                timeouter.detach();
                timeouter.attach(&reset, 5);
            }
            time1=tmr.read_ms();
            printf("1: %d  %d[ms]", cm1,time1);

            count1++;
            timecount1++;

            sum1=sum1+cm1;   //cm1の値を合計する
            avg1=sum1/count1;    //cm1の平均
            printf("   avg1: %4.2f",avg1);
            
            timesum1=timesum1+time1;    //time1を合計する
            timeavg1=timesum1/timecount1;   //time1の平均
            printf("   timeavg1: %4.2f[ms]\n",timeavg1);

        }

        wait_ms(10);

        pingPin2.output();
        pingPin2 = 0;
        wait_us(2);
        pingPin2 = 1;
        wait_us(5);
        pingPin2 = 0;

        pingPin2.input(); // pulseIn
        tmr2.reset();

        while (!pingPin2); // wait for high
        tmr2.start();
        while (pingPin2); // wait for low
        tmr2.stop();

        duration2 = tmr2.read_us();
        USSDistance2 = duration2;// * 0.0170;

        cm2 = microsecondsToCentimeters(USSDistance2);
        if(15<cm2&&cm2<40) {
            time2=tmr.read_ms();
            printf("                                                   2: %d %d[ms]",cm2,time2);

            count2++;
            timecount2++;
            
            sum2=sum2+cm2;   //cm2の値を合計する
            avg2=sum2/count2;    //cm2の平均
            printf("   avg2: %4.2f",avg2);
            
            timesum2=timesum2+time2;    //time2を合計する
            timeavg2=timesum2/timecount2;   //time2の平均
            printf("   timeavg2:%4.2f[ms]\n",timeavg2);

        }
        wait_ms(10);
        
        
    }
}


long microsecondsToInches(long microseconds)
{
    return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
    return microseconds / 29 / 2;
}