測距センサ
シャープの測距センサ(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); } }