Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:35bb9af90b04, 2019-09-21 (annotated)
- Committer:
- TanakaTarou
- Date:
- Sat Sep 21 11:34:45 2019 +0000
- Revision:
- 0:35bb9af90b04
2019_AR_switching_program
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| TanakaTarou | 0:35bb9af90b04 | 1 | #include "mbed.h" |
| TanakaTarou | 0:35bb9af90b04 | 2 | #include "Mycan.h" |
| TanakaTarou | 0:35bb9af90b04 | 3 | |
| TanakaTarou | 0:35bb9af90b04 | 4 | Mycan can(p30, p29, 100000); //// CAN (PinName rd, PinName td) |
| TanakaTarou | 0:35bb9af90b04 | 5 | |
| TanakaTarou | 0:35bb9af90b04 | 6 | DigitalOut LED[4] = |
| TanakaTarou | 0:35bb9af90b04 | 7 | { |
| TanakaTarou | 0:35bb9af90b04 | 8 | DigitalOut(LED1), |
| TanakaTarou | 0:35bb9af90b04 | 9 | DigitalOut(LED2), |
| TanakaTarou | 0:35bb9af90b04 | 10 | DigitalOut(LED3), |
| TanakaTarou | 0:35bb9af90b04 | 11 | DigitalOut(LED4), |
| TanakaTarou | 0:35bb9af90b04 | 12 | }; |
| TanakaTarou | 0:35bb9af90b04 | 13 | |
| TanakaTarou | 0:35bb9af90b04 | 14 | DigitalOut led_R(p14); |
| TanakaTarou | 0:35bb9af90b04 | 15 | DigitalOut led_B(p18); |
| TanakaTarou | 0:35bb9af90b04 | 16 | |
| TanakaTarou | 0:35bb9af90b04 | 17 | DigitalIn sw[11] = |
| TanakaTarou | 0:35bb9af90b04 | 18 | { |
| TanakaTarou | 0:35bb9af90b04 | 19 | DigitalIn(p5), |
| TanakaTarou | 0:35bb9af90b04 | 20 | DigitalIn(p6), |
| TanakaTarou | 0:35bb9af90b04 | 21 | DigitalIn(p8), |
| TanakaTarou | 0:35bb9af90b04 | 22 | DigitalIn(p10), |
| TanakaTarou | 0:35bb9af90b04 | 23 | DigitalIn(p12), |
| TanakaTarou | 0:35bb9af90b04 | 24 | DigitalIn(p7), |
| TanakaTarou | 0:35bb9af90b04 | 25 | DigitalIn(p9), |
| TanakaTarou | 0:35bb9af90b04 | 26 | DigitalIn(p11), |
| TanakaTarou | 0:35bb9af90b04 | 27 | DigitalIn(p13), |
| TanakaTarou | 0:35bb9af90b04 | 28 | DigitalIn(p16), |
| TanakaTarou | 0:35bb9af90b04 | 29 | DigitalIn(p15) |
| TanakaTarou | 0:35bb9af90b04 | 30 | }; |
| TanakaTarou | 0:35bb9af90b04 | 31 | |
| TanakaTarou | 0:35bb9af90b04 | 32 | Ticker ticker; |
| TanakaTarou | 0:35bb9af90b04 | 33 | Serial pc(USBTX, USBRX); |
| TanakaTarou | 0:35bb9af90b04 | 34 | |
| TanakaTarou | 0:35bb9af90b04 | 35 | void canFnc(); |
| TanakaTarou | 0:35bb9af90b04 | 36 | void readLineData(); |
| TanakaTarou | 0:35bb9af90b04 | 37 | bool T_sw[4], B_sw[4], S_sw, Z_sw, M_sw; |
| TanakaTarou | 0:35bb9af90b04 | 38 | short int send_val[2], line_data[2]; |
| TanakaTarou | 0:35bb9af90b04 | 39 | |
| TanakaTarou | 0:35bb9af90b04 | 40 | int main() |
| TanakaTarou | 0:35bb9af90b04 | 41 | { |
| TanakaTarou | 0:35bb9af90b04 | 42 | for(int i=0; i<11; i++) |
| TanakaTarou | 0:35bb9af90b04 | 43 | sw[i].mode(PullUp); |
| TanakaTarou | 0:35bb9af90b04 | 44 | ticker.attach(&canFnc, 0.0065); |
| TanakaTarou | 0:35bb9af90b04 | 45 | while(1) |
| TanakaTarou | 0:35bb9af90b04 | 46 | { |
| TanakaTarou | 0:35bb9af90b04 | 47 | S_sw = sw[0]; |
| TanakaTarou | 0:35bb9af90b04 | 48 | pc.printf("%d\t", S_sw); |
| TanakaTarou | 0:35bb9af90b04 | 49 | for(int i=0; i<4; i++) { |
| TanakaTarou | 0:35bb9af90b04 | 50 | B_sw[i] = sw[i+1]; |
| TanakaTarou | 0:35bb9af90b04 | 51 | pc.printf("%d\t", B_sw[i]); |
| TanakaTarou | 0:35bb9af90b04 | 52 | } |
| TanakaTarou | 0:35bb9af90b04 | 53 | for(int i=0; i<4; i++) { |
| TanakaTarou | 0:35bb9af90b04 | 54 | T_sw[i] = sw[i+5]; |
| TanakaTarou | 0:35bb9af90b04 | 55 | pc.printf("%d\t", T_sw[i]); |
| TanakaTarou | 0:35bb9af90b04 | 56 | } |
| TanakaTarou | 0:35bb9af90b04 | 57 | Z_sw = sw[9]; |
| TanakaTarou | 0:35bb9af90b04 | 58 | if(Z_sw) { |
| TanakaTarou | 0:35bb9af90b04 | 59 | led_R = 1; |
| TanakaTarou | 0:35bb9af90b04 | 60 | led_B = 0; |
| TanakaTarou | 0:35bb9af90b04 | 61 | } else { |
| TanakaTarou | 0:35bb9af90b04 | 62 | led_R = 0; |
| TanakaTarou | 0:35bb9af90b04 | 63 | led_B = 1; |
| TanakaTarou | 0:35bb9af90b04 | 64 | } |
| TanakaTarou | 0:35bb9af90b04 | 65 | M_sw = sw[10]; |
| TanakaTarou | 0:35bb9af90b04 | 66 | |
| TanakaTarou | 0:35bb9af90b04 | 67 | pc.printf("%d\t", Z_sw); |
| TanakaTarou | 0:35bb9af90b04 | 68 | pc.printf("%d\t", M_sw); |
| TanakaTarou | 0:35bb9af90b04 | 69 | pc.printf("%d\t", send_val[0]); |
| TanakaTarou | 0:35bb9af90b04 | 70 | pc.printf("%d\t", send_val[1]); |
| TanakaTarou | 0:35bb9af90b04 | 71 | pc.printf("%d\t", line_data[0]); |
| TanakaTarou | 0:35bb9af90b04 | 72 | pc.printf("%d\t", line_data[1]); |
| TanakaTarou | 0:35bb9af90b04 | 73 | pc.printf("\n"); |
| TanakaTarou | 0:35bb9af90b04 | 74 | } |
| TanakaTarou | 0:35bb9af90b04 | 75 | } |
| TanakaTarou | 0:35bb9af90b04 | 76 | |
| TanakaTarou | 0:35bb9af90b04 | 77 | void canFnc() |
| TanakaTarou | 0:35bb9af90b04 | 78 | { |
| TanakaTarou | 0:35bb9af90b04 | 79 | send_val[0] = send_val[1] = 0; |
| TanakaTarou | 0:35bb9af90b04 | 80 | if(S_sw) |
| TanakaTarou | 0:35bb9af90b04 | 81 | send_val[0] += 64; |
| TanakaTarou | 0:35bb9af90b04 | 82 | if(B_sw[0]) |
| TanakaTarou | 0:35bb9af90b04 | 83 | send_val[0] += 32; |
| TanakaTarou | 0:35bb9af90b04 | 84 | if(B_sw[1]) |
| TanakaTarou | 0:35bb9af90b04 | 85 | send_val[0] += 16; |
| TanakaTarou | 0:35bb9af90b04 | 86 | if(B_sw[2]) |
| TanakaTarou | 0:35bb9af90b04 | 87 | send_val[0] += 8; |
| TanakaTarou | 0:35bb9af90b04 | 88 | if(B_sw[3]) |
| TanakaTarou | 0:35bb9af90b04 | 89 | send_val[0] += 4; |
| TanakaTarou | 0:35bb9af90b04 | 90 | if(!T_sw[0]) |
| TanakaTarou | 0:35bb9af90b04 | 91 | send_val[0] += 2; |
| TanakaTarou | 0:35bb9af90b04 | 92 | if(!T_sw[1]) |
| TanakaTarou | 0:35bb9af90b04 | 93 | send_val[0] += 1; |
| TanakaTarou | 0:35bb9af90b04 | 94 | if(!T_sw[2]) |
| TanakaTarou | 0:35bb9af90b04 | 95 | send_val[1] += 8; |
| TanakaTarou | 0:35bb9af90b04 | 96 | if(!T_sw[3]) |
| TanakaTarou | 0:35bb9af90b04 | 97 | send_val[1] += 4; |
| TanakaTarou | 0:35bb9af90b04 | 98 | if(Z_sw) |
| TanakaTarou | 0:35bb9af90b04 | 99 | send_val[1] += 2; |
| TanakaTarou | 0:35bb9af90b04 | 100 | if(M_sw) |
| TanakaTarou | 0:35bb9af90b04 | 101 | send_val[1] += 1; |
| TanakaTarou | 0:35bb9af90b04 | 102 | |
| TanakaTarou | 0:35bb9af90b04 | 103 | readLineData(); |
| TanakaTarou | 0:35bb9af90b04 | 104 | |
| TanakaTarou | 0:35bb9af90b04 | 105 | can.setI(2, 0, (short int)(send_val[0])); |
| TanakaTarou | 0:35bb9af90b04 | 106 | can.setI(2, 1, (short int)(send_val[1])); |
| TanakaTarou | 0:35bb9af90b04 | 107 | can.setI(2, 2, (short int)(line_data[0])); |
| TanakaTarou | 0:35bb9af90b04 | 108 | can.setI(2, 3, (short int)(line_data[1])); |
| TanakaTarou | 0:35bb9af90b04 | 109 | LED[0] = can.send(); |
| TanakaTarou | 0:35bb9af90b04 | 110 | } |
| TanakaTarou | 0:35bb9af90b04 | 111 | |
| TanakaTarou | 0:35bb9af90b04 | 112 | void readLineData() |
| TanakaTarou | 0:35bb9af90b04 | 113 | { |
| TanakaTarou | 0:35bb9af90b04 | 114 | int read_line_data[4]; |
| TanakaTarou | 0:35bb9af90b04 | 115 | |
| TanakaTarou | 0:35bb9af90b04 | 116 | for(int i = 0; i < 4; i++) { |
| TanakaTarou | 0:35bb9af90b04 | 117 | can.readI(); |
| TanakaTarou | 0:35bb9af90b04 | 118 | read_line_data[i] = can.get(i+6, 0); |
| TanakaTarou | 0:35bb9af90b04 | 119 | } |
| TanakaTarou | 0:35bb9af90b04 | 120 | |
| TanakaTarou | 0:35bb9af90b04 | 121 | int residue_data, true_num[4], true_all[4]; |
| TanakaTarou | 0:35bb9af90b04 | 122 | |
| TanakaTarou | 0:35bb9af90b04 | 123 | for(int i = 0; i < 4; i++) |
| TanakaTarou | 0:35bb9af90b04 | 124 | { |
| TanakaTarou | 0:35bb9af90b04 | 125 | residue_data = read_line_data[i]; |
| TanakaTarou | 0:35bb9af90b04 | 126 | true_all[i] = true_num[i] = 0; |
| TanakaTarou | 0:35bb9af90b04 | 127 | |
| TanakaTarou | 0:35bb9af90b04 | 128 | if(residue_data < 0) { |
| TanakaTarou | 0:35bb9af90b04 | 129 | if(residue_data == -200) |
| TanakaTarou | 0:35bb9af90b04 | 130 | residue_data = 0; |
| TanakaTarou | 0:35bb9af90b04 | 131 | else residue_data *= -1; |
| TanakaTarou | 0:35bb9af90b04 | 132 | |
| TanakaTarou | 0:35bb9af90b04 | 133 | true_num[i] += 1; |
| TanakaTarou | 0:35bb9af90b04 | 134 | if(i == 1 || i == 3) |
| TanakaTarou | 0:35bb9af90b04 | 135 | true_all[i] += 7 + 8; |
| TanakaTarou | 0:35bb9af90b04 | 136 | else true_all[i] += 7; |
| TanakaTarou | 0:35bb9af90b04 | 137 | } |
| TanakaTarou | 0:35bb9af90b04 | 138 | |
| TanakaTarou | 0:35bb9af90b04 | 139 | if(residue_data >= 64) { |
| TanakaTarou | 0:35bb9af90b04 | 140 | residue_data -= 64; |
| TanakaTarou | 0:35bb9af90b04 | 141 | true_num[i] += 1; |
| TanakaTarou | 0:35bb9af90b04 | 142 | if(i == 1 || i == 3) |
| TanakaTarou | 0:35bb9af90b04 | 143 | true_all[i] += 6 + 8; |
| TanakaTarou | 0:35bb9af90b04 | 144 | else true_all[i] += 6; |
| TanakaTarou | 0:35bb9af90b04 | 145 | } |
| TanakaTarou | 0:35bb9af90b04 | 146 | |
| TanakaTarou | 0:35bb9af90b04 | 147 | if(residue_data >= 32) { |
| TanakaTarou | 0:35bb9af90b04 | 148 | residue_data -= 32; |
| TanakaTarou | 0:35bb9af90b04 | 149 | true_num[i] += 1; |
| TanakaTarou | 0:35bb9af90b04 | 150 | if(i == 1 || i == 3) |
| TanakaTarou | 0:35bb9af90b04 | 151 | true_all[i] += 5 + 8; |
| TanakaTarou | 0:35bb9af90b04 | 152 | else true_all[i] += 5; |
| TanakaTarou | 0:35bb9af90b04 | 153 | } |
| TanakaTarou | 0:35bb9af90b04 | 154 | |
| TanakaTarou | 0:35bb9af90b04 | 155 | if(residue_data >= 16) { |
| TanakaTarou | 0:35bb9af90b04 | 156 | residue_data -= 16; |
| TanakaTarou | 0:35bb9af90b04 | 157 | true_num[i] += 1; |
| TanakaTarou | 0:35bb9af90b04 | 158 | if(i == 1 || i == 3) |
| TanakaTarou | 0:35bb9af90b04 | 159 | true_all[i] += 4 + 8; |
| TanakaTarou | 0:35bb9af90b04 | 160 | else true_all[i] += 4; |
| TanakaTarou | 0:35bb9af90b04 | 161 | } |
| TanakaTarou | 0:35bb9af90b04 | 162 | |
| TanakaTarou | 0:35bb9af90b04 | 163 | if(residue_data >= 8) { |
| TanakaTarou | 0:35bb9af90b04 | 164 | residue_data -= 8; |
| TanakaTarou | 0:35bb9af90b04 | 165 | true_num[i] += 1; |
| TanakaTarou | 0:35bb9af90b04 | 166 | if(i == 1 || i == 3) |
| TanakaTarou | 0:35bb9af90b04 | 167 | true_all[i] += 3 + 8; |
| TanakaTarou | 0:35bb9af90b04 | 168 | else true_all[i] += 3; |
| TanakaTarou | 0:35bb9af90b04 | 169 | } |
| TanakaTarou | 0:35bb9af90b04 | 170 | |
| TanakaTarou | 0:35bb9af90b04 | 171 | if(residue_data >= 4) { |
| TanakaTarou | 0:35bb9af90b04 | 172 | residue_data -= 4; |
| TanakaTarou | 0:35bb9af90b04 | 173 | true_num[i] += 1; |
| TanakaTarou | 0:35bb9af90b04 | 174 | if(i == 1 || i == 3) |
| TanakaTarou | 0:35bb9af90b04 | 175 | true_all[i] += 2 + 8; |
| TanakaTarou | 0:35bb9af90b04 | 176 | else true_all[i] += 2; |
| TanakaTarou | 0:35bb9af90b04 | 177 | } |
| TanakaTarou | 0:35bb9af90b04 | 178 | |
| TanakaTarou | 0:35bb9af90b04 | 179 | if(residue_data >= 2) { |
| TanakaTarou | 0:35bb9af90b04 | 180 | residue_data -= 2; |
| TanakaTarou | 0:35bb9af90b04 | 181 | true_num[i] += 1; |
| TanakaTarou | 0:35bb9af90b04 | 182 | if(i == 1 || i == 3) |
| TanakaTarou | 0:35bb9af90b04 | 183 | true_all[i] += 1 + 8; |
| TanakaTarou | 0:35bb9af90b04 | 184 | else true_all[i] += 1; |
| TanakaTarou | 0:35bb9af90b04 | 185 | } |
| TanakaTarou | 0:35bb9af90b04 | 186 | |
| TanakaTarou | 0:35bb9af90b04 | 187 | if(residue_data >= 1) { |
| TanakaTarou | 0:35bb9af90b04 | 188 | residue_data -= 1; |
| TanakaTarou | 0:35bb9af90b04 | 189 | true_num[i] += 1; |
| TanakaTarou | 0:35bb9af90b04 | 190 | if(i == 1 || i == 3) |
| TanakaTarou | 0:35bb9af90b04 | 191 | true_all[i] += 8; |
| TanakaTarou | 0:35bb9af90b04 | 192 | } |
| TanakaTarou | 0:35bb9af90b04 | 193 | } |
| TanakaTarou | 0:35bb9af90b04 | 194 | |
| TanakaTarou | 0:35bb9af90b04 | 195 | if(true_all[0] + true_all[1] != 0 || true_num[0] + true_num[1] != 0) |
| TanakaTarou | 0:35bb9af90b04 | 196 | line_data[0] = (true_all[0] + true_all[1]) / (true_num[0] + true_num[1]); |
| TanakaTarou | 0:35bb9af90b04 | 197 | else line_data[0] = 0; |
| TanakaTarou | 0:35bb9af90b04 | 198 | |
| TanakaTarou | 0:35bb9af90b04 | 199 | if(true_all[2] + true_all[3] != 0 || true_num[2] + true_num[3] != 0) |
| TanakaTarou | 0:35bb9af90b04 | 200 | line_data[1] = (true_all[2] + true_all[3]) / (true_num[2] + true_num[3]); |
| TanakaTarou | 0:35bb9af90b04 | 201 | else line_data[1] = 0; |
| TanakaTarou | 0:35bb9af90b04 | 202 | } |