Miya Miyagawa
/
LineTraceHub
ROBOCON NAGANO 2019 linetrace hub
main.cpp@0:05a2a33c69a2, 2019-07-20 (annotated)
- Committer:
- Ryosei
- Date:
- Sat Jul 20 02:16:23 2019 +0000
- Revision:
- 0:05a2a33c69a2
linetracahub's program
Who changed what in which revision?
User | Revision | Line number | New 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 | } |