ジャパンオープン用のLPC824専用プログラム

Dependencies:   mbed-src Ping SDFileSystem

Committer:
lilac0112_1
Date:
Sun Feb 28 06:38:03 2016 +0000
Revision:
1:ea7307724f1c
Parent:
0:6c79a352010b
Child:
2:83b8bf9f0ea1
modified ir format

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lilac0112_1 0:6c79a352010b 1 #include "mbed.h"
lilac0112_1 0:6c79a352010b 2 #include "extern.h"
lilac0112_1 0:6c79a352010b 3
lilac0112_1 0:6c79a352010b 4 #if defined(ULTRA_SONIC) || defined(ULTRA_SONIC_2)
lilac0112_1 0:6c79a352010b 5
lilac0112_1 0:6c79a352010b 6 uint16_t packet, val, order;
lilac0112_1 0:6c79a352010b 7 uint16_t front_dis=0, rear_dis=0;
lilac0112_1 0:6c79a352010b 8
lilac0112_1 0:6c79a352010b 9 void emergency(void){
lilac0112_1 0:6c79a352010b 10 led[1]=1;
lilac0112_1 0:6c79a352010b 11 //front_dis = 0xAA;
lilac0112_1 0:6c79a352010b 12 //rear_dis = 0xBB;
lilac0112_1 0:6c79a352010b 13 val = nucleo.receive();
lilac0112_1 0:6c79a352010b 14 if(val==1){
lilac0112_1 0:6c79a352010b 15 order = nucleo.read();
lilac0112_1 0:6c79a352010b 16 if(order == 0xABCD){
lilac0112_1 0:6c79a352010b 17 packet = ((front_dis<<8)|(rear_dis))&0xFFFF;nucleo.reply(packet);
lilac0112_1 0:6c79a352010b 18 }
lilac0112_1 0:6c79a352010b 19 else{
lilac0112_1 0:6c79a352010b 20 packet = 0xFFFF;nucleo.reply(packet);
lilac0112_1 0:6c79a352010b 21 }
lilac0112_1 0:6c79a352010b 22 //pc.printf("SSSSSSSSSSSSSSSSS%d\r\n", order);
lilac0112_1 0:6c79a352010b 23 }
lilac0112_1 0:6c79a352010b 24 else{
lilac0112_1 0:6c79a352010b 25 //pc.printf("FFFF\r\n");
lilac0112_1 0:6c79a352010b 26 }
lilac0112_1 0:6c79a352010b 27 wait_us(100);
lilac0112_1 0:6c79a352010b 28 led[1]=0;
lilac0112_1 0:6c79a352010b 29 }
lilac0112_1 0:6c79a352010b 30 void Usw_System(void){
lilac0112_1 0:6c79a352010b 31
lilac0112_1 0:6c79a352010b 32 nucleo.format(16, 3);
lilac0112_1 0:6c79a352010b 33 nucleo.frequency(1000000);
lilac0112_1 0:6c79a352010b 34 nucleo.reply(0x0000);
lilac0112_1 0:6c79a352010b 35
lilac0112_1 0:6c79a352010b 36 call.fall(&emergency);
lilac0112_1 0:6c79a352010b 37
lilac0112_1 0:6c79a352010b 38 //led[0]=led[1]=1;
lilac0112_1 0:6c79a352010b 39 while(1){
lilac0112_1 0:6c79a352010b 40
lilac0112_1 0:6c79a352010b 41 led[0]=1;
lilac0112_1 0:6c79a352010b 42 front.Send();
lilac0112_1 0:6c79a352010b 43 wait_ms(30);
lilac0112_1 0:6c79a352010b 44 front_dis = front.Read_cm();
lilac0112_1 0:6c79a352010b 45 if(front_dis>0xFE) front_dis=0xFE;
lilac0112_1 0:6c79a352010b 46
lilac0112_1 0:6c79a352010b 47
lilac0112_1 0:6c79a352010b 48 rear.Send();
lilac0112_1 0:6c79a352010b 49 wait_ms(30);
lilac0112_1 0:6c79a352010b 50 rear_dis = rear.Read_cm();
lilac0112_1 0:6c79a352010b 51 if(rear_dis>0xFE) rear_dis=0xFE;
lilac0112_1 0:6c79a352010b 52 led[0]=0;
lilac0112_1 0:6c79a352010b 53 wait_us(1000);
lilac0112_1 0:6c79a352010b 54 //pc.printf("%d\t%d\t\r\n", front_dis, rear_dis);
lilac0112_1 0:6c79a352010b 55
lilac0112_1 0:6c79a352010b 56 //emergency();
lilac0112_1 0:6c79a352010b 57 }
lilac0112_1 0:6c79a352010b 58 }
lilac0112_1 0:6c79a352010b 59 #endif /*(ULTRA_SONIC) || (ULTRA_SONIC_2)*/
lilac0112_1 0:6c79a352010b 60
lilac0112_1 0:6c79a352010b 61
lilac0112_1 0:6c79a352010b 62 #ifdef IR_SENSOR
lilac0112_1 0:6c79a352010b 63
lilac0112_1 0:6c79a352010b 64 uint8_t ir_notice=0;//4bit
lilac0112_1 1:ea7307724f1c 65 uint8_t ir_val_phase[2];
lilac0112_1 0:6c79a352010b 66 static uint8_t const ir_key=IR_KEY;//4bit
lilac0112_1 0:6c79a352010b 67 uint8_t ir_position[2]={0};//4bit*2
lilac0112_1 0:6c79a352010b 68
lilac0112_1 0:6c79a352010b 69 void emergency(void){
lilac0112_1 1:ea7307724f1c 70
lilac0112_1 0:6c79a352010b 71 uint16_t order,packet,val;
lilac0112_1 0:6c79a352010b 72 //ir_key=0xA;
lilac0112_1 0:6c79a352010b 73 //ir_notice=0xC;
lilac0112_1 0:6c79a352010b 74 //ir_position[1]=0xE;
lilac0112_1 0:6c79a352010b 75 //ir_position[0]=0xF;
lilac0112_1 0:6c79a352010b 76 val = nucleo.receive();
lilac0112_1 0:6c79a352010b 77 if(val==1){
lilac0112_1 0:6c79a352010b 78 order = nucleo.read();
lilac0112_1 0:6c79a352010b 79 if(order == 0xABCD){
lilac0112_1 1:ea7307724f1c 80 //key/phaseL/phaseS/long/short/
lilac0112_1 1:ea7307724f1c 81 // 2/ 3/ 3/ 4/ 4/
lilac0112_1 1:ea7307724f1c 82 packet = (
lilac0112_1 1:ea7307724f1c 83 ((0xC000)&(ir_key<<14)) |//1100000000000000
lilac0112_1 1:ea7307724f1c 84 ((0x3800)&(ir_val_phase[IR_LONG]<<11)) |//0011100000000000
lilac0112_1 1:ea7307724f1c 85 ((0x0700)&(ir_val_phase[IR_SHORT]<<8)) |//0000011100000000
lilac0112_1 1:ea7307724f1c 86 ((0x00F0)&(ir_position[IR_LONG]<<4)) |//0000000011110000
lilac0112_1 1:ea7307724f1c 87 ((0x000F)&(ir_position[IR_SHORT]<<0)) //0000000000001111
lilac0112_1 1:ea7307724f1c 88 )&0xFFFF;
lilac0112_1 1:ea7307724f1c 89
lilac0112_1 1:ea7307724f1c 90 nucleo.reply(packet);
lilac0112_1 0:6c79a352010b 91 }
lilac0112_1 0:6c79a352010b 92 else{
lilac0112_1 0:6c79a352010b 93 packet = 0xFFFF;nucleo.reply(packet);
lilac0112_1 0:6c79a352010b 94 }
lilac0112_1 0:6c79a352010b 95 //pc.printf("SSSSSSSSSSSSSSSSS%d\r\n", order);
lilac0112_1 0:6c79a352010b 96 }
lilac0112_1 0:6c79a352010b 97 else{
lilac0112_1 0:6c79a352010b 98 //pc.f("FFFF\r\n");
lilac0112_1 0:6c79a352010b 99 }
lilac0112_1 0:6c79a352010b 100 }
lilac0112_1 0:6c79a352010b 101 void Ir_System(void){
lilac0112_1 0:6c79a352010b 102
lilac0112_1 0:6c79a352010b 103 uint8_t i;//ic
lilac0112_1 0:6c79a352010b 104 uint8_t j;//ch
lilac0112_1 0:6c79a352010b 105
lilac0112_1 0:6c79a352010b 106 uint8_t num_long;
lilac0112_1 0:6c79a352010b 107 uint8_t num_short;
lilac0112_1 0:6c79a352010b 108
lilac0112_1 0:6c79a352010b 109 uint16_t ir_val_long[8];
lilac0112_1 0:6c79a352010b 110 uint16_t ir_val_short[12];
lilac0112_1 0:6c79a352010b 111
lilac0112_1 0:6c79a352010b 112 uint16_t ir_val, ir_val_diff;
lilac0112_1 0:6c79a352010b 113
lilac0112_1 0:6c79a352010b 114 uint8_t ir_posi;
lilac0112_1 0:6c79a352010b 115 uint8_t ir_posi_long[8];
lilac0112_1 0:6c79a352010b 116 uint8_t ir_posi_short[12];
lilac0112_1 0:6c79a352010b 117 static uint8_t const ch_num[3]={8, 8, 4};
lilac0112_1 0:6c79a352010b 118
lilac0112_1 1:ea7307724f1c 119 static uint16_t const ir_dis_range[2][8]={
lilac0112_1 1:ea7307724f1c 120 {3900, 3000, 2750, 2500, 2250, 2000, 1500, 0, },//IR_SHORT 0
lilac0112_1 1:ea7307724f1c 121 {2000, 1750, 1500, 1250, 1000, 750, 500, 0, },//IR_LONG 1
lilac0112_1 1:ea7307724f1c 122 }
lilac0112_1 1:ea7307724f1c 123
lilac0112_1 0:6c79a352010b 124 nucleo.format(16, 3);
lilac0112_1 0:6c79a352010b 125 nucleo.frequency(1000000);
lilac0112_1 0:6c79a352010b 126 nucleo.reply(0x0000);
lilac0112_1 0:6c79a352010b 127
lilac0112_1 0:6c79a352010b 128 ir.format(8, 3);
lilac0112_1 0:6c79a352010b 129 ir.frequency(1000000);
lilac0112_1 0:6c79a352010b 130
lilac0112_1 0:6c79a352010b 131 //遠距離用電源
lilac0112_1 0:6c79a352010b 132 supply.period(0.010);//T=10[ms]
lilac0112_1 0:6c79a352010b 133 supply.write(0.9);//L...10%,H...90%
lilac0112_1 0:6c79a352010b 134
lilac0112_1 0:6c79a352010b 135 //Nucleoとの通信用のピン変化割り込み
lilac0112_1 0:6c79a352010b 136 //Nucleoとの通信をする際はTeraTermへの出力は控えるべき
lilac0112_1 0:6c79a352010b 137 call.fall(&emergency);
lilac0112_1 0:6c79a352010b 138
lilac0112_1 0:6c79a352010b 139 for(i=0; i<IC_NUM; i++) cs[i]=1;
lilac0112_1 0:6c79a352010b 140 while(1) {
lilac0112_1 0:6c79a352010b 141 //全ての素子の値を検出
lilac0112_1 0:6c79a352010b 142 num_short=0;
lilac0112_1 0:6c79a352010b 143 num_long=0;
lilac0112_1 0:6c79a352010b 144 for(i=0; i<IC_NUM; i++){//IC
lilac0112_1 0:6c79a352010b 145 for(j=0; j<ch_num[i]; j++){//Ch
lilac0112_1 0:6c79a352010b 146 ir_val = read_input(i, j);
lilac0112_1 0:6c79a352010b 147 ir_posi = read_position(i, j);
lilac0112_1 0:6c79a352010b 148
lilac0112_1 0:6c79a352010b 149 if(i==0){
lilac0112_1 0:6c79a352010b 150 ir_val_long[num_long] = ir_val;
lilac0112_1 0:6c79a352010b 151 ir_posi_long[num_long] = ir_posi;
lilac0112_1 0:6c79a352010b 152 num_long++;
lilac0112_1 0:6c79a352010b 153
lilac0112_1 0:6c79a352010b 154 }
lilac0112_1 0:6c79a352010b 155 else{
lilac0112_1 0:6c79a352010b 156 ir_val_short[num_short] = ir_val;
lilac0112_1 0:6c79a352010b 157 ir_posi_short[num_short] = ir_posi;
lilac0112_1 0:6c79a352010b 158 num_short++;
lilac0112_1 0:6c79a352010b 159 }
lilac0112_1 0:6c79a352010b 160
lilac0112_1 0:6c79a352010b 161 }
lilac0112_1 0:6c79a352010b 162 }
lilac0112_1 0:6c79a352010b 163 //バブルソート
lilac0112_1 0:6c79a352010b 164 BubbleSort(ir_val_short, ir_posi_short, 12);
lilac0112_1 0:6c79a352010b 165 BubbleSort(ir_val_long, ir_posi_long, 8);
lilac0112_1 0:6c79a352010b 166
lilac0112_1 0:6c79a352010b 167 //検出した最大値と最小値の差
lilac0112_1 0:6c79a352010b 168 ir_val_diff = ir_val_short[0]-ir_val_short[11];//After bubble
lilac0112_1 0:6c79a352010b 169 //最もボールがあるとされる位置を代入
lilac0112_1 1:ea7307724f1c 170 ir_position[IR_SHORT] = ir_posi_short[11];//After bubble
lilac0112_1 1:ea7307724f1c 171 ir_position[IR_LONG] = ir_posi_long[7];//After bubble
lilac0112_1 0:6c79a352010b 172
lilac0112_1 0:6c79a352010b 173 /*
lilac0112_1 0:6c79a352010b 174 #define IR_NOTE_NONE 0x0
lilac0112_1 0:6c79a352010b 175 #define IR_NOTE_FAR 0x1
lilac0112_1 0:6c79a352010b 176 #define IR_NOTE_CLOSE 0x2
lilac0112_1 0:6c79a352010b 177 #define IR_NOTE_CLOSER 0x3
lilac0112_1 0:6c79a352010b 178 */
lilac0112_1 1:ea7307724f1c 179 //ボールが遠くにあるか,近くか,フィールドにないかを判断(8段階)
lilac0112_1 1:ea7307724f1c 180
lilac0112_1 1:ea7307724f1c 181
lilac0112_1 1:ea7307724f1c 182 //short
lilac0112_1 1:ea7307724f1c 183 ir_val_phase[IR_SHORT] = DIS_7;
lilac0112_1 1:ea7307724f1c 184
lilac0112_1 1:ea7307724f1c 185 if(ir_val_short[11]>=ir_dis_range[IR_SHORT][DIS_7]){
lilac0112_1 1:ea7307724f1c 186 ir_val_phase[IR_SHORT] = DIS_7;
lilac0112_1 1:ea7307724f1c 187 }
lilac0112_1 1:ea7307724f1c 188 else if(ir_val_short[11]>=ir_dis_range[IR_SHORT][DIS_6]){
lilac0112_1 1:ea7307724f1c 189 ir_val_phase[IR_SHORT] = DIS_6;
lilac0112_1 1:ea7307724f1c 190 }
lilac0112_1 1:ea7307724f1c 191 else if(ir_val_short[11]>=ir_dis_range[IR_SHORT][DIS_5]){
lilac0112_1 1:ea7307724f1c 192 ir_val_phase[IR_SHORT] = DIS_5;
lilac0112_1 1:ea7307724f1c 193 }
lilac0112_1 1:ea7307724f1c 194 else if(ir_val_short[11]>=ir_dis_range[IR_SHORT][DIS_4]){
lilac0112_1 1:ea7307724f1c 195 ir_val_phase[IR_SHORT] = DIS_4;
lilac0112_1 1:ea7307724f1c 196 }
lilac0112_1 1:ea7307724f1c 197 else if(ir_val_short[11]>=ir_dis_range[IR_SHORT][DIS_3]){
lilac0112_1 1:ea7307724f1c 198 ir_val_phase[IR_SHORT] = DIS_3;
lilac0112_1 1:ea7307724f1c 199 }
lilac0112_1 1:ea7307724f1c 200 else if(ir_val_short[11]>=ir_dis_range[IR_SHORT][DIS_2]){
lilac0112_1 1:ea7307724f1c 201 ir_val_phase[IR_SHORT] = DIS_2;
lilac0112_1 1:ea7307724f1c 202 }
lilac0112_1 1:ea7307724f1c 203 else if(ir_val_short[11]>=ir_dis_range[IR_SHORT][DIS_1]){
lilac0112_1 1:ea7307724f1c 204 ir_val_phase[IR_SHORT] = DIS_1;
lilac0112_1 1:ea7307724f1c 205 }
lilac0112_1 1:ea7307724f1c 206 else{//ir_val_short[11]>=0
lilac0112_1 1:ea7307724f1c 207 ir_val_phase[IR_SHORT] = DIS_0;
lilac0112_1 1:ea7307724f1c 208 }
lilac0112_1 1:ea7307724f1c 209
lilac0112_1 1:ea7307724f1c 210 //long
lilac0112_1 1:ea7307724f1c 211 ir_val_phase[IR_LONG] = DIS_7;
lilac0112_1 1:ea7307724f1c 212
lilac0112_1 1:ea7307724f1c 213 if(ir_val_long[7]>=ir_dis_range[IR_LONG][DIS_7]){
lilac0112_1 1:ea7307724f1c 214 ir_val_phase[IR_LONG] = DIS_7;
lilac0112_1 1:ea7307724f1c 215 }
lilac0112_1 1:ea7307724f1c 216 else if(ir_val_long[7]>=ir_dis_range[IR_LONG][DIS_6]){
lilac0112_1 1:ea7307724f1c 217 ir_val_phase[IR_LONG] = DIS_6;
lilac0112_1 1:ea7307724f1c 218 }
lilac0112_1 1:ea7307724f1c 219 else if(ir_val_long[7]>=ir_dis_range[IR_LONG][DIS_5]){
lilac0112_1 1:ea7307724f1c 220 ir_val_phase[IR_LONG] = DIS_5;
lilac0112_1 1:ea7307724f1c 221 }
lilac0112_1 1:ea7307724f1c 222 else if(ir_val_long[7]>=ir_dis_range[IR_LONG][DIS_4]){
lilac0112_1 1:ea7307724f1c 223 ir_val_phase[IR_LONG] = DIS_4;
lilac0112_1 1:ea7307724f1c 224 }
lilac0112_1 1:ea7307724f1c 225 else if(ir_val_long[7]>=ir_dis_range[IR_LONG][DIS_3]){
lilac0112_1 1:ea7307724f1c 226 ir_val_phase[IR_LONG] = DIS_3;
lilac0112_1 1:ea7307724f1c 227 }
lilac0112_1 1:ea7307724f1c 228 else if(ir_val_long[7]>=ir_dis_range[IR_LONG][DIS_2]){
lilac0112_1 1:ea7307724f1c 229 ir_val_phase[IR_LONG] = DIS_2;
lilac0112_1 1:ea7307724f1c 230 }
lilac0112_1 1:ea7307724f1c 231 else if(ir_val_long[7]>=ir_dis_range[IR_LONG][DIS_1]){
lilac0112_1 1:ea7307724f1c 232 ir_val_phase[IR_LONG] = DIS_1;
lilac0112_1 1:ea7307724f1c 233 }
lilac0112_1 1:ea7307724f1c 234 else{//ir_val_long[7]>=0
lilac0112_1 1:ea7307724f1c 235 ir_val_phase[IR_LONG] = DIS_0;
lilac0112_1 1:ea7307724f1c 236 }
lilac0112_1 1:ea7307724f1c 237
lilac0112_1 1:ea7307724f1c 238
lilac0112_1 1:ea7307724f1c 239 //old
lilac0112_1 0:6c79a352010b 240 ir_notice = IR_NOTE_NONE;//none
lilac0112_1 0:6c79a352010b 241
lilac0112_1 0:6c79a352010b 242 if((ir_val_short[11]>=3900)&&(1)){
lilac0112_1 0:6c79a352010b 243 if((ir_val_long[7]<=1700)&&(1)){
lilac0112_1 0:6c79a352010b 244 ir_notice = IR_NOTE_FAR;//long_data
lilac0112_1 0:6c79a352010b 245 }
lilac0112_1 0:6c79a352010b 246 else{
lilac0112_1 0:6c79a352010b 247 ir_notice = IR_NOTE_NONE;//none
lilac0112_1 0:6c79a352010b 248 }
lilac0112_1 0:6c79a352010b 249 }
lilac0112_1 0:6c79a352010b 250 else{
lilac0112_1 0:6c79a352010b 251 if((ir_val_short[11]<=2400)&&(1)){
lilac0112_1 0:6c79a352010b 252 if(ir_val_long[7]<=1000){
lilac0112_1 0:6c79a352010b 253 ir_notice = IR_NOTE_CLOSER;//short_data
lilac0112_1 0:6c79a352010b 254 }
lilac0112_1 0:6c79a352010b 255 else{
lilac0112_1 0:6c79a352010b 256 ir_notice = IR_NOTE_FAR;//long_data
lilac0112_1 0:6c79a352010b 257 }
lilac0112_1 0:6c79a352010b 258
lilac0112_1 0:6c79a352010b 259 }
lilac0112_1 0:6c79a352010b 260 else{
lilac0112_1 0:6c79a352010b 261 ir_notice = IR_NOTE_CLOSE;//short_data
lilac0112_1 0:6c79a352010b 262 }
lilac0112_1 0:6c79a352010b 263 }
lilac0112_1 0:6c79a352010b 264
lilac0112_1 0:6c79a352010b 265
lilac0112_1 0:6c79a352010b 266 /*ir_notice = IR_NOTE_NONE;//none
lilac0112_1 0:6c79a352010b 267 if((DIS_MORE_CLOSE<=ir_val_diff)&&(1)){
lilac0112_1 0:6c79a352010b 268 ir_notice = IR_NOTE_CLOSER;//short_data
lilac0112_1 0:6c79a352010b 269 }
lilac0112_1 0:6c79a352010b 270 else if((DIS_CLOSE<=ir_val_diff)&&(ir_val_diff<DIS_MORE_CLOSE)){
lilac0112_1 0:6c79a352010b 271 ir_notice = IR_NOTE_CLOSE;//short_data
lilac0112_1 0:6c79a352010b 272 }
lilac0112_1 0:6c79a352010b 273 else if((DIS_FAR<=ir_val_diff)&&(ir_val_diff<DIS_CLOSE)){
lilac0112_1 0:6c79a352010b 274 ir_notice = IR_NOTE_FAR;//long_data
lilac0112_1 0:6c79a352010b 275 }
lilac0112_1 0:6c79a352010b 276 else if((1)&&(ir_val_diff<DIS_FAR)){
lilac0112_1 0:6c79a352010b 277 ir_notice = IR_NOTE_NONE;//none
lilac0112_1 0:6c79a352010b 278 if(((ir_val_long[0]-ir_val_long[7])>900)&&1){
lilac0112_1 0:6c79a352010b 279 ir_notice = IR_NOTE_FAR;//long_data
lilac0112_1 0:6c79a352010b 280 }
lilac0112_1 0:6c79a352010b 281 }*/
lilac0112_1 0:6c79a352010b 282
lilac0112_1 0:6c79a352010b 283 //デバッグ用のTeraTermへの出力
lilac0112_1 0:6c79a352010b 284
lilac0112_1 0:6c79a352010b 285 /*
lilac0112_1 0:6c79a352010b 286 pc.printf("val_short:%d\t", ir_val_short[11]);//最小検出値(近)
lilac0112_1 0:6c79a352010b 287 pc.printf("val_long:%d\t", ir_val_long[7]);//最小検出値(遠)
lilac0112_1 0:6c79a352010b 288 pc.printf("state_short:%d\t", ir_position[0]);//ボール位置(近)
lilac0112_1 0:6c79a352010b 289 pc.printf("state_long:%d\t", ir_position[1]);//ボール位置(遠)
lilac0112_1 0:6c79a352010b 290 pc.printf("Diff_short:%d\t", ir_val_short[0]-ir_val_short[11]);//検出した最大値と最小値の差(近)
lilac0112_1 0:6c79a352010b 291 pc.printf("Diff_long:%d\t", ir_val_long[0]-ir_val_long[7]);//検出した最大値と最小値の差(遠)
lilac0112_1 0:6c79a352010b 292 pc.printf("notice:%d\t", ir_notice);//判定されたボールの状況
lilac0112_1 0:6c79a352010b 293 pc.printf("\r\n");
lilac0112_1 0:6c79a352010b 294 */
lilac0112_1 0:6c79a352010b 295 /*
lilac0112_1 0:6c79a352010b 296 pc.printf("%Value is ");
lilac0112_1 0:6c79a352010b 297 pc.printf("Dirr_short is %d\t", ir_val_short[0]-ir_val_short[11]);//検出した最大値と最小値の差(近)
lilac0112_1 0:6c79a352010b 298 pc.printf("Dirr_long is %d\t", ir_val_long[0]-ir_val_long[7]);//検出した最大値と最小値の差(遠)
lilac0112_1 0:6c79a352010b 299 pc.printf("\r\n");
lilac0112_1 0:6c79a352010b 300 */
lilac0112_1 0:6c79a352010b 301
lilac0112_1 0:6c79a352010b 302 //検出した値全てを出力(バブルソートすると位置が変わるので注意)
lilac0112_1 0:6c79a352010b 303 /*pc.printf("%Value is ");
lilac0112_1 0:6c79a352010b 304 for(i=0; i<8; i++){
lilac0112_1 0:6c79a352010b 305 pc.printf("%d\t", ir_val_long[i]);//遠
lilac0112_1 0:6c79a352010b 306 }
lilac0112_1 0:6c79a352010b 307 for(i=0; i<12; i++){
lilac0112_1 0:6c79a352010b 308 pc.printf("%d\t", ir_val_short[i]);//近
lilac0112_1 0:6c79a352010b 309 }
lilac0112_1 0:6c79a352010b 310
lilac0112_1 0:6c79a352010b 311 pc.printf("\r\n");
lilac0112_1 0:6c79a352010b 312 */
lilac0112_1 0:6c79a352010b 313 }
lilac0112_1 0:6c79a352010b 314 }
lilac0112_1 0:6c79a352010b 315 uint16_t read_input(uint8_t ic, uint8_t channel)
lilac0112_1 0:6c79a352010b 316 {
lilac0112_1 0:6c79a352010b 317 uint16_t command_high = START_BIT | MODE_SINGLE | ((channel & 0x04) >> 2);
lilac0112_1 0:6c79a352010b 318 uint16_t command_low = (channel & 0x03) << 6;
lilac0112_1 0:6c79a352010b 319
lilac0112_1 0:6c79a352010b 320 cs[ic] = 0;
lilac0112_1 0:6c79a352010b 321
lilac0112_1 0:6c79a352010b 322 ir.write(command_high);
lilac0112_1 0:6c79a352010b 323 uint16_t high_byte = ir.write(command_low) & 0x0F;
lilac0112_1 0:6c79a352010b 324 uint16_t low_byte = ir.write(0);
lilac0112_1 0:6c79a352010b 325
lilac0112_1 0:6c79a352010b 326 wait_us(1);
lilac0112_1 0:6c79a352010b 327 cs[ic] = 1;
lilac0112_1 0:6c79a352010b 328
lilac0112_1 0:6c79a352010b 329 return (high_byte << 8) | low_byte;//0x0000...0xFFFF
lilac0112_1 0:6c79a352010b 330 }
lilac0112_1 0:6c79a352010b 331 uint8_t read_position(uint8_t ic, uint8_t channel){
lilac0112_1 0:6c79a352010b 332 //DigitalOut cs[IC_NUM] = {cs1, cs2, cs3};
lilac0112_1 0:6c79a352010b 333 static uint8_t const ir_location[3][8]=
lilac0112_1 0:6c79a352010b 334 {//0,1,2...7(ch)
lilac0112_1 0:6c79a352010b 335 {1, 2, 3, 4, 5, 6, 7, 8},//cs1,Long*8
lilac0112_1 0:6c79a352010b 336 {1, 2, 3, 4, 5, 6, 7, 8},//cs2,Short*8
lilac0112_1 0:6c79a352010b 337 {9, 10, 11, 12},//cs3,Short*4
lilac0112_1 0:6c79a352010b 338 };
lilac0112_1 0:6c79a352010b 339 return ir_location[ic][channel];
lilac0112_1 0:6c79a352010b 340 }
lilac0112_1 1:ea7307724f1c 341 void BubbleSort(uint16_t *data, uint8_t *data2, uint8_t n)//降順にする
lilac0112_1 0:6c79a352010b 342 {
lilac0112_1 0:6c79a352010b 343 bool flag;
lilac0112_1 0:6c79a352010b 344 uint8_t i, j;//inclement
lilac0112_1 0:6c79a352010b 345 uint16_t temp;//temporary for value
lilac0112_1 0:6c79a352010b 346 uint8_t temp2;//temporary for position
lilac0112_1 0:6c79a352010b 347
lilac0112_1 0:6c79a352010b 348 j=0;
lilac0112_1 0:6c79a352010b 349 do{
lilac0112_1 0:6c79a352010b 350 j++;
lilac0112_1 0:6c79a352010b 351 flag=0;
lilac0112_1 0:6c79a352010b 352 for (i=0; i<n-j; i++) {
lilac0112_1 0:6c79a352010b 353 if (data[i]<data[i+1]) {
lilac0112_1 0:6c79a352010b 354 // 左右の並びがおかしければ入れ替える
lilac0112_1 0:6c79a352010b 355 flag=1;
lilac0112_1 0:6c79a352010b 356 temp=data[i];
lilac0112_1 0:6c79a352010b 357 data[i]=data[i+1];
lilac0112_1 0:6c79a352010b 358 data[i+1]=temp;
lilac0112_1 0:6c79a352010b 359
lilac0112_1 0:6c79a352010b 360 temp2=data2[i];
lilac0112_1 0:6c79a352010b 361 data2[i]=data2[i+1];
lilac0112_1 0:6c79a352010b 362 data2[i+1]=temp2;
lilac0112_1 0:6c79a352010b 363 }
lilac0112_1 0:6c79a352010b 364 }
lilac0112_1 0:6c79a352010b 365 } while (flag==1); //入れ替えがある間,繰り返す.
lilac0112_1 0:6c79a352010b 366 }
lilac0112_1 0:6c79a352010b 367 #endif /*IR_SENSOR*/