IRsensor DemoProgram

Dependencies:   mbed

Committer:
ryuna
Date:
Fri Feb 21 07:23:20 2014 +0000
Revision:
0:99f4010878fa
Child:
1:6c4524bbb546
BallMany_OneFun_Demo @IRsensor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryuna 0:99f4010878fa 1 /*
ryuna 0:99f4010878fa 2 超音波を参考にした
ryuna 0:99f4010878fa 3
ryuna 0:99f4010878fa 4 */
ryuna 0:99f4010878fa 5
ryuna 0:99f4010878fa 6 #include "mbed.h"
ryuna 0:99f4010878fa 7 #define BREAKPT_IR 833
ryuna 0:99f4010878fa 8 #define ERROR_IR 0
ryuna 0:99f4010878fa 9 //#define OVERLINE_IR 46
ryuna 0:99f4010878fa 10 #define ALL_IR 10
ryuna 0:99f4010878fa 11 volatile unsigned int ave[ALL_IR] = {0};
ryuna 0:99f4010878fa 12 Serial pc(USBTX,USBRX);//tx,rx
ryuna 0:99f4010878fa 13 Timer time_ir;
ryuna 0:99f4010878fa 14 PinName num_ir[ALL_IR] = {p21,p22,p23,p24,p25,p26,p27,p28,p29,p30};
ryuna 0:99f4010878fa 15
ryuna 0:99f4010878fa 16 unsigned int moving_ave(int num,unsigned int data){
ryuna 0:99f4010878fa 17 static unsigned int sum[ALL_IR] = {0};
ryuna 0:99f4010878fa 18 static unsigned int temp[ALL_IR][10] = {{0}};
ryuna 0:99f4010878fa 19 //static unsigned int ave[ALL_IR] = {0};
ryuna 0:99f4010878fa 20 sum[num] -= temp[num][9];
ryuna 0:99f4010878fa 21 sum[num] += data;
ryuna 0:99f4010878fa 22 temp[num][9] = temp[num][8];
ryuna 0:99f4010878fa 23 temp[num][8] = temp[num][7];
ryuna 0:99f4010878fa 24 temp[num][7] = temp[num][6];
ryuna 0:99f4010878fa 25 temp[num][6] = temp[num][5];
ryuna 0:99f4010878fa 26 temp[num][5] = temp[num][4];
ryuna 0:99f4010878fa 27 temp[num][4] = temp[num][3];
ryuna 0:99f4010878fa 28 temp[num][3] = temp[num][2];
ryuna 0:99f4010878fa 29 temp[num][2] = temp[num][1];
ryuna 0:99f4010878fa 30 temp[num][1] = temp[num][0];
ryuna 0:99f4010878fa 31 temp[num][0] = data;
ryuna 0:99f4010878fa 32 ave[num] = sum[num]/100;
ryuna 0:99f4010878fa 33
ryuna 0:99f4010878fa 34 /*if(ave[num] >= OVERLINE_IR){
ryuna 0:99f4010878fa 35 ave[num] = 0;
ryuna 0:99f4010878fa 36 }*/
ryuna 0:99f4010878fa 37 return ave[num];
ryuna 0:99f4010878fa 38
ryuna 0:99f4010878fa 39 }
ryuna 0:99f4010878fa 40 unsigned int ir_function (int num){
ryuna 0:99f4010878fa 41 DigitalIn sensor_ir(num_ir[num]);
ryuna 0:99f4010878fa 42 int flag = 0;
ryuna 0:99f4010878fa 43 unsigned int memory = 0;
ryuna 0:99f4010878fa 44 unsigned int temp = 0;
ryuna 0:99f4010878fa 45 flag = 1;
ryuna 0:99f4010878fa 46 time_ir.start();
ryuna 0:99f4010878fa 47 if((sensor_ir)){
ryuna 0:99f4010878fa 48 while((sensor_ir)){
ryuna 0:99f4010878fa 49 if(time_ir.read_us() >= BREAKPT_IR){
ryuna 0:99f4010878fa 50 flag = 0;
ryuna 0:99f4010878fa 51 break;
ryuna 0:99f4010878fa 52 }
ryuna 0:99f4010878fa 53 }
ryuna 0:99f4010878fa 54 }
ryuna 0:99f4010878fa 55 time_ir.stop();
ryuna 0:99f4010878fa 56 time_ir.reset();
ryuna 0:99f4010878fa 57 if(flag){
ryuna 0:99f4010878fa 58 time_ir.start();
ryuna 0:99f4010878fa 59 while(!sensor_ir){//!
ryuna 0:99f4010878fa 60 if(time_ir.read_us() >= BREAKPT_IR){
ryuna 0:99f4010878fa 61 break;
ryuna 0:99f4010878fa 62 }
ryuna 0:99f4010878fa 63 }
ryuna 0:99f4010878fa 64 memory = time_ir.read_us();
ryuna 0:99f4010878fa 65 while(1){
ryuna 0:99f4010878fa 66 if(!sensor_ir){
ryuna 0:99f4010878fa 67 temp = (time_ir.read_us() - memory);
ryuna 0:99f4010878fa 68 time_ir.stop();
ryuna 0:99f4010878fa 69 time_ir.reset();
ryuna 0:99f4010878fa 70 wait(0.01);
ryuna 0:99f4010878fa 71 return temp;
ryuna 0:99f4010878fa 72
ryuna 0:99f4010878fa 73 }
ryuna 0:99f4010878fa 74 }
ryuna 0:99f4010878fa 75 }else{//not found
ryuna 0:99f4010878fa 76
ryuna 0:99f4010878fa 77 }
ryuna 0:99f4010878fa 78 time_ir.stop();
ryuna 0:99f4010878fa 79 time_ir.reset();
ryuna 0:99f4010878fa 80 return ERROR_IR;
ryuna 0:99f4010878fa 81 }
ryuna 0:99f4010878fa 82
ryuna 0:99f4010878fa 83 int main() {
ryuna 0:99f4010878fa 84 int num = 0;
ryuna 0:99f4010878fa 85 unsigned int hangar[ALL_IR] = {0};
ryuna 0:99f4010878fa 86 while(1) {
ryuna 0:99f4010878fa 87
ryuna 0:99f4010878fa 88 hangar[num] = moving_ave(num ,ir_function(num));
ryuna 0:99f4010878fa 89
ryuna 0:99f4010878fa 90 pc.printf("han[%d]=%d ",num, hangar[num]);
ryuna 0:99f4010878fa 91 num++;
ryuna 0:99f4010878fa 92 if(num >= ALL_IR){
ryuna 0:99f4010878fa 93 num = 0;
ryuna 0:99f4010878fa 94 putchar('\n');
ryuna 0:99f4010878fa 95 }
ryuna 0:99f4010878fa 96 }
ryuna 0:99f4010878fa 97 }