mother

Dependencies:   PS3 i2cmaster mbed

Committer:
sgrsn
Date:
Mon Sep 26 10:29:21 2016 +0000
Revision:
0:a6b6c585a378
Child:
1:755d8977d4a3
mother

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sgrsn 0:a6b6c585a378 1 #include "mbed.h"
sgrsn 0:a6b6c585a378 2 #include "PS3.h"
sgrsn 0:a6b6c585a378 3 #include "i2cmaster.h"
sgrsn 0:a6b6c585a378 4 #include "define.h"
sgrsn 0:a6b6c585a378 5
sgrsn 0:a6b6c585a378 6 #define Enter 13
sgrsn 0:a6b6c585a378 7 #define BackSpace 8
sgrsn 0:a6b6c585a378 8 #define Space 32
sgrsn 0:a6b6c585a378 9
sgrsn 0:a6b6c585a378 10 i2c myi2c(p28, p27);
sgrsn 0:a6b6c585a378 11
sgrsn 0:a6b6c585a378 12 int i2ccheck[4] = {};
sgrsn 0:a6b6c585a378 13 int timer = 0;
sgrsn 0:a6b6c585a378 14
sgrsn 0:a6b6c585a378 15 void check()
sgrsn 0:a6b6c585a378 16 {
sgrsn 0:a6b6c585a378 17 timer++;
sgrsn 0:a6b6c585a378 18 /*Slave puted data first by mother cause error*/
sgrsn 0:a6b6c585a378 19 myi2c.WriteSomeData(0xFE, check_reg, 0, 1); //0xFE is imaginary address
sgrsn 0:a6b6c585a378 20 /*then, I puted imaginary address yhe!*/
sgrsn 0:a6b6c585a378 21 myi2c.WriteSomeData(MD1_addr, check_reg, 0, 1);
sgrsn 0:a6b6c585a378 22 myi2c.WriteSomeData(MD2_addr, check_reg, 0, 1);
sgrsn 0:a6b6c585a378 23 myi2c.WriteSomeData(MD3_addr, check_reg, 0, 1);
sgrsn 0:a6b6c585a378 24 myi2c.WriteSomeData(MD4_addr, check_reg, 0, 1);
sgrsn 0:a6b6c585a378 25 myi2c.WriteSomeData(MD5_addr, check_reg, 0, 1);
sgrsn 0:a6b6c585a378 26 myi2c.WriteSomeData(MD6_addr, check_reg, 0, 1);
sgrsn 0:a6b6c585a378 27 myi2c.WriteSomeData(MD7_addr, check_reg, 0, 1);
sgrsn 0:a6b6c585a378 28 myi2c.WriteSomeData(MD8_addr, check_reg, 0, 1);
sgrsn 0:a6b6c585a378 29 myi2c.WriteSomeData(MD9_addr, check_reg, 0, 1);
sgrsn 0:a6b6c585a378 30 myi2c.WriteSomeData(MD10_addr, check_reg, 0, 1);
sgrsn 0:a6b6c585a378 31 myi2c.WriteSomeData(SE1_addr, check_reg, 0, 1);
sgrsn 0:a6b6c585a378 32 myi2c.WriteSomeData(SE2_addr, check_reg, 0, 1);
sgrsn 0:a6b6c585a378 33 myi2c.WriteSomeData(CY1_addr, check_reg, 0, 1);
sgrsn 0:a6b6c585a378 34 }
sgrsn 0:a6b6c585a378 35
sgrsn 0:a6b6c585a378 36 union UNION
sgrsn 0:a6b6c585a378 37 {
sgrsn 0:a6b6c585a378 38 int integer;
sgrsn 0:a6b6c585a378 39 char character[4];
sgrsn 0:a6b6c585a378 40 };
sgrsn 0:a6b6c585a378 41 UNION PM_target[4];
sgrsn 0:a6b6c585a378 42 UNION PM_ofset[4];
sgrsn 0:a6b6c585a378 43 UNION RE_target[4];
sgrsn 0:a6b6c585a378 44 UNION gain;
sgrsn 0:a6b6c585a378 45
sgrsn 0:a6b6c585a378 46 Serial pc(USBTX, USBRX);
sgrsn 0:a6b6c585a378 47 int pcdata = 0;
sgrsn 0:a6b6c585a378 48 int prev_pcdata = 0;
sgrsn 0:a6b6c585a378 49 void getpc();
sgrsn 0:a6b6c585a378 50
sgrsn 0:a6b6c585a378 51 DigitalOut sbdbt_battery(p21);
sgrsn 0:a6b6c585a378 52 DigitalOut xbee_battery(p5);
sgrsn 0:a6b6c585a378 53
sgrsn 0:a6b6c585a378 54 int main()
sgrsn 0:a6b6c585a378 55 {
sgrsn 0:a6b6c585a378 56 NVIC_SetPriority(TIMER0_IRQn, 20);
sgrsn 0:a6b6c585a378 57 NVIC_SetPriority(TIMER1_IRQn, 20);
sgrsn 0:a6b6c585a378 58 NVIC_SetPriority(TIMER2_IRQn, 20);
sgrsn 0:a6b6c585a378 59 NVIC_SetPriority(TIMER3_IRQn, 20);
sgrsn 0:a6b6c585a378 60 NVIC_SetPriority(UART0_IRQn, 10);
sgrsn 0:a6b6c585a378 61 NVIC_SetPriority(UART1_IRQn, 10);
sgrsn 0:a6b6c585a378 62 NVIC_SetPriority(UART2_IRQn, 10);
sgrsn 0:a6b6c585a378 63 NVIC_SetPriority(UART3_IRQn, 10);
sgrsn 0:a6b6c585a378 64 PS3 sbdbt(p13, p14);
sgrsn 0:a6b6c585a378 65 PS3 xbee(p9, p10);
sgrsn 0:a6b6c585a378 66 sbdbt_battery = 1;
sgrsn 0:a6b6c585a378 67 sbdbt.baud(9600);
sgrsn 0:a6b6c585a378 68 xbee_battery = 1;
sgrsn 0:a6b6c585a378 69 xbee.baud(9600);
sgrsn 0:a6b6c585a378 70 //xbee.addattach(sbdbt_to_xbee);
sgrsn 0:a6b6c585a378 71 //sbdbt.addattach(xbee_to_sbdbt);
sgrsn 0:a6b6c585a378 72 pc.attach(getpc);
sgrsn 0:a6b6c585a378 73 myi2c.frequency(1000000);
sgrsn 0:a6b6c585a378 74 Ticker t;
sgrsn 0:a6b6c585a378 75 t.attach(check, 0.1);
sgrsn 0:a6b6c585a378 76 int prev_PM_target[4] = {};
sgrsn 0:a6b6c585a378 77 char sensor1 = 0;
sgrsn 0:a6b6c585a378 78 char sensors[8] = {};
sgrsn 0:a6b6c585a378 79 char sensorsflag[8] = {};
sgrsn 0:a6b6c585a378 80 char sensor2 = 0;
sgrsn 0:a6b6c585a378 81 int gainup = 0;
sgrsn 0:a6b6c585a378 82 int Dpad_deg = 0;
sgrsn 0:a6b6c585a378 83 bool Dpadctrl_flag = 1;
sgrsn 0:a6b6c585a378 84 //0, ue, sita
sgrsn 0:a6b6c585a378 85 int Dpad_table[3][3] = {{ 0, 0, 180}, //0
sgrsn 0:a6b6c585a378 86 { 90, 45, 135}, //migi
sgrsn 0:a6b6c585a378 87 {-90, -45, -135}};//hidari
sgrsn 0:a6b6c585a378 88 int wheel[4] = {};
sgrsn 0:a6b6c585a378 89 int torikomi_taosu_motor = 0;
sgrsn 0:a6b6c585a378 90 int modechange = 0;
sgrsn 0:a6b6c585a378 91 int modechangeflag = 1;
sgrsn 0:a6b6c585a378 92 bool counterwheel = 0;
sgrsn 0:a6b6c585a378 93 bool l1 = 0;
sgrsn 0:a6b6c585a378 94 bool r1 = 0;
sgrsn 0:a6b6c585a378 95 bool l2 = 0;
sgrsn 0:a6b6c585a378 96 bool r2 = 0;
sgrsn 0:a6b6c585a378 97 bool Maru = 0;
sgrsn 0:a6b6c585a378 98 bool Batu = 0;
sgrsn 0:a6b6c585a378 99 bool Sankaku = 0;
sgrsn 0:a6b6c585a378 100 int sankakuflag = 0;
sgrsn 0:a6b6c585a378 101 bool Sikaku = 0;
sgrsn 0:a6b6c585a378 102 bool Ue = 0;
sgrsn 0:a6b6c585a378 103 bool Sita = 0;
sgrsn 0:a6b6c585a378 104 bool Migi = 0;
sgrsn 0:a6b6c585a378 105 bool Hidari = 0;
sgrsn 0:a6b6c585a378 106 int RightY = 0;
sgrsn 0:a6b6c585a378 107 int LeftY = 0;
sgrsn 0:a6b6c585a378 108 int LeftX = 0;
sgrsn 0:a6b6c585a378 109 wait_ms(500);
sgrsn 0:a6b6c585a378 110
sgrsn 0:a6b6c585a378 111 for(int address = 0; address < 4; address++)
sgrsn 0:a6b6c585a378 112 {
sgrsn 0:a6b6c585a378 113 while(PM_ofset[address].integer < 1750 || PM_ofset[address].integer > 1850)
sgrsn 0:a6b6c585a378 114 {
sgrsn 0:a6b6c585a378 115 for(int i = 0; i < 4; i++)
sgrsn 0:a6b6c585a378 116 {
sgrsn 0:a6b6c585a378 117 myi2c.getSlaveRegistarData(MD1_addr + (0x02*address), PM_ofset_reg + i, &PM_ofset[address].character[i], 1);
sgrsn 0:a6b6c585a378 118 wait_ms(20);
sgrsn 0:a6b6c585a378 119 }
sgrsn 0:a6b6c585a378 120 }
sgrsn 0:a6b6c585a378 121 PM_target[address].integer = PM_ofset[address].integer;
sgrsn 0:a6b6c585a378 122 }
sgrsn 0:a6b6c585a378 123 while(1)
sgrsn 0:a6b6c585a378 124 {
sgrsn 0:a6b6c585a378 125 printf("%4d %4d %4d %4d", sbdbt.getRightJoystickXaxis(), sbdbt.getRightJoystickYaxis(), sbdbt.getLeftJoystickXaxis(), sbdbt.getLeftJoystickYaxis());
sgrsn 0:a6b6c585a378 126 if( modechangeflag && ( (sbdbt.getButtonState(sikaku) & sbdbt.getButtonState(sankaku)) | (xbee.getButtonState(sikaku) & xbee.getButtonState(sikaku)) ) )
sgrsn 0:a6b6c585a378 127 {
sgrsn 0:a6b6c585a378 128 modechange++;
sgrsn 0:a6b6c585a378 129 modechangeflag = 0;
sgrsn 0:a6b6c585a378 130 wait_ms(500);
sgrsn 0:a6b6c585a378 131 }
sgrsn 0:a6b6c585a378 132 modechangeflag = !( ( sbdbt.getButtonState(sikaku) & sbdbt.getButtonState(sankaku) ) | ( xbee.getButtonState(sikaku) & xbee.getButtonState(sankaku) ) );
sgrsn 0:a6b6c585a378 133 Maru = sbdbt.getButtonState(maru) | xbee.getButtonState(maru);
sgrsn 0:a6b6c585a378 134 Batu = sbdbt.getButtonState(batu) | xbee.getButtonState(batu);
sgrsn 0:a6b6c585a378 135 Sankaku = (sbdbt.getButtonState(sankaku) | xbee.getButtonState(sankaku)) & modechangeflag;
sgrsn 0:a6b6c585a378 136 Sikaku = (sbdbt.getButtonState(sikaku) | xbee.getButtonState(sikaku)) & modechangeflag;
sgrsn 0:a6b6c585a378 137 l1 = sbdbt.getButtonState(L1) | xbee.getButtonState(L1);
sgrsn 0:a6b6c585a378 138 r1 = sbdbt.getButtonState(R1) | xbee.getButtonState(R1);
sgrsn 0:a6b6c585a378 139 l2 = sbdbt.getButtonState(L2) | xbee.getButtonState(L2);
sgrsn 0:a6b6c585a378 140 r2 = sbdbt.getButtonState(R2) | xbee.getButtonState(R2);
sgrsn 0:a6b6c585a378 141 Ue = sbdbt.getButtonState(ue) | xbee.getButtonState(ue);
sgrsn 0:a6b6c585a378 142 Sita = sbdbt.getButtonState(sita) | xbee.getButtonState(sita);
sgrsn 0:a6b6c585a378 143 Migi = sbdbt.getButtonState(migi) | xbee.getButtonState(migi);
sgrsn 0:a6b6c585a378 144 Hidari = sbdbt.getButtonState(hidari) | xbee.getButtonState(hidari);
sgrsn 0:a6b6c585a378 145 RightY = sbdbt.getRightJoystickYaxis();
sgrsn 0:a6b6c585a378 146 LeftY = sbdbt.getLeftJoystickYaxis();
sgrsn 0:a6b6c585a378 147 LeftX = sbdbt.getLeftJoystickXaxis();
sgrsn 0:a6b6c585a378 148 for(int i = 0; i < 8; i++)
sgrsn 0:a6b6c585a378 149 sensors[i] = (sensor1>>i) & 1;
sgrsn 0:a6b6c585a378 150
sgrsn 0:a6b6c585a378 151 switch(modechange)
sgrsn 0:a6b6c585a378 152 {
sgrsn 0:a6b6c585a378 153 case 0: //start to area1 clear
sgrsn 0:a6b6c585a378 154 /*LeftY : tukamuyatu spin**********************************/
sgrsn 0:a6b6c585a378 155 if(LeftY > 0)
sgrsn 0:a6b6c585a378 156 {
sgrsn 0:a6b6c585a378 157 myi2c.WriteSomeData(MD5_addr, motor1_state, 5, 1);
sgrsn 0:a6b6c585a378 158 }
sgrsn 0:a6b6c585a378 159 else if(LeftY < 0)
sgrsn 0:a6b6c585a378 160 {
sgrsn 0:a6b6c585a378 161 myi2c.WriteSomeData(MD5_addr, motor1_state, 10, 1);
sgrsn 0:a6b6c585a378 162 LeftY = LeftY * (-1);
sgrsn 0:a6b6c585a378 163 }
sgrsn 0:a6b6c585a378 164 else
sgrsn 0:a6b6c585a378 165 {
sgrsn 0:a6b6c585a378 166 myi2c.WriteSomeData(MD5_addr, motor1_state, 3, 1);
sgrsn 0:a6b6c585a378 167 }
sgrsn 0:a6b6c585a378 168 myi2c.WriteSomeData(MD5_addr, motor1_pwm, LeftY * 4-1, 1);
sgrsn 0:a6b6c585a378 169
sgrsn 0:a6b6c585a378 170 /*RightY : rail slide***********************************/
sgrsn 0:a6b6c585a378 171 if(RightY > 0)
sgrsn 0:a6b6c585a378 172 {
sgrsn 0:a6b6c585a378 173 myi2c.WriteSomeData(MD5_addr, motor2_state, 5, 1);
sgrsn 0:a6b6c585a378 174 }
sgrsn 0:a6b6c585a378 175 else if(RightY < 0)
sgrsn 0:a6b6c585a378 176 {
sgrsn 0:a6b6c585a378 177 myi2c.WriteSomeData(MD5_addr, motor2_state, 10, 1);
sgrsn 0:a6b6c585a378 178 RightY = RightY * (-1);
sgrsn 0:a6b6c585a378 179 }
sgrsn 0:a6b6c585a378 180 else
sgrsn 0:a6b6c585a378 181 {
sgrsn 0:a6b6c585a378 182 myi2c.WriteSomeData(MD5_addr, motor2_state, 3, 1);
sgrsn 0:a6b6c585a378 183 }
sgrsn 0:a6b6c585a378 184 myi2c.WriteSomeData(MD5_addr, motor2_pwm, RightY * 4-1, 1);
sgrsn 0:a6b6c585a378 185
sgrsn 0:a6b6c585a378 186 /*Sikaku : cylinder*****************************************/
sgrsn 0:a6b6c585a378 187 myi2c.WriteSomeData(CY1_addr, motor1_state, Sikaku, 1);
sgrsn 0:a6b6c585a378 188 break;
sgrsn 0:a6b6c585a378 189 case 1: //box torikomi to bridge
sgrsn 0:a6b6c585a378 190 /*Sankaku : torikomi taosu********************************************************/
sgrsn 0:a6b6c585a378 191 myi2c.WriteSomeData(MD6_addr, motor1_pwm, 255, 1);
sgrsn 0:a6b6c585a378 192 if(Sankaku == 0)
sgrsn 0:a6b6c585a378 193 {
sgrsn 0:a6b6c585a378 194 sankakuflag = 1;
sgrsn 0:a6b6c585a378 195 }
sgrsn 0:a6b6c585a378 196 if(sankakuflag && Sankaku)
sgrsn 0:a6b6c585a378 197 {
sgrsn 0:a6b6c585a378 198 torikomi_taosu_motor++;
sgrsn 0:a6b6c585a378 199 if((torikomi_taosu_motor % 2))
sgrsn 0:a6b6c585a378 200 {
sgrsn 0:a6b6c585a378 201 myi2c.WriteSomeData(MD6_addr, motor1_state, 5, 1); //torikomi taosu
sgrsn 0:a6b6c585a378 202 }
sgrsn 0:a6b6c585a378 203 else
sgrsn 0:a6b6c585a378 204 {
sgrsn 0:a6b6c585a378 205 myi2c.WriteSomeData(MD6_addr, motor1_state, 10, 1); //torikomi modosu
sgrsn 0:a6b6c585a378 206
sgrsn 0:a6b6c585a378 207 }
sgrsn 0:a6b6c585a378 208 sankakuflag = 0;
sgrsn 0:a6b6c585a378 209 }
sgrsn 0:a6b6c585a378 210 if(sensors[0] == 0)
sgrsn 0:a6b6c585a378 211 {
sgrsn 0:a6b6c585a378 212 sensorsflag[0] = 1;
sgrsn 0:a6b6c585a378 213 }
sgrsn 0:a6b6c585a378 214 if(sensorsflag[0] == 1 && sensors[0] == 1)
sgrsn 0:a6b6c585a378 215 {
sgrsn 0:a6b6c585a378 216 myi2c.WriteSomeData(MD6_addr, motor1_state, 3, 1); //torikomi taosi stop
sgrsn 0:a6b6c585a378 217 sensorsflag[0] = 0;
sgrsn 0:a6b6c585a378 218 }
sgrsn 0:a6b6c585a378 219
sgrsn 0:a6b6c585a378 220 /*RightY : torikomi slide**********************************/
sgrsn 0:a6b6c585a378 221 if(RightY > 0)
sgrsn 0:a6b6c585a378 222 {
sgrsn 0:a6b6c585a378 223 myi2c.WriteSomeData(MD6_addr, motor2_state, 5, 1);
sgrsn 0:a6b6c585a378 224 }
sgrsn 0:a6b6c585a378 225 else if(RightY < 0)
sgrsn 0:a6b6c585a378 226 {
sgrsn 0:a6b6c585a378 227 myi2c.WriteSomeData(MD6_addr, motor2_state, 10, 1);
sgrsn 0:a6b6c585a378 228 RightY = RightY * (-1);
sgrsn 0:a6b6c585a378 229 }
sgrsn 0:a6b6c585a378 230 else
sgrsn 0:a6b6c585a378 231 {
sgrsn 0:a6b6c585a378 232 myi2c.WriteSomeData(MD6_addr, motor2_state, 3, 1);
sgrsn 0:a6b6c585a378 233 }
sgrsn 0:a6b6c585a378 234 myi2c.WriteSomeData(MD6_addr, motor2_pwm, RightY * 4-1, 1);
sgrsn 0:a6b6c585a378 235
sgrsn 0:a6b6c585a378 236 /*Sikaku : cylinder*********************************************/
sgrsn 0:a6b6c585a378 237 myi2c.WriteSomeData(CY1_addr, motor1_state, Sikaku, 1);
sgrsn 0:a6b6c585a378 238 break;
sgrsn 0:a6b6c585a378 239 case 2: //bridge to area3
sgrsn 0:a6b6c585a378 240 /*RightY : bridge1************************************************/
sgrsn 0:a6b6c585a378 241 if(RightY > 0)
sgrsn 0:a6b6c585a378 242 {
sgrsn 0:a6b6c585a378 243 myi2c.WriteSomeData(MD7_addr, motor1_state, 5, 1);
sgrsn 0:a6b6c585a378 244 }
sgrsn 0:a6b6c585a378 245 else if(RightY < 0)
sgrsn 0:a6b6c585a378 246 {
sgrsn 0:a6b6c585a378 247 myi2c.WriteSomeData(MD7_addr, motor1_state, 10, 1);
sgrsn 0:a6b6c585a378 248 RightY = RightY * (-1);
sgrsn 0:a6b6c585a378 249 }
sgrsn 0:a6b6c585a378 250 else
sgrsn 0:a6b6c585a378 251 {
sgrsn 0:a6b6c585a378 252 myi2c.WriteSomeData(MD7_addr, motor1_state, 3, 1);
sgrsn 0:a6b6c585a378 253 }
sgrsn 0:a6b6c585a378 254 myi2c.WriteSomeData(MD7_addr, motor1_pwm, RightY * 4-1, 1);
sgrsn 0:a6b6c585a378 255
sgrsn 0:a6b6c585a378 256 /*LeftY : bridge2*******************************************************/
sgrsn 0:a6b6c585a378 257 if(LeftY > 0)
sgrsn 0:a6b6c585a378 258 {
sgrsn 0:a6b6c585a378 259 myi2c.WriteSomeData(MD7_addr, motor2_state, 5, 1);
sgrsn 0:a6b6c585a378 260 }
sgrsn 0:a6b6c585a378 261 else if(LeftY < 0)
sgrsn 0:a6b6c585a378 262 {
sgrsn 0:a6b6c585a378 263 myi2c.WriteSomeData(MD7_addr, motor2_state, 10, 1);
sgrsn 0:a6b6c585a378 264 LeftY = LeftY * (-1);
sgrsn 0:a6b6c585a378 265 }
sgrsn 0:a6b6c585a378 266 else
sgrsn 0:a6b6c585a378 267 {
sgrsn 0:a6b6c585a378 268 myi2c.WriteSomeData(MD7_addr, motor2_state, 3, 1);
sgrsn 0:a6b6c585a378 269 }
sgrsn 0:a6b6c585a378 270 myi2c.WriteSomeData(MD7_addr, motor2_pwm, LeftY * 4-1, 1);
sgrsn 0:a6b6c585a378 271 break;
sgrsn 0:a6b6c585a378 272 case 3: //box pile up
sgrsn 0:a6b6c585a378 273 /*LeftX : jack move*************************************************/
sgrsn 0:a6b6c585a378 274 if(LeftX > 0)
sgrsn 0:a6b6c585a378 275 {
sgrsn 0:a6b6c585a378 276 myi2c.WriteSomeData(MD8_addr, motor1_state, 5, 1);
sgrsn 0:a6b6c585a378 277 }
sgrsn 0:a6b6c585a378 278 else if(LeftX < 0)
sgrsn 0:a6b6c585a378 279 {
sgrsn 0:a6b6c585a378 280 myi2c.WriteSomeData(MD8_addr, motor1_state, 10, 1);
sgrsn 0:a6b6c585a378 281 LeftX = LeftX * (-1);
sgrsn 0:a6b6c585a378 282 }
sgrsn 0:a6b6c585a378 283 else
sgrsn 0:a6b6c585a378 284 {
sgrsn 0:a6b6c585a378 285 myi2c.WriteSomeData(MD8_addr, motor1_state, 3, 1);
sgrsn 0:a6b6c585a378 286 }
sgrsn 0:a6b6c585a378 287 myi2c.WriteSomeData(MD8_addr, motor1_pwm, LeftX * 4-1, 1);
sgrsn 0:a6b6c585a378 288
sgrsn 0:a6b6c585a378 289 /*Sikaku : jack up***************************************************/
sgrsn 0:a6b6c585a378 290 myi2c.WriteSomeData(MD8_addr, motor2_state, Sikaku, 1);
sgrsn 0:a6b6c585a378 291 myi2c.WriteSomeData(MD8_addr, motor2_state, 255, 1);
sgrsn 0:a6b6c585a378 292
sgrsn 0:a6b6c585a378 293 /*RightY : rail up***************************************************/
sgrsn 0:a6b6c585a378 294 if(RightY > 0)
sgrsn 0:a6b6c585a378 295 {
sgrsn 0:a6b6c585a378 296 myi2c.WriteSomeData(MD9_addr, motor1_state, 5, 1);
sgrsn 0:a6b6c585a378 297 myi2c.WriteSomeData(MD9_addr, motor2_state, 5, 1);
sgrsn 0:a6b6c585a378 298 }
sgrsn 0:a6b6c585a378 299 else if(RightY < 0)
sgrsn 0:a6b6c585a378 300 {
sgrsn 0:a6b6c585a378 301 myi2c.WriteSomeData(MD9_addr, motor1_state, 10, 1);
sgrsn 0:a6b6c585a378 302 myi2c.WriteSomeData(MD9_addr, motor2_state, 10, 1);
sgrsn 0:a6b6c585a378 303 RightY = RightY * (-1);
sgrsn 0:a6b6c585a378 304 }
sgrsn 0:a6b6c585a378 305 else
sgrsn 0:a6b6c585a378 306 {
sgrsn 0:a6b6c585a378 307 myi2c.WriteSomeData(MD9_addr, motor1_state, 3, 1);
sgrsn 0:a6b6c585a378 308 myi2c.WriteSomeData(MD9_addr, motor2_state, 3, 1);
sgrsn 0:a6b6c585a378 309 }
sgrsn 0:a6b6c585a378 310 myi2c.WriteSomeData(MD9_addr, motor1_pwm, RightY * 4-1, 1);
sgrsn 0:a6b6c585a378 311 myi2c.WriteSomeData(MD9_addr, motor2_pwm, RightY * 4-1, 1);
sgrsn 0:a6b6c585a378 312
sgrsn 0:a6b6c585a378 313 /*Sankaku & LeftY : center slide**************************************/
sgrsn 0:a6b6c585a378 314 if(Sankaku)
sgrsn 0:a6b6c585a378 315 {
sgrsn 0:a6b6c585a378 316 if(LeftX > 0)
sgrsn 0:a6b6c585a378 317 {
sgrsn 0:a6b6c585a378 318 myi2c.WriteSomeData(MD10_addr, motor1_state, 5, 1);
sgrsn 0:a6b6c585a378 319 }
sgrsn 0:a6b6c585a378 320 else if(LeftX < 0)
sgrsn 0:a6b6c585a378 321 {
sgrsn 0:a6b6c585a378 322 myi2c.WriteSomeData(MD10_addr, motor1_state, 10, 1);
sgrsn 0:a6b6c585a378 323 LeftX = LeftX * (-1);
sgrsn 0:a6b6c585a378 324 }
sgrsn 0:a6b6c585a378 325 else
sgrsn 0:a6b6c585a378 326 {
sgrsn 0:a6b6c585a378 327 myi2c.WriteSomeData(MD10_addr, motor1_state, 3, 1);
sgrsn 0:a6b6c585a378 328 }
sgrsn 0:a6b6c585a378 329 myi2c.WriteSomeData(MD10_addr, motor1_pwm, LeftX * 4-1, 1);
sgrsn 0:a6b6c585a378 330 }
sgrsn 0:a6b6c585a378 331 break;
sgrsn 0:a6b6c585a378 332 }
sgrsn 0:a6b6c585a378 333
sgrsn 0:a6b6c585a378 334 /*Steering******************************************************/
sgrsn 0:a6b6c585a378 335 Dpad_deg = Dpad_table[Migi + 2*Hidari][Ue + 2*Sita];
sgrsn 0:a6b6c585a378 336
sgrsn 0:a6b6c585a378 337 if(Dpad_deg < -90)
sgrsn 0:a6b6c585a378 338 {
sgrsn 0:a6b6c585a378 339 Dpad_deg += 180;
sgrsn 0:a6b6c585a378 340 counterwheel = 1;
sgrsn 0:a6b6c585a378 341 }
sgrsn 0:a6b6c585a378 342 else if(Dpad_deg > 90)
sgrsn 0:a6b6c585a378 343 {
sgrsn 0:a6b6c585a378 344 Dpad_deg -= 180;
sgrsn 0:a6b6c585a378 345 counterwheel = 1;
sgrsn 0:a6b6c585a378 346 }
sgrsn 0:a6b6c585a378 347 else
sgrsn 0:a6b6c585a378 348 {
sgrsn 0:a6b6c585a378 349 counterwheel = 0;
sgrsn 0:a6b6c585a378 350 }
sgrsn 0:a6b6c585a378 351
sgrsn 0:a6b6c585a378 352
sgrsn 0:a6b6c585a378 353 if(Ue | Sita | Migi | Hidari)
sgrsn 0:a6b6c585a378 354 {
sgrsn 0:a6b6c585a378 355 Dpadctrl_flag = 1;
sgrsn 0:a6b6c585a378 356 }
sgrsn 0:a6b6c585a378 357 else
sgrsn 0:a6b6c585a378 358 {
sgrsn 0:a6b6c585a378 359 Dpadctrl_flag = 0;
sgrsn 0:a6b6c585a378 360 }
sgrsn 0:a6b6c585a378 361 if(Batu)
sgrsn 0:a6b6c585a378 362 {
sgrsn 0:a6b6c585a378 363 for(int i = 2; i < 4; i++)
sgrsn 0:a6b6c585a378 364 {
sgrsn 0:a6b6c585a378 365 prev_PM_target[i] = PM_target[i].integer;
sgrsn 0:a6b6c585a378 366 if(Dpadctrl_flag)
sgrsn 0:a6b6c585a378 367 {
sgrsn 0:a6b6c585a378 368 //PM_target[i].integer = (int)((Dpad_deg > 0)? Dpad_deg + 0.5 : Dpad_deg - 0.5) + PM_ofset[i].integer;
sgrsn 0:a6b6c585a378 369 PM_target[i].integer = Dpad_deg + PM_ofset[i].integer;
sgrsn 0:a6b6c585a378 370 }
sgrsn 0:a6b6c585a378 371 RE_target[i].integer = 300 * Maru;
sgrsn 0:a6b6c585a378 372 }
sgrsn 0:a6b6c585a378 373 }
sgrsn 0:a6b6c585a378 374 else
sgrsn 0:a6b6c585a378 375 {
sgrsn 0:a6b6c585a378 376 for(int i = 0; i < 4; i++)
sgrsn 0:a6b6c585a378 377 {
sgrsn 0:a6b6c585a378 378 prev_PM_target[i] = PM_target[i].integer;
sgrsn 0:a6b6c585a378 379 if(Dpadctrl_flag)
sgrsn 0:a6b6c585a378 380 {
sgrsn 0:a6b6c585a378 381 //PM_target[i].integer = (int)((Dpad_deg > 0)? Dpad_deg + 0.5 : Dpad_deg - 0.5) + PM_ofset[i].integer;
sgrsn 0:a6b6c585a378 382 PM_target[i].integer = Dpad_deg + PM_ofset[i].integer;
sgrsn 0:a6b6c585a378 383 }
sgrsn 0:a6b6c585a378 384 RE_target[i].integer = 300 * Maru;
sgrsn 0:a6b6c585a378 385 }
sgrsn 0:a6b6c585a378 386 }
sgrsn 0:a6b6c585a378 387 if(Maru)
sgrsn 0:a6b6c585a378 388 {
sgrsn 0:a6b6c585a378 389 wheel[0] = 2 - counterwheel;
sgrsn 0:a6b6c585a378 390 wheel[1] = 1 + counterwheel;
sgrsn 0:a6b6c585a378 391 wheel[2] = 1 + counterwheel;
sgrsn 0:a6b6c585a378 392 wheel[3] = 2 - counterwheel;
sgrsn 0:a6b6c585a378 393
sgrsn 0:a6b6c585a378 394 if(l2)
sgrsn 0:a6b6c585a378 395 {
sgrsn 0:a6b6c585a378 396 wheel[0] = 1;
sgrsn 0:a6b6c585a378 397 wheel[1] = 1;
sgrsn 0:a6b6c585a378 398 wheel[2] = 1;
sgrsn 0:a6b6c585a378 399 wheel[3] = 1;
sgrsn 0:a6b6c585a378 400 }
sgrsn 0:a6b6c585a378 401 if(r2)
sgrsn 0:a6b6c585a378 402 {
sgrsn 0:a6b6c585a378 403 wheel[0] = 2;
sgrsn 0:a6b6c585a378 404 wheel[1] = 2;
sgrsn 0:a6b6c585a378 405 wheel[2] = 2;
sgrsn 0:a6b6c585a378 406 wheel[3] = 2;
sgrsn 0:a6b6c585a378 407 }
sgrsn 0:a6b6c585a378 408 }
sgrsn 0:a6b6c585a378 409 /*else if(Batu)
sgrsn 0:a6b6c585a378 410 {
sgrsn 0:a6b6c585a378 411 wheel[0] = 1 + counterwheel;
sgrsn 0:a6b6c585a378 412 wheel[1] = 2 - counterwheel;
sgrsn 0:a6b6c585a378 413 wheel[2] = 2 - counterwheel;
sgrsn 0:a6b6c585a378 414 wheel[3] = 1 + counterwheel;
sgrsn 0:a6b6c585a378 415 }*/
sgrsn 0:a6b6c585a378 416 else
sgrsn 0:a6b6c585a378 417 {
sgrsn 0:a6b6c585a378 418 wheel[0] = 0;
sgrsn 0:a6b6c585a378 419 wheel[1] = 0;
sgrsn 0:a6b6c585a378 420 wheel[2] = 0;
sgrsn 0:a6b6c585a378 421 wheel[3] = 0;
sgrsn 0:a6b6c585a378 422 }
sgrsn 0:a6b6c585a378 423 if(r1)
sgrsn 0:a6b6c585a378 424 {
sgrsn 0:a6b6c585a378 425 if(Batu)
sgrsn 0:a6b6c585a378 426 {
sgrsn 0:a6b6c585a378 427 for(int i = 2; i < 4; i++)
sgrsn 0:a6b6c585a378 428 PM_target[i].integer += 5;
sgrsn 0:a6b6c585a378 429 Dpadctrl_flag = 0;
sgrsn 0:a6b6c585a378 430 }
sgrsn 0:a6b6c585a378 431 else
sgrsn 0:a6b6c585a378 432 {
sgrsn 0:a6b6c585a378 433 for(int i = 0; i < 4; i++)
sgrsn 0:a6b6c585a378 434 PM_target[i].integer += 5;
sgrsn 0:a6b6c585a378 435 Dpadctrl_flag = 0;
sgrsn 0:a6b6c585a378 436 }
sgrsn 0:a6b6c585a378 437 }
sgrsn 0:a6b6c585a378 438 else if(l1)
sgrsn 0:a6b6c585a378 439 {
sgrsn 0:a6b6c585a378 440 if(Batu)
sgrsn 0:a6b6c585a378 441 {
sgrsn 0:a6b6c585a378 442 for(int i = 2; i < 4; i++)
sgrsn 0:a6b6c585a378 443 PM_target[i].integer -= 5;
sgrsn 0:a6b6c585a378 444 Dpadctrl_flag = 0;
sgrsn 0:a6b6c585a378 445 }
sgrsn 0:a6b6c585a378 446 else
sgrsn 0:a6b6c585a378 447 {
sgrsn 0:a6b6c585a378 448 for(int i = 0; i < 4; i++)
sgrsn 0:a6b6c585a378 449 PM_target[i].integer -= 5;
sgrsn 0:a6b6c585a378 450 Dpadctrl_flag = 0;
sgrsn 0:a6b6c585a378 451 }
sgrsn 0:a6b6c585a378 452 }
sgrsn 0:a6b6c585a378 453 else if(r2 | l2)
sgrsn 0:a6b6c585a378 454 {
sgrsn 0:a6b6c585a378 455 PM_target[0].integer = 45 + PM_ofset[0].integer;
sgrsn 0:a6b6c585a378 456 PM_target[1].integer = -45 + PM_ofset[1].integer;
sgrsn 0:a6b6c585a378 457 PM_target[2].integer = 45 + PM_ofset[2].integer;
sgrsn 0:a6b6c585a378 458 PM_target[3].integer = -45 + PM_ofset[3].integer;
sgrsn 0:a6b6c585a378 459 Dpadctrl_flag = 0;
sgrsn 0:a6b6c585a378 460 }
sgrsn 0:a6b6c585a378 461 /*wheel communication*************************************/
sgrsn 0:a6b6c585a378 462
sgrsn 0:a6b6c585a378 463 for(int address = 0; address < 4; address++)
sgrsn 0:a6b6c585a378 464 {
sgrsn 0:a6b6c585a378 465 myi2c.WriteSomeData(MD1_addr + (0x02*address), wheel_start, wheel[address], 1);
sgrsn 0:a6b6c585a378 466 if(PM_target[address].integer != prev_PM_target[address])
sgrsn 0:a6b6c585a378 467 {
sgrsn 0:a6b6c585a378 468 myi2c.WriteSomeData(MD1_addr + (0x02*address), PM_start, 0, 1);
sgrsn 0:a6b6c585a378 469 }
sgrsn 0:a6b6c585a378 470
sgrsn 0:a6b6c585a378 471 for(int i = 0; i < 4; i++)
sgrsn 0:a6b6c585a378 472 {
sgrsn 0:a6b6c585a378 473 myi2c.WriteSomeData(MD1_addr + (0x02*address), PM_target_reg + i, PM_target[address].character[i], 1);
sgrsn 0:a6b6c585a378 474 myi2c.WriteSomeData(MD1_addr + (0x02*address), RE_target_reg + i, RE_target[address].character[i], 1);
sgrsn 0:a6b6c585a378 475 }
sgrsn 0:a6b6c585a378 476 //myi2c.WriteSomeData(MD1_addr + (0x02*address), pid_start, 1, 1);
sgrsn 0:a6b6c585a378 477 myi2c.WriteSomeData(MD1_addr + (0x02*address), PM_start, 1, 1);
sgrsn 0:a6b6c585a378 478 }
sgrsn 0:a6b6c585a378 479 myi2c.getSlaveRegistarData(SE1_addr, 0, &sensor1, 1);
sgrsn 0:a6b6c585a378 480 wait_ms(20);
sgrsn 0:a6b6c585a378 481 myi2c.getSlaveRegistarData(SE2_addr, 0, &sensor2, 1);
sgrsn 0:a6b6c585a378 482 wait_ms(20);
sgrsn 0:a6b6c585a378 483 }
sgrsn 0:a6b6c585a378 484 }
sgrsn 0:a6b6c585a378 485
sgrsn 0:a6b6c585a378 486 void getpc()
sgrsn 0:a6b6c585a378 487 {
sgrsn 0:a6b6c585a378 488 if(pc.readable())
sgrsn 0:a6b6c585a378 489 {
sgrsn 0:a6b6c585a378 490 prev_pcdata = pcdata;
sgrsn 0:a6b6c585a378 491 pcdata = pc.getc();
sgrsn 0:a6b6c585a378 492 }
sgrsn 0:a6b6c585a378 493 }