Fumiya Fujisawa
/
BallMany_OneFun_Demo
IRsensor DemoProgram
main.cpp@1:6c4524bbb546, 2014-02-28 (annotated)
- Committer:
- ryuna
- Date:
- Fri Feb 28 08:29:03 2014 +0000
- Revision:
- 1:6c4524bbb546
- Parent:
- 0:99f4010878fa
lettus;
Who changed what in which revision?
User | Revision | Line number | New 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 | 1:6c4524bbb546 | 8 | #define ERROR_IR 0xFFF |
ryuna | 0:99f4010878fa | 9 | //#define OVERLINE_IR 46 |
ryuna | 1:6c4524bbb546 | 10 | #define ALL_IR 1 |
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 | 1:6c4524bbb546 | 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 | } |