測距センサ

シャープの測距センサ(GP2Y0A21YK0F)の値をLPC1768のADで読み取りLEDを点灯させる。


#include "mbed.h"


//-----------------------------------------------------------
Serial pc(USBTX, USBRX);
DigitalOut myled(LED1);

//-----------------------------------------------------------
class Led
{
public:
    Led()
    {
        led[0] = new DigitalOut(LED1);
        led[1] = new DigitalOut(LED2);
        led[2] = new DigitalOut(LED3);
        led[3] = new DigitalOut(LED4);
    }
    
    ~Led()
    {
        for(int i=0;i<4;i++){
            delete led[i];
        }
    }

    // level : 0 - 4
    void indicator(int level)
    {
        switch(level){
        case 0: *led[0] = 0; *led[1] = 0; *led[2] = 0; *led[3] = 0; break;
        case 1: *led[0] = 1; *led[1] = 0; *led[2] = 0; *led[3] = 0; break;
        case 2: *led[0] = 1; *led[1] = 1; *led[2] = 0; *led[3] = 0; break;
        case 3: *led[0] = 1; *led[1] = 1; *led[2] = 1; *led[3] = 0; break;
        case 4: *led[0] = 1; *led[1] = 1; *led[2] = 1; *led[3] = 1; break;
        }
    }
    
    void flasher() {
        for(int i=0;i<4;i++){
            *led[i] = 1;
            wait(0.25);
        }
        for(int i=0;i<4;i++){
            *led[i] = 0;
            wait(0.25);
        }
    };

private:
    DigitalOut *led[4];
};




//-----------------------------------------------------------
class DistanceSensor
{
public:
    DistanceSensor(PinName in)
    {
        gp2y = new AnalogIn(in);
    };
    
    ~DistanceSensor()
    {
        delete gp2y;
    };

    uint16_t value(void)
    {
        return gp2y->read_u16();
    };

private:
    AnalogIn *gp2y;
};

//-----------------------------------------------------------
int main() {

    Led leds;
    DistanceSensor *sensor = new DistanceSensor(P1_31);
    
    leds.flasher();
    
    while(1) {
        uint16_t v = sensor->value();
        pc.printf("DISTANCE : %d\n", v);
        
        int level = 0;
        if (v < 10000) level = 0;
        else if (v < 20000) level = 1;
        else if (v < 30000) level = 2;
        else if (v < 40000) level = 3;
        else                level = 4;
        
        leds.indicator(level);
        
        wait(0.2);
    }
}