
IRsensor DemoProgram
Diff: main.cpp
- Revision:
- 0:99f4010878fa
- Child:
- 1:6c4524bbb546
diff -r 000000000000 -r 99f4010878fa main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Feb 21 07:23:20 2014 +0000 @@ -0,0 +1,97 @@ +/* +超音波を参考にした + +*/ + +#include "mbed.h" +#define BREAKPT_IR 833 +#define ERROR_IR 0 +//#define OVERLINE_IR 46 +#define ALL_IR 10 +volatile unsigned int ave[ALL_IR] = {0}; +Serial pc(USBTX,USBRX);//tx,rx +Timer time_ir; +PinName num_ir[ALL_IR] = {p21,p22,p23,p24,p25,p26,p27,p28,p29,p30}; + +unsigned int moving_ave(int num,unsigned int data){ + static unsigned int sum[ALL_IR] = {0}; + static unsigned int temp[ALL_IR][10] = {{0}}; + //static unsigned int ave[ALL_IR] = {0}; + sum[num] -= temp[num][9]; + sum[num] += data; + temp[num][9] = temp[num][8]; + temp[num][8] = temp[num][7]; + temp[num][7] = temp[num][6]; + temp[num][6] = temp[num][5]; + temp[num][5] = temp[num][4]; + temp[num][4] = temp[num][3]; + temp[num][3] = temp[num][2]; + temp[num][2] = temp[num][1]; + temp[num][1] = temp[num][0]; + temp[num][0] = data; + ave[num] = sum[num]/100; + + /*if(ave[num] >= OVERLINE_IR){ + ave[num] = 0; + }*/ + return ave[num]; + +} +unsigned int ir_function (int num){ + DigitalIn sensor_ir(num_ir[num]); + int flag = 0; + unsigned int memory = 0; + unsigned int temp = 0; + flag = 1; + time_ir.start(); + if((sensor_ir)){ + while((sensor_ir)){ + if(time_ir.read_us() >= BREAKPT_IR){ + flag = 0; + break; + } + } + } + time_ir.stop(); + time_ir.reset(); + if(flag){ + time_ir.start(); + while(!sensor_ir){//! + if(time_ir.read_us() >= BREAKPT_IR){ + break; + } + } + memory = time_ir.read_us(); + while(1){ + if(!sensor_ir){ + temp = (time_ir.read_us() - memory); + time_ir.stop(); + time_ir.reset(); + wait(0.01); + return temp; + + } + } + }else{//not found + + } + time_ir.stop(); + time_ir.reset(); + return ERROR_IR; +} + +int main() { + int num = 0; + unsigned int hangar[ALL_IR] = {0}; + while(1) { + + hangar[num] = moving_ave(num ,ir_function(num)); + + pc.printf("han[%d]=%d ",num, hangar[num]); + num++; + if(num >= ALL_IR){ + num = 0; + putchar('\n'); + } + } +}