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

Dependencies:   mbed-src Ping SDFileSystem

Committer:
lilac0112_1
Date:
Wed Mar 02 09:18:11 2016 +0000
Revision:
3:8ef3afcf4ade
Parent:
2:83b8bf9f0ea1
Child:
4:a0755903bd6e
somehow

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 3:8ef3afcf4ade 120 {0, 1500, 2000, 2250, 2500, 2750, 3000, 3900, },//IR_SHORT 0
lilac0112_1 3:8ef3afcf4ade 121 {0, 500, 750, 1000, 1250, 1500, 1750, 2000, },//IR_LONG 1
lilac0112_1 3:8ef3afcf4ade 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 2:83b8bf9f0ea1 140
lilac0112_1 2:83b8bf9f0ea1 141 ir_val_phase[IR_SHORT] = DIS_7;
lilac0112_1 2:83b8bf9f0ea1 142 ir_val_phase[IR_LONG] = DIS_7;
lilac0112_1 0:6c79a352010b 143 while(1) {
lilac0112_1 0:6c79a352010b 144 //全ての素子の値を検出
lilac0112_1 0:6c79a352010b 145 num_short=0;
lilac0112_1 0:6c79a352010b 146 num_long=0;
lilac0112_1 0:6c79a352010b 147 for(i=0; i<IC_NUM; i++){//IC
lilac0112_1 0:6c79a352010b 148 for(j=0; j<ch_num[i]; j++){//Ch
lilac0112_1 0:6c79a352010b 149 ir_val = read_input(i, j);
lilac0112_1 0:6c79a352010b 150 ir_posi = read_position(i, j);
lilac0112_1 0:6c79a352010b 151
lilac0112_1 0:6c79a352010b 152 if(i==0){
lilac0112_1 0:6c79a352010b 153 ir_val_long[num_long] = ir_val;
lilac0112_1 0:6c79a352010b 154 ir_posi_long[num_long] = ir_posi;
lilac0112_1 0:6c79a352010b 155 num_long++;
lilac0112_1 0:6c79a352010b 156
lilac0112_1 0:6c79a352010b 157 }
lilac0112_1 0:6c79a352010b 158 else{
lilac0112_1 0:6c79a352010b 159 ir_val_short[num_short] = ir_val;
lilac0112_1 0:6c79a352010b 160 ir_posi_short[num_short] = ir_posi;
lilac0112_1 0:6c79a352010b 161 num_short++;
lilac0112_1 0:6c79a352010b 162 }
lilac0112_1 0:6c79a352010b 163
lilac0112_1 0:6c79a352010b 164 }
lilac0112_1 0:6c79a352010b 165 }
lilac0112_1 0:6c79a352010b 166 //バブルソート
lilac0112_1 0:6c79a352010b 167 BubbleSort(ir_val_short, ir_posi_short, 12);
lilac0112_1 0:6c79a352010b 168 BubbleSort(ir_val_long, ir_posi_long, 8);
lilac0112_1 0:6c79a352010b 169
lilac0112_1 0:6c79a352010b 170 //検出した最大値と最小値の差
lilac0112_1 0:6c79a352010b 171 ir_val_diff = ir_val_short[0]-ir_val_short[11];//After bubble
lilac0112_1 0:6c79a352010b 172 //最もボールがあるとされる位置を代入
lilac0112_1 1:ea7307724f1c 173 ir_position[IR_SHORT] = ir_posi_short[11];//After bubble
lilac0112_1 1:ea7307724f1c 174 ir_position[IR_LONG] = ir_posi_long[7];//After bubble
lilac0112_1 0:6c79a352010b 175
lilac0112_1 0:6c79a352010b 176 /*
lilac0112_1 0:6c79a352010b 177 #define IR_NOTE_NONE 0x0
lilac0112_1 0:6c79a352010b 178 #define IR_NOTE_FAR 0x1
lilac0112_1 0:6c79a352010b 179 #define IR_NOTE_CLOSE 0x2
lilac0112_1 0:6c79a352010b 180 #define IR_NOTE_CLOSER 0x3
lilac0112_1 0:6c79a352010b 181 */
lilac0112_1 1:ea7307724f1c 182 //ボールが遠くにあるか,近くか,フィールドにないかを判断(8段階)
lilac0112_1 1:ea7307724f1c 183
lilac0112_1 1:ea7307724f1c 184
lilac0112_1 1:ea7307724f1c 185 //short
lilac0112_1 1:ea7307724f1c 186
lilac0112_1 1:ea7307724f1c 187 if(ir_val_short[11]>=ir_dis_range[IR_SHORT][DIS_7]){
lilac0112_1 1:ea7307724f1c 188 ir_val_phase[IR_SHORT] = DIS_7;
lilac0112_1 1:ea7307724f1c 189 }
lilac0112_1 1:ea7307724f1c 190 else if(ir_val_short[11]>=ir_dis_range[IR_SHORT][DIS_6]){
lilac0112_1 1:ea7307724f1c 191 ir_val_phase[IR_SHORT] = DIS_6;
lilac0112_1 1:ea7307724f1c 192 }
lilac0112_1 1:ea7307724f1c 193 else if(ir_val_short[11]>=ir_dis_range[IR_SHORT][DIS_5]){
lilac0112_1 1:ea7307724f1c 194 ir_val_phase[IR_SHORT] = DIS_5;
lilac0112_1 1:ea7307724f1c 195 }
lilac0112_1 1:ea7307724f1c 196 else if(ir_val_short[11]>=ir_dis_range[IR_SHORT][DIS_4]){
lilac0112_1 1:ea7307724f1c 197 ir_val_phase[IR_SHORT] = DIS_4;
lilac0112_1 1:ea7307724f1c 198 }
lilac0112_1 1:ea7307724f1c 199 else if(ir_val_short[11]>=ir_dis_range[IR_SHORT][DIS_3]){
lilac0112_1 1:ea7307724f1c 200 ir_val_phase[IR_SHORT] = DIS_3;
lilac0112_1 1:ea7307724f1c 201 }
lilac0112_1 1:ea7307724f1c 202 else if(ir_val_short[11]>=ir_dis_range[IR_SHORT][DIS_2]){
lilac0112_1 1:ea7307724f1c 203 ir_val_phase[IR_SHORT] = DIS_2;
lilac0112_1 1:ea7307724f1c 204 }
lilac0112_1 1:ea7307724f1c 205 else if(ir_val_short[11]>=ir_dis_range[IR_SHORT][DIS_1]){
lilac0112_1 1:ea7307724f1c 206 ir_val_phase[IR_SHORT] = DIS_1;
lilac0112_1 1:ea7307724f1c 207 }
lilac0112_1 1:ea7307724f1c 208 else{//ir_val_short[11]>=0
lilac0112_1 1:ea7307724f1c 209 ir_val_phase[IR_SHORT] = DIS_0;
lilac0112_1 1:ea7307724f1c 210 }
lilac0112_1 1:ea7307724f1c 211
lilac0112_1 1:ea7307724f1c 212 //long
lilac0112_1 1:ea7307724f1c 213
lilac0112_1 1:ea7307724f1c 214 if(ir_val_long[7]>=ir_dis_range[IR_LONG][DIS_7]){
lilac0112_1 1:ea7307724f1c 215 ir_val_phase[IR_LONG] = DIS_7;
lilac0112_1 1:ea7307724f1c 216 }
lilac0112_1 1:ea7307724f1c 217 else if(ir_val_long[7]>=ir_dis_range[IR_LONG][DIS_6]){
lilac0112_1 1:ea7307724f1c 218 ir_val_phase[IR_LONG] = DIS_6;
lilac0112_1 1:ea7307724f1c 219 }
lilac0112_1 1:ea7307724f1c 220 else if(ir_val_long[7]>=ir_dis_range[IR_LONG][DIS_5]){
lilac0112_1 1:ea7307724f1c 221 ir_val_phase[IR_LONG] = DIS_5;
lilac0112_1 1:ea7307724f1c 222 }
lilac0112_1 1:ea7307724f1c 223 else if(ir_val_long[7]>=ir_dis_range[IR_LONG][DIS_4]){
lilac0112_1 1:ea7307724f1c 224 ir_val_phase[IR_LONG] = DIS_4;
lilac0112_1 1:ea7307724f1c 225 }
lilac0112_1 1:ea7307724f1c 226 else if(ir_val_long[7]>=ir_dis_range[IR_LONG][DIS_3]){
lilac0112_1 1:ea7307724f1c 227 ir_val_phase[IR_LONG] = DIS_3;
lilac0112_1 1:ea7307724f1c 228 }
lilac0112_1 1:ea7307724f1c 229 else if(ir_val_long[7]>=ir_dis_range[IR_LONG][DIS_2]){
lilac0112_1 1:ea7307724f1c 230 ir_val_phase[IR_LONG] = DIS_2;
lilac0112_1 1:ea7307724f1c 231 }
lilac0112_1 1:ea7307724f1c 232 else if(ir_val_long[7]>=ir_dis_range[IR_LONG][DIS_1]){
lilac0112_1 1:ea7307724f1c 233 ir_val_phase[IR_LONG] = DIS_1;
lilac0112_1 1:ea7307724f1c 234 }
lilac0112_1 1:ea7307724f1c 235 else{//ir_val_long[7]>=0
lilac0112_1 1:ea7307724f1c 236 ir_val_phase[IR_LONG] = DIS_0;
lilac0112_1 1:ea7307724f1c 237 }
lilac0112_1 1:ea7307724f1c 238
lilac0112_1 3:8ef3afcf4ade 239 /*
lilac0112_1 1:ea7307724f1c 240 //old
lilac0112_1 0:6c79a352010b 241 ir_notice = IR_NOTE_NONE;//none
lilac0112_1 0:6c79a352010b 242
lilac0112_1 0:6c79a352010b 243 if((ir_val_short[11]>=3900)&&(1)){
lilac0112_1 0:6c79a352010b 244 if((ir_val_long[7]<=1700)&&(1)){
lilac0112_1 0:6c79a352010b 245 ir_notice = IR_NOTE_FAR;//long_data
lilac0112_1 0:6c79a352010b 246 }
lilac0112_1 0:6c79a352010b 247 else{
lilac0112_1 0:6c79a352010b 248 ir_notice = IR_NOTE_NONE;//none
lilac0112_1 0:6c79a352010b 249 }
lilac0112_1 0:6c79a352010b 250 }
lilac0112_1 0:6c79a352010b 251 else{
lilac0112_1 0:6c79a352010b 252 if((ir_val_short[11]<=2400)&&(1)){
lilac0112_1 0:6c79a352010b 253 if(ir_val_long[7]<=1000){
lilac0112_1 0:6c79a352010b 254 ir_notice = IR_NOTE_CLOSER;//short_data
lilac0112_1 0:6c79a352010b 255 }
lilac0112_1 0:6c79a352010b 256 else{
lilac0112_1 0:6c79a352010b 257 ir_notice = IR_NOTE_FAR;//long_data
lilac0112_1 0:6c79a352010b 258 }
lilac0112_1 0:6c79a352010b 259
lilac0112_1 0:6c79a352010b 260 }
lilac0112_1 0:6c79a352010b 261 else{
lilac0112_1 0:6c79a352010b 262 ir_notice = IR_NOTE_CLOSE;//short_data
lilac0112_1 0:6c79a352010b 263 }
lilac0112_1 0:6c79a352010b 264 }*/
lilac0112_1 0:6c79a352010b 265
lilac0112_1 0:6c79a352010b 266 //デバッグ用のTeraTermへの出力
lilac0112_1 0:6c79a352010b 267
lilac0112_1 0:6c79a352010b 268 pc.printf("val_short:%d\t", ir_val_short[11]);//最小検出値(近)
lilac0112_1 0:6c79a352010b 269 pc.printf("val_long:%d\t", ir_val_long[7]);//最小検出値(遠)
lilac0112_1 0:6c79a352010b 270 pc.printf("state_short:%d\t", ir_position[0]);//ボール位置(近)
lilac0112_1 0:6c79a352010b 271 pc.printf("state_long:%d\t", ir_position[1]);//ボール位置(遠)
lilac0112_1 2:83b8bf9f0ea1 272 //pc.printf("Diff_short:%d\t", ir_val_short[0]-ir_val_short[11]);//検出した最大値と最小値の差(近)
lilac0112_1 2:83b8bf9f0ea1 273 //pc.printf("Diff_long:%d\t", ir_val_long[0]-ir_val_long[7]);//検出した最大値と最小値の差(遠)
lilac0112_1 2:83b8bf9f0ea1 274
lilac0112_1 2:83b8bf9f0ea1 275 pc.printf("ir_val_phase[IR_SHORT]:%d\t", ir_val_phase[IR_SHORT]);//判定されたボールの距離の段階(遠)
lilac0112_1 2:83b8bf9f0ea1 276 pc.printf("ir_val_phase[IR_LONG]:%d\t", ir_val_phase[IR_LONG]);//判定されたボールの距離の段階(遠)
lilac0112_1 2:83b8bf9f0ea1 277
lilac0112_1 2:83b8bf9f0ea1 278 //pc.printf("notice:%d\t", ir_notice);//判定されたボールの状況
lilac0112_1 0:6c79a352010b 279 pc.printf("\r\n");
lilac0112_1 2:83b8bf9f0ea1 280
lilac0112_1 0:6c79a352010b 281 /*
lilac0112_1 0:6c79a352010b 282 pc.printf("%Value is ");
lilac0112_1 0:6c79a352010b 283 pc.printf("Dirr_short is %d\t", ir_val_short[0]-ir_val_short[11]);//検出した最大値と最小値の差(近)
lilac0112_1 0:6c79a352010b 284 pc.printf("Dirr_long is %d\t", ir_val_long[0]-ir_val_long[7]);//検出した最大値と最小値の差(遠)
lilac0112_1 0:6c79a352010b 285 pc.printf("\r\n");
lilac0112_1 0:6c79a352010b 286 */
lilac0112_1 0:6c79a352010b 287
lilac0112_1 0:6c79a352010b 288 //検出した値全てを出力(バブルソートすると位置が変わるので注意)
lilac0112_1 0:6c79a352010b 289 /*pc.printf("%Value is ");
lilac0112_1 0:6c79a352010b 290 for(i=0; i<8; i++){
lilac0112_1 0:6c79a352010b 291 pc.printf("%d\t", ir_val_long[i]);//遠
lilac0112_1 0:6c79a352010b 292 }
lilac0112_1 0:6c79a352010b 293 for(i=0; i<12; i++){
lilac0112_1 0:6c79a352010b 294 pc.printf("%d\t", ir_val_short[i]);//近
lilac0112_1 0:6c79a352010b 295 }
lilac0112_1 0:6c79a352010b 296
lilac0112_1 0:6c79a352010b 297 pc.printf("\r\n");
lilac0112_1 0:6c79a352010b 298 */
lilac0112_1 0:6c79a352010b 299 }
lilac0112_1 0:6c79a352010b 300 }
lilac0112_1 0:6c79a352010b 301 uint16_t read_input(uint8_t ic, uint8_t channel)
lilac0112_1 0:6c79a352010b 302 {
lilac0112_1 0:6c79a352010b 303 uint16_t command_high = START_BIT | MODE_SINGLE | ((channel & 0x04) >> 2);
lilac0112_1 0:6c79a352010b 304 uint16_t command_low = (channel & 0x03) << 6;
lilac0112_1 0:6c79a352010b 305
lilac0112_1 0:6c79a352010b 306 cs[ic] = 0;
lilac0112_1 0:6c79a352010b 307
lilac0112_1 0:6c79a352010b 308 ir.write(command_high);
lilac0112_1 0:6c79a352010b 309 uint16_t high_byte = ir.write(command_low) & 0x0F;
lilac0112_1 0:6c79a352010b 310 uint16_t low_byte = ir.write(0);
lilac0112_1 0:6c79a352010b 311
lilac0112_1 0:6c79a352010b 312 wait_us(1);
lilac0112_1 0:6c79a352010b 313 cs[ic] = 1;
lilac0112_1 0:6c79a352010b 314
lilac0112_1 0:6c79a352010b 315 return (high_byte << 8) | low_byte;//0x0000...0xFFFF
lilac0112_1 0:6c79a352010b 316 }
lilac0112_1 0:6c79a352010b 317 uint8_t read_position(uint8_t ic, uint8_t channel){
lilac0112_1 0:6c79a352010b 318 //DigitalOut cs[IC_NUM] = {cs1, cs2, cs3};
lilac0112_1 0:6c79a352010b 319 static uint8_t const ir_location[3][8]=
lilac0112_1 0:6c79a352010b 320 {//0,1,2...7(ch)
lilac0112_1 0:6c79a352010b 321 {1, 2, 3, 4, 5, 6, 7, 8},//cs1,Long*8
lilac0112_1 0:6c79a352010b 322 {1, 2, 3, 4, 5, 6, 7, 8},//cs2,Short*8
lilac0112_1 0:6c79a352010b 323 {9, 10, 11, 12},//cs3,Short*4
lilac0112_1 0:6c79a352010b 324 };
lilac0112_1 0:6c79a352010b 325 return ir_location[ic][channel];
lilac0112_1 0:6c79a352010b 326 }
lilac0112_1 1:ea7307724f1c 327 void BubbleSort(uint16_t *data, uint8_t *data2, uint8_t n)//降順にする
lilac0112_1 0:6c79a352010b 328 {
lilac0112_1 0:6c79a352010b 329 bool flag;
lilac0112_1 0:6c79a352010b 330 uint8_t i, j;//inclement
lilac0112_1 0:6c79a352010b 331 uint16_t temp;//temporary for value
lilac0112_1 0:6c79a352010b 332 uint8_t temp2;//temporary for position
lilac0112_1 0:6c79a352010b 333
lilac0112_1 0:6c79a352010b 334 j=0;
lilac0112_1 0:6c79a352010b 335 do{
lilac0112_1 0:6c79a352010b 336 j++;
lilac0112_1 0:6c79a352010b 337 flag=0;
lilac0112_1 0:6c79a352010b 338 for (i=0; i<n-j; i++) {
lilac0112_1 0:6c79a352010b 339 if (data[i]<data[i+1]) {
lilac0112_1 0:6c79a352010b 340 // 左右の並びがおかしければ入れ替える
lilac0112_1 0:6c79a352010b 341 flag=1;
lilac0112_1 0:6c79a352010b 342 temp=data[i];
lilac0112_1 0:6c79a352010b 343 data[i]=data[i+1];
lilac0112_1 0:6c79a352010b 344 data[i+1]=temp;
lilac0112_1 0:6c79a352010b 345
lilac0112_1 0:6c79a352010b 346 temp2=data2[i];
lilac0112_1 0:6c79a352010b 347 data2[i]=data2[i+1];
lilac0112_1 0:6c79a352010b 348 data2[i+1]=temp2;
lilac0112_1 0:6c79a352010b 349 }
lilac0112_1 0:6c79a352010b 350 }
lilac0112_1 0:6c79a352010b 351 } while (flag==1); //入れ替えがある間,繰り返す.
lilac0112_1 0:6c79a352010b 352 }
lilac0112_1 0:6c79a352010b 353 #endif /*IR_SENSOR*/