響己 千葉 / Mbed 2 deprecated 2019_SwitchNode_AR

Dependencies:   mbed Mycan

Committer:
TanakaTarou
Date:
Sat Sep 21 11:34:45 2019 +0000
Revision:
0:35bb9af90b04
2019_AR_switching_program

Who changed what in which revision?

UserRevisionLine numberNew 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 }