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

Dependencies:   mbed-src Ping SDFileSystem

Committer:
lilac0112_1
Date:
Sat Feb 27 06:35:13 2016 +0000
Revision:
0:6c79a352010b
Child:
1:ea7307724f1c
subcode for japan open.

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