ROBOCON NAGANO 2019 linetrace hub

Dependencies:   mbed

Committer:
Ryosei
Date:
Sat Jul 20 02:16:23 2019 +0000
Revision:
0:05a2a33c69a2
linetracahub's program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ryosei 0:05a2a33c69a2 1 #include "mbed.h"
Ryosei 0:05a2a33c69a2 2 /*
Ryosei 0:05a2a33c69a2 3 マルチプレクサ1
Ryosei 0:05a2a33c69a2 4 selectピン
Ryosei 0:05a2a33c69a2 5 select1_0(1桁目)
Ryosei 0:05a2a33c69a2 6 select1_1(2桁目)
Ryosei 0:05a2a33c69a2 7 select1_2(3桁目)
Ryosei 0:05a2a33c69a2 8 select1_3(4桁目)
Ryosei 0:05a2a33c69a2 9 読み取りピン
Ryosei 0:05a2a33c69a2 10 Z0
Ryosei 0:05a2a33c69a2 11
Ryosei 0:05a2a33c69a2 12 マルチプレクサ2
Ryosei 0:05a2a33c69a2 13 selectピン
Ryosei 0:05a2a33c69a2 14 select2_0(1桁目)
Ryosei 0:05a2a33c69a2 15 select2_1(2桁目)
Ryosei 0:05a2a33c69a2 16 select2_2(3桁目)
Ryosei 0:05a2a33c69a2 17 select2_3(4桁目)
Ryosei 0:05a2a33c69a2 18 読み取りピン
Ryosei 0:05a2a33c69a2 19 Z1
Ryosei 0:05a2a33c69a2 20
Ryosei 0:05a2a33c69a2 21 マルチプレクサ3
Ryosei 0:05a2a33c69a2 22 selectピン
Ryosei 0:05a2a33c69a2 23 select3_0(1桁目)
Ryosei 0:05a2a33c69a2 24 select3_1(2桁目)
Ryosei 0:05a2a33c69a2 25 select3_2(3桁目)
Ryosei 0:05a2a33c69a2 26 select3_3(4桁目)
Ryosei 0:05a2a33c69a2 27 読み取りピン
Ryosei 0:05a2a33c69a2 28 Z2
Ryosei 0:05a2a33c69a2 29 */
Ryosei 0:05a2a33c69a2 30 #define select1_0 D12
Ryosei 0:05a2a33c69a2 31 #define select1_1 A1
Ryosei 0:05a2a33c69a2 32 #define select1_2 D13
Ryosei 0:05a2a33c69a2 33 #define select1_3 A0
Ryosei 0:05a2a33c69a2 34 #define select2_0 D7
Ryosei 0:05a2a33c69a2 35 #define select2_1 D8
Ryosei 0:05a2a33c69a2 36 #define select2_2 D9
Ryosei 0:05a2a33c69a2 37 #define select2_3 D10
Ryosei 0:05a2a33c69a2 38 #define select3_0 A3
Ryosei 0:05a2a33c69a2 39 #define select3_1 A4
Ryosei 0:05a2a33c69a2 40 #define select3_2 A6
Ryosei 0:05a2a33c69a2 41 #define select3_3 A5
Ryosei 0:05a2a33c69a2 42
Ryosei 0:05a2a33c69a2 43 #define Z0 PB_5
Ryosei 0:05a2a33c69a2 44 #define Z1 PB_1
Ryosei 0:05a2a33c69a2 45 #define Z2 PA_3
Ryosei 0:05a2a33c69a2 46
Ryosei 0:05a2a33c69a2 47 DigitalIn yomitori[]={
Ryosei 0:05a2a33c69a2 48 DigitalIn(Z0),
Ryosei 0:05a2a33c69a2 49 DigitalIn(Z1),
Ryosei 0:05a2a33c69a2 50 DigitalIn(Z2),
Ryosei 0:05a2a33c69a2 51 };
Ryosei 0:05a2a33c69a2 52 DigitalOut select1[]={
Ryosei 0:05a2a33c69a2 53 DigitalOut(select1_0),
Ryosei 0:05a2a33c69a2 54 DigitalOut(select1_1),
Ryosei 0:05a2a33c69a2 55 DigitalOut(select1_2),
Ryosei 0:05a2a33c69a2 56 DigitalOut(select1_3),
Ryosei 0:05a2a33c69a2 57 };
Ryosei 0:05a2a33c69a2 58 DigitalOut select2[]={
Ryosei 0:05a2a33c69a2 59 DigitalOut(select2_0),
Ryosei 0:05a2a33c69a2 60 DigitalOut(select2_1),
Ryosei 0:05a2a33c69a2 61 DigitalOut(select2_2),
Ryosei 0:05a2a33c69a2 62 DigitalOut(select2_3),
Ryosei 0:05a2a33c69a2 63 };
Ryosei 0:05a2a33c69a2 64 DigitalOut select3[]={
Ryosei 0:05a2a33c69a2 65 DigitalOut(select3_0),
Ryosei 0:05a2a33c69a2 66 DigitalOut(select3_1),
Ryosei 0:05a2a33c69a2 67 DigitalOut(select3_2),
Ryosei 0:05a2a33c69a2 68 DigitalOut(select3_3),
Ryosei 0:05a2a33c69a2 69 };
Ryosei 0:05a2a33c69a2 70 Serial uart(D1,D0);
Ryosei 0:05a2a33c69a2 71 Serial pc(USBTX,USBRX);
Ryosei 0:05a2a33c69a2 72
Ryosei 0:05a2a33c69a2 73
Ryosei 0:05a2a33c69a2 74 void PinSelect(int pin){
Ryosei 0:05a2a33c69a2 75 bool selectnum[16][4]={
Ryosei 0:05a2a33c69a2 76 {0,0,0,0},
Ryosei 0:05a2a33c69a2 77 {0,0,0,1},
Ryosei 0:05a2a33c69a2 78 {0,0,1,0},
Ryosei 0:05a2a33c69a2 79 {0,0,1,1},
Ryosei 0:05a2a33c69a2 80 {0,1,0,0},
Ryosei 0:05a2a33c69a2 81 {0,1,0,1},
Ryosei 0:05a2a33c69a2 82 {0,1,1,0},
Ryosei 0:05a2a33c69a2 83 {0,1,1,1},
Ryosei 0:05a2a33c69a2 84 {1,0,0,0},
Ryosei 0:05a2a33c69a2 85 {1,0,0,1},
Ryosei 0:05a2a33c69a2 86 {1,0,1,0},
Ryosei 0:05a2a33c69a2 87 {1,0,1,1},
Ryosei 0:05a2a33c69a2 88 {1,1,0,0},
Ryosei 0:05a2a33c69a2 89 {1,1,0,1},
Ryosei 0:05a2a33c69a2 90 {1,1,1,0},
Ryosei 0:05a2a33c69a2 91 {1,1,1,1},
Ryosei 0:05a2a33c69a2 92 };
Ryosei 0:05a2a33c69a2 93 if(pin<=15){
Ryosei 0:05a2a33c69a2 94 select1[0]=selectnum[pin][3];
Ryosei 0:05a2a33c69a2 95 select1[1]=selectnum[pin][2];
Ryosei 0:05a2a33c69a2 96 select1[2]=selectnum[pin][1];
Ryosei 0:05a2a33c69a2 97 select1[3]=selectnum[pin][0];
Ryosei 0:05a2a33c69a2 98 for(int i=0;i<=3;i++){
Ryosei 0:05a2a33c69a2 99 select2[i]=0;
Ryosei 0:05a2a33c69a2 100 select3[i]=0;
Ryosei 0:05a2a33c69a2 101 }
Ryosei 0:05a2a33c69a2 102 }else if(pin<=31){
Ryosei 0:05a2a33c69a2 103 select2[0]=selectnum[pin-16][3];
Ryosei 0:05a2a33c69a2 104 select2[1]=selectnum[pin-16][2];
Ryosei 0:05a2a33c69a2 105 select2[2]=selectnum[pin-16][1];
Ryosei 0:05a2a33c69a2 106 select2[3]=selectnum[pin-16][0];
Ryosei 0:05a2a33c69a2 107 for(int i=0;i<=3;i++){
Ryosei 0:05a2a33c69a2 108 select1[i]=0;
Ryosei 0:05a2a33c69a2 109 select3[i]=0;
Ryosei 0:05a2a33c69a2 110 }
Ryosei 0:05a2a33c69a2 111 }else if(pin<=47){
Ryosei 0:05a2a33c69a2 112 select3[0]=selectnum[pin-32][3];
Ryosei 0:05a2a33c69a2 113 select3[1]=selectnum[pin-32][2];
Ryosei 0:05a2a33c69a2 114 select3[2]=selectnum[pin-32][1];
Ryosei 0:05a2a33c69a2 115 select3[3]=selectnum[pin-32][0];
Ryosei 0:05a2a33c69a2 116 for(int i=0;i<=3;i++){
Ryosei 0:05a2a33c69a2 117 select1[i]=0;
Ryosei 0:05a2a33c69a2 118 select2[i]=0;
Ryosei 0:05a2a33c69a2 119 }
Ryosei 0:05a2a33c69a2 120 }
Ryosei 0:05a2a33c69a2 121 }
Ryosei 0:05a2a33c69a2 122
Ryosei 0:05a2a33c69a2 123 void LineDataRead(int read[48]){
Ryosei 0:05a2a33c69a2 124 for(int i=0;i<=47;i++){
Ryosei 0:05a2a33c69a2 125 PinSelect(i);
Ryosei 0:05a2a33c69a2 126 if(i<=15){
Ryosei 0:05a2a33c69a2 127 read[i]=yomitori[0];
Ryosei 0:05a2a33c69a2 128 }else if(i<=31){
Ryosei 0:05a2a33c69a2 129 read[i]=yomitori[1];
Ryosei 0:05a2a33c69a2 130 }else if(i<=47){
Ryosei 0:05a2a33c69a2 131 read[i]=yomitori[2];
Ryosei 0:05a2a33c69a2 132 }
Ryosei 0:05a2a33c69a2 133 }
Ryosei 0:05a2a33c69a2 134 }
Ryosei 0:05a2a33c69a2 135
Ryosei 0:05a2a33c69a2 136 void DataTrim(char send[6],int data[48]){
Ryosei 0:05a2a33c69a2 137 send[0]=char((data[0]<<7)+(data[1]<<6)+(data[2]<<5)+(data[3]<<4)+(data[4]<<3)+(data[5]<<2)+(data[6]<<1)+(data[7]<<0));
Ryosei 0:05a2a33c69a2 138 send[1]=char((data[8]<<7)+(data[9]<<6)+(data[10]<<5)+(data[11]<<4)+(data[12]<<3)+(data[13]<<2)+(data[14]<<1)+(data[15]<<0));
Ryosei 0:05a2a33c69a2 139 send[2]=char((data[16]<<7)+(data[17]<<6)+(data[18]<<5)+(data[19]<<4)+(data[20]<<3)+(data[21]<<2)+(data[22]<<1)+(data[23]<<0));
Ryosei 0:05a2a33c69a2 140 send[3]=char((data[24]<<7)+(data[25]<<6)+(data[26]<<5)+(data[27]<<4)+(data[28]<<3)+(data[29]<<2)+(data[30]<<1)+(data[31]<<0));
Ryosei 0:05a2a33c69a2 141 send[4]=char((data[32]<<7)+(data[33]<<6)+(data[34]<<5)+(data[35]<<4)+(data[36]<<3)+(data[37]<<2)+(data[38]<<1)+(data[39]<<0));
Ryosei 0:05a2a33c69a2 142 send[5]=char((data[40]<<7)+(data[41]<<6)+(data[42]<<5)+(data[43]<<4)+(data[44]<<3)+(data[45]<<2)+(data[46]<<1)+(data[47]<<0));
Ryosei 0:05a2a33c69a2 143 for(int i=0;i<=5;i++){
Ryosei 0:05a2a33c69a2 144 uart.putc(send[i]);
Ryosei 0:05a2a33c69a2 145 }
Ryosei 0:05a2a33c69a2 146 for(int i=0;i<=47;i++){
Ryosei 0:05a2a33c69a2 147 pc.printf("%d",data[i]);
Ryosei 0:05a2a33c69a2 148
Ryosei 0:05a2a33c69a2 149 }
Ryosei 0:05a2a33c69a2 150 pc.printf("\n");
Ryosei 0:05a2a33c69a2 151 }
Ryosei 0:05a2a33c69a2 152 int readdata[48];
Ryosei 0:05a2a33c69a2 153 char uartdata[6];
Ryosei 0:05a2a33c69a2 154 void Initialize(){
Ryosei 0:05a2a33c69a2 155 for(int i=0;i<=47;i++){
Ryosei 0:05a2a33c69a2 156 readdata[i]=0;
Ryosei 0:05a2a33c69a2 157 }
Ryosei 0:05a2a33c69a2 158 for(int i=0;i<=5;i++){
Ryosei 0:05a2a33c69a2 159 uartdata[i]=0x00;
Ryosei 0:05a2a33c69a2 160 }
Ryosei 0:05a2a33c69a2 161 }
Ryosei 0:05a2a33c69a2 162 DigitalOut uartSE(A7);
Ryosei 0:05a2a33c69a2 163 int main() {
Ryosei 0:05a2a33c69a2 164 pc.baud(9600);
Ryosei 0:05a2a33c69a2 165 uart.baud(38400);
Ryosei 0:05a2a33c69a2 166 Initialize();
Ryosei 0:05a2a33c69a2 167 uartSE=1;
Ryosei 0:05a2a33c69a2 168 while(1) {
Ryosei 0:05a2a33c69a2 169 LineDataRead(readdata);
Ryosei 0:05a2a33c69a2 170 DataTrim(uartdata,readdata);
Ryosei 0:05a2a33c69a2 171 wait(0.01);
Ryosei 0:05a2a33c69a2 172 }
Ryosei 0:05a2a33c69a2 173 }