cao yang
/
game_ceshiban
yyyy
main.cpp@0:ae94058fb59a, 2019-05-13 (annotated)
- Committer:
- mihaidd
- Date:
- Mon May 13 09:07:38 2019 +0000
- Revision:
- 0:ae94058fb59a
ffff
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mihaidd | 0:ae94058fb59a | 1 | #include "mbed.h" |
mihaidd | 0:ae94058fb59a | 2 | #include "stdint.h" |
mihaidd | 0:ae94058fb59a | 3 | #include <string> |
mihaidd | 0:ae94058fb59a | 4 | #include "MCP23017.h" |
mihaidd | 0:ae94058fb59a | 5 | #include "WattBob_TextLCD.h" |
mihaidd | 0:ae94058fb59a | 6 | #include "VL6180.h" |
mihaidd | 0:ae94058fb59a | 7 | |
mihaidd | 0:ae94058fb59a | 8 | //Hyperterminal configuration |
mihaidd | 0:ae94058fb59a | 9 | //9600 bauds, 8-bit data, no parity |
mihaidd | 0:ae94058fb59a | 10 | |
mihaidd | 0:ae94058fb59a | 11 | //VL6180X defines |
mihaidd | 0:ae94058fb59a | 12 | |
mihaidd | 0:ae94058fb59a | 13 | #define IDENTIFICATIONMODEL_ID 0x0000 |
mihaidd | 0:ae94058fb59a | 14 | |
mihaidd | 0:ae94058fb59a | 15 | VL6180 TOF_sensor(I2C_SDA, I2C_SCL);//距离的串口定义 |
mihaidd | 0:ae94058fb59a | 16 | DigitalOut myled0(LED2); |
mihaidd | 0:ae94058fb59a | 17 | |
mihaidd | 0:ae94058fb59a | 18 | #define BACK_LIGHT_ON(INTERFACE) INTERFACE->write_bit(1,BL_BIT) |
mihaidd | 0:ae94058fb59a | 19 | #define BACK_LIGHT_OFF(INTERFACE) INTERFACE->write_bit(0,BL_BIT) |
mihaidd | 0:ae94058fb59a | 20 | |
mihaidd | 0:ae94058fb59a | 21 | MCP23017 *par_port; |
mihaidd | 0:ae94058fb59a | 22 | WattBob_TextLCD *lcd; |
mihaidd | 0:ae94058fb59a | 23 | Serial STM2Android(PC_4,PC_5,115200);//上位机串口定义 |
mihaidd | 0:ae94058fb59a | 24 | I2C i2c1(PC_1, PC_0); //pins for I2C communication (SDA, SCL) 人颜色的串口定义 |
mihaidd | 0:ae94058fb59a | 25 | I2C i2c2(PB_14, PB_13); //机器人颜色的串口定义 |
mihaidd | 0:ae94058fb59a | 26 | |
mihaidd | 0:ae94058fb59a | 27 | DigitalOut d(PB_3); //电机的第一位 |
mihaidd | 0:ae94058fb59a | 28 | DigitalOut j(PA_9); //电机的第二位 |
mihaidd | 0:ae94058fb59a | 29 | DigitalOut k(PC_7); //电机的第三位 |
mihaidd | 0:ae94058fb59a | 30 | DigitalOut a(PC_10);//红外的一 |
mihaidd | 0:ae94058fb59a | 31 | DigitalOut b(PC_12);//红外的二 |
mihaidd | 0:ae94058fb59a | 32 | |
mihaidd | 0:ae94058fb59a | 33 | int sensor_addr = 41 << 1; |
mihaidd | 0:ae94058fb59a | 34 | |
mihaidd | 0:ae94058fb59a | 35 | char flag_Android[]=""; |
mihaidd | 0:ae94058fb59a | 36 | char flag_Android_1[]="begin"; |
mihaidd | 0:ae94058fb59a | 37 | char flag_Android_2[]="distance"; |
mihaidd | 0:ae94058fb59a | 38 | char Android_0[]=""; |
mihaidd | 0:ae94058fb59a | 39 | char Android_1='l'; |
mihaidd | 0:ae94058fb59a | 40 | char flag_Android_3[]="repair"; |
mihaidd | 0:ae94058fb59a | 41 | int main() |
mihaidd | 0:ae94058fb59a | 42 | { |
mihaidd | 0:ae94058fb59a | 43 | int goal_1=0;//人类得分 |
mihaidd | 0:ae94058fb59a | 44 | int goal_2=0;//机器人得分 |
mihaidd | 0:ae94058fb59a | 45 | d=1; |
mihaidd | 0:ae94058fb59a | 46 | j=1; |
mihaidd | 0:ae94058fb59a | 47 | k=1; |
mihaidd | 0:ae94058fb59a | 48 | int kehu=0;//客户类型 |
mihaidd | 0:ae94058fb59a | 49 | |
mihaidd | 0:ae94058fb59a | 50 | uint8_t dist;//距离的值 |
mihaidd | 0:ae94058fb59a | 51 | //julichuanganqi |
mihaidd | 0:ae94058fb59a | 52 | par_port = new MCP23017(I2C_SDA, I2C_SCL,0x0400); |
mihaidd | 0:ae94058fb59a | 53 | par_port->config(0x0F00, 0x0F00, 0x0F00); // configure MCP23017 chip on WattBob |
mihaidd | 0:ae94058fb59a | 54 | lcd = new WattBob_TextLCD(par_port); |
mihaidd | 0:ae94058fb59a | 55 | |
mihaidd | 0:ae94058fb59a | 56 | |
mihaidd | 0:ae94058fb59a | 57 | |
mihaidd | 0:ae94058fb59a | 58 | while(1) |
mihaidd | 0:ae94058fb59a | 59 | { |
mihaidd | 0:ae94058fb59a | 60 | |
mihaidd | 0:ae94058fb59a | 61 | dist = TOF_sensor.getDistance(); |
mihaidd | 0:ae94058fb59a | 62 | lcd->cls(); |
mihaidd | 0:ae94058fb59a | 63 | lcd->locate(0,0); |
mihaidd | 0:ae94058fb59a | 64 | i2c1.frequency(100000);//修改为100000,否则报错 |
mihaidd | 0:ae94058fb59a | 65 | i2c2.frequency(100000); |
mihaidd | 0:ae94058fb59a | 66 | |
mihaidd | 0:ae94058fb59a | 67 | char id_regval[1] = {146}; |
mihaidd | 0:ae94058fb59a | 68 | char data[1] = {0}; |
mihaidd | 0:ae94058fb59a | 69 | i2c1.write(sensor_addr,id_regval,1, true); |
mihaidd | 0:ae94058fb59a | 70 | i2c1.read(sensor_addr,data,1,false); |
mihaidd | 0:ae94058fb59a | 71 | i2c2.write(sensor_addr,id_regval,1, true); |
mihaidd | 0:ae94058fb59a | 72 | i2c2.read(sensor_addr,data,1,false); |
mihaidd | 0:ae94058fb59a | 73 | |
mihaidd | 0:ae94058fb59a | 74 | char timing_register[2] = {129,0}; |
mihaidd | 0:ae94058fb59a | 75 | i2c1.write(sensor_addr,timing_register,2,false); |
mihaidd | 0:ae94058fb59a | 76 | i2c2.write(sensor_addr,timing_register,2,false); |
mihaidd | 0:ae94058fb59a | 77 | |
mihaidd | 0:ae94058fb59a | 78 | char control_register[2] = {143,0}; |
mihaidd | 0:ae94058fb59a | 79 | i2c1.write(sensor_addr,control_register,2,false); |
mihaidd | 0:ae94058fb59a | 80 | i2c2.write(sensor_addr,control_register,2,false); |
mihaidd | 0:ae94058fb59a | 81 | |
mihaidd | 0:ae94058fb59a | 82 | char enable_register[2] = {128,3}; |
mihaidd | 0:ae94058fb59a | 83 | i2c1.write(sensor_addr,enable_register,2,false); |
mihaidd | 0:ae94058fb59a | 84 | i2c2.write(sensor_addr,enable_register,2,false); |
mihaidd | 0:ae94058fb59a | 85 | // Read data from color sensor (Clear/Red/Green/Blue) |
mihaidd | 0:ae94058fb59a | 86 | |
mihaidd | 0:ae94058fb59a | 87 | char clear_reg[1] = {148}; |
mihaidd | 0:ae94058fb59a | 88 | char clear_data1[2] = {0,0}; |
mihaidd | 0:ae94058fb59a | 89 | char clear_data2[2] = {0,0}; |
mihaidd | 0:ae94058fb59a | 90 | |
mihaidd | 0:ae94058fb59a | 91 | i2c1.write(sensor_addr,clear_reg,1, true); |
mihaidd | 0:ae94058fb59a | 92 | i2c1.read(sensor_addr,clear_data1,2, false); |
mihaidd | 0:ae94058fb59a | 93 | i2c2.write(sensor_addr,clear_reg,1, true); |
mihaidd | 0:ae94058fb59a | 94 | i2c2.read(sensor_addr,clear_data2,2, false); |
mihaidd | 0:ae94058fb59a | 95 | |
mihaidd | 0:ae94058fb59a | 96 | int clear_value1 = ((int)clear_data1[1] << 8) | clear_data1[0]; |
mihaidd | 0:ae94058fb59a | 97 | int clear_value2 = ((int)clear_data2[1] << 8) | clear_data2[0]; |
mihaidd | 0:ae94058fb59a | 98 | |
mihaidd | 0:ae94058fb59a | 99 | char red_reg[1] = {150}; |
mihaidd | 0:ae94058fb59a | 100 | char red_data1[2] = {0,0}; |
mihaidd | 0:ae94058fb59a | 101 | char red_data2[2] = {0,0}; |
mihaidd | 0:ae94058fb59a | 102 | |
mihaidd | 0:ae94058fb59a | 103 | i2c1.write(sensor_addr,red_reg,1, true); |
mihaidd | 0:ae94058fb59a | 104 | i2c1.read(sensor_addr,red_data1,2, false); |
mihaidd | 0:ae94058fb59a | 105 | i2c2.write(sensor_addr,red_reg,1, true); |
mihaidd | 0:ae94058fb59a | 106 | i2c2.read(sensor_addr,red_data2,2, false); |
mihaidd | 0:ae94058fb59a | 107 | |
mihaidd | 0:ae94058fb59a | 108 | int red_value1 = ((int)red_data1[1] << 8) | red_data1[0]; |
mihaidd | 0:ae94058fb59a | 109 | int red_value2 = ((int)red_data2[1] << 8) | red_data2[0]; |
mihaidd | 0:ae94058fb59a | 110 | |
mihaidd | 0:ae94058fb59a | 111 | char green_reg[1] = {152}; |
mihaidd | 0:ae94058fb59a | 112 | char green_data1[2] = {0,0}; |
mihaidd | 0:ae94058fb59a | 113 | char green_data2[2] = {0,0}; |
mihaidd | 0:ae94058fb59a | 114 | |
mihaidd | 0:ae94058fb59a | 115 | i2c1.write(sensor_addr,green_reg,1, true); |
mihaidd | 0:ae94058fb59a | 116 | i2c1.read(sensor_addr,green_data1,2, false); |
mihaidd | 0:ae94058fb59a | 117 | i2c2.write(sensor_addr,green_reg,1, true); |
mihaidd | 0:ae94058fb59a | 118 | i2c2.read(sensor_addr,green_data2,2, false); |
mihaidd | 0:ae94058fb59a | 119 | |
mihaidd | 0:ae94058fb59a | 120 | int green_value1 = ((int)green_data1[1] << 8) | green_data1[0]; |
mihaidd | 0:ae94058fb59a | 121 | int green_value2 = ((int)green_data2[1] << 8) | green_data2[0]; |
mihaidd | 0:ae94058fb59a | 122 | |
mihaidd | 0:ae94058fb59a | 123 | char blue_reg[1] = {154}; |
mihaidd | 0:ae94058fb59a | 124 | char blue_data1[2] = {0,0}; |
mihaidd | 0:ae94058fb59a | 125 | char blue_data2[2] = {0,0}; |
mihaidd | 0:ae94058fb59a | 126 | |
mihaidd | 0:ae94058fb59a | 127 | i2c1.write(sensor_addr,blue_reg,1, true); |
mihaidd | 0:ae94058fb59a | 128 | i2c1.read(sensor_addr,blue_data1,2, false); |
mihaidd | 0:ae94058fb59a | 129 | i2c2.write(sensor_addr,blue_reg,1, true); |
mihaidd | 0:ae94058fb59a | 130 | i2c2.read(sensor_addr,blue_data2,2, false); |
mihaidd | 0:ae94058fb59a | 131 | |
mihaidd | 0:ae94058fb59a | 132 | int blue_value1 = ((int)blue_data1[1] << 8) | blue_data1[0]; |
mihaidd | 0:ae94058fb59a | 133 | int blue_value2 = ((int)blue_data2[1] << 8) | blue_data2[0]; |
mihaidd | 0:ae94058fb59a | 134 | // print sensor readings |
mihaidd | 0:ae94058fb59a | 135 | // while(1) |
mihaidd | 0:ae94058fb59a | 136 | // { |
mihaidd | 0:ae94058fb59a | 137 | // if(STM2Android.readable()) |
mihaidd | 0:ae94058fb59a | 138 | // { |
mihaidd | 0:ae94058fb59a | 139 | STM2Android.scanf("%s",&Android_0);//要给上位机传输dist以及用户识别 |
mihaidd | 0:ae94058fb59a | 140 | // break; |
mihaidd | 0:ae94058fb59a | 141 | // } |
mihaidd | 0:ae94058fb59a | 142 | // } |
mihaidd | 0:ae94058fb59a | 143 | wait(2); |
mihaidd | 0:ae94058fb59a | 144 | if(strcmp(Android_0,flag_Android_2)==0) |
mihaidd | 0:ae94058fb59a | 145 | { |
mihaidd | 0:ae94058fb59a | 146 | // if (a==0&&b==0) kehu=0;//用户识别 小孩 |
mihaidd | 0:ae94058fb59a | 147 | // else if (a==0&&b==1) kehu=1;//青年 |
mihaidd | 0:ae94058fb59a | 148 | //else if (a==1&&b==0) kehu=2;//老人 |
mihaidd | 0:ae94058fb59a | 149 | //STM2Android.printf("x%d\r\n",kehu); |
mihaidd | 0:ae94058fb59a | 150 | wait(1); |
mihaidd | 0:ae94058fb59a | 151 | // if(dist<=180) |
mihaidd | 0:ae94058fb59a | 152 | STM2Android.printf("e");//距离合适 |
mihaidd | 0:ae94058fb59a | 153 | |
mihaidd | 0:ae94058fb59a | 154 | /* else if(strcmp(Android_0,flag_Android_3)==0)//维护模式 |
mihaidd | 0:ae94058fb59a | 155 | { |
mihaidd | 0:ae94058fb59a | 156 | STM2Android.scanf("%c",&Android_1); |
mihaidd | 0:ae94058fb59a | 157 | if(Android_1=='c')STM2Android.printf("dClear1(%d),Red1(%d),Green1(%d),Blue1(%d)\r\n", clear_value1, red_value1, green_value1, blue_value1); |
mihaidd | 0:ae94058fb59a | 158 | else if(Android_1=='d')STM2Android.printf("dd=(%d)\r\n",dist); |
mihaidd | 0:ae94058fb59a | 159 | else if(Android_1=='e') |
mihaidd | 0:ae94058fb59a | 160 | { |
mihaidd | 0:ae94058fb59a | 161 | d=0;j=0;k=0;//电机转动 |
mihaidd | 0:ae94058fb59a | 162 | wait(10); |
mihaidd | 0:ae94058fb59a | 163 | d=1;j=1;k=1;//电机停止转动 |
mihaidd | 0:ae94058fb59a | 164 | } |
mihaidd | 0:ae94058fb59a | 165 | } |
mihaidd | 0:ae94058fb59a | 166 | */ |
mihaidd | 0:ae94058fb59a | 167 | /* wait(2); |
mihaidd | 0:ae94058fb59a | 168 | STM2Android.scanf("%s",&flag_Android);//得到上位机传来的begin |
mihaidd | 0:ae94058fb59a | 169 | |
mihaidd | 0:ae94058fb59a | 170 | if(strcmp(flag_Android,flag_Android_1)==0) |
mihaidd | 0:ae94058fb59a | 171 | { |
mihaidd | 0:ae94058fb59a | 172 | wait(1); |
mihaidd | 0:ae94058fb59a | 173 | if ((red_value1>green_value1)&&(red_value1>blue_value1)) //shifoukeyiyizhichuanzhi??????????????? |
mihaidd | 0:ae94058fb59a | 174 | { |
mihaidd | 0:ae94058fb59a | 175 | STM2Android.printf("a3");//red+3 |
mihaidd | 0:ae94058fb59a | 176 | goal_1=3; |
mihaidd | 0:ae94058fb59a | 177 | } |
mihaidd | 0:ae94058fb59a | 178 | else if ((green_value1>red_value1)&&(green_value1>blue_value1)) //shifoukeyiyizhichuanzhi??????????????? |
mihaidd | 0:ae94058fb59a | 179 | { |
mihaidd | 0:ae94058fb59a | 180 | STM2Android.printf("a2");//green+2 |
mihaidd | 0:ae94058fb59a | 181 | goal_1=2; |
mihaidd | 0:ae94058fb59a | 182 | } |
mihaidd | 0:ae94058fb59a | 183 | else if ((blue_value1>green_value1)&&(blue_value1>red_value1)) //shifoukeyiyizhichuanzhi??????????????? |
mihaidd | 0:ae94058fb59a | 184 | { |
mihaidd | 0:ae94058fb59a | 185 | STM2Android.printf("a1");//blue+1 |
mihaidd | 0:ae94058fb59a | 186 | goal_1=1; |
mihaidd | 0:ae94058fb59a | 187 | } |
mihaidd | 0:ae94058fb59a | 188 | wait(1); |
mihaidd | 0:ae94058fb59a | 189 | d=0;j=0;k=0;//电机转动 |
mihaidd | 0:ae94058fb59a | 190 | wait(5); |
mihaidd | 0:ae94058fb59a | 191 | d=1;j=1;k=1;//电机停止转动 |
mihaidd | 0:ae94058fb59a | 192 | wait(1); |
mihaidd | 0:ae94058fb59a | 193 | |
mihaidd | 0:ae94058fb59a | 194 | if ((red_value2>green_value2)&&(red_value2>blue_value2)) //shifoukeyiyizhichuanzhi??????????????? |
mihaidd | 0:ae94058fb59a | 195 | { |
mihaidd | 0:ae94058fb59a | 196 | STM2Android.printf("b3");//red+3 |
mihaidd | 0:ae94058fb59a | 197 | goal_2=3; |
mihaidd | 0:ae94058fb59a | 198 | } |
mihaidd | 0:ae94058fb59a | 199 | else if ((green_value2>red_value2)&&(green_value2>blue_value2)) //shifoukeyiyizhichuanzhi??????????????? |
mihaidd | 0:ae94058fb59a | 200 | { |
mihaidd | 0:ae94058fb59a | 201 | STM2Android.printf("b2");//green+2 |
mihaidd | 0:ae94058fb59a | 202 | goal_2=2; |
mihaidd | 0:ae94058fb59a | 203 | } |
mihaidd | 0:ae94058fb59a | 204 | else if ((blue_value2>green_value2)&&(blue_value2>red_value2)) //shifoukeyiyizhichuanzhi??????????????? |
mihaidd | 0:ae94058fb59a | 205 | { |
mihaidd | 0:ae94058fb59a | 206 | STM2Android.printf("b1");//blue+1 |
mihaidd | 0:ae94058fb59a | 207 | goal_2=1; |
mihaidd | 0:ae94058fb59a | 208 | } |
mihaidd | 0:ae94058fb59a | 209 | wait(1); |
mihaidd | 0:ae94058fb59a | 210 | |
mihaidd | 0:ae94058fb59a | 211 | if(goal_1>goal_2) |
mihaidd | 0:ae94058fb59a | 212 | { |
mihaidd | 0:ae94058fb59a | 213 | STM2Android.printf("c1");//ren win |
mihaidd | 0:ae94058fb59a | 214 | if(kehu==0) |
mihaidd | 0:ae94058fb59a | 215 | { |
mihaidd | 0:ae94058fb59a | 216 | d=0; |
mihaidd | 0:ae94058fb59a | 217 | j=0; |
mihaidd | 0:ae94058fb59a | 218 | k=1; |
mihaidd | 0:ae94058fb59a | 219 | wait(5); |
mihaidd | 0:ae94058fb59a | 220 | d=1; |
mihaidd | 0:ae94058fb59a | 221 | j=1; |
mihaidd | 0:ae94058fb59a | 222 | k=1; |
mihaidd | 0:ae94058fb59a | 223 | } |
mihaidd | 0:ae94058fb59a | 224 | else if(kehu==1) |
mihaidd | 0:ae94058fb59a | 225 | { |
mihaidd | 0:ae94058fb59a | 226 | d=0; |
mihaidd | 0:ae94058fb59a | 227 | j=1; |
mihaidd | 0:ae94058fb59a | 228 | k=0; |
mihaidd | 0:ae94058fb59a | 229 | } |
mihaidd | 0:ae94058fb59a | 230 | else if(kehu==2) |
mihaidd | 0:ae94058fb59a | 231 | { |
mihaidd | 0:ae94058fb59a | 232 | d=1; |
mihaidd | 0:ae94058fb59a | 233 | j=0; |
mihaidd | 0:ae94058fb59a | 234 | k=0; |
mihaidd | 0:ae94058fb59a | 235 | } |
mihaidd | 0:ae94058fb59a | 236 | } |
mihaidd | 0:ae94058fb59a | 237 | |
mihaidd | 0:ae94058fb59a | 238 | // |
mihaidd | 0:ae94058fb59a | 239 | |
mihaidd | 0:ae94058fb59a | 240 | else if(goal_1<=goal_2) |
mihaidd | 0:ae94058fb59a | 241 | STM2Android.printf("c0");//robot win |
mihaidd | 0:ae94058fb59a | 242 | |
mihaidd | 0:ae94058fb59a | 243 | // STM2Android.printf("aClear(%d),Red(%d),Green(%d),Blue(%d),d=(%d)\r\n", clear_value, red_value, green_value, blue_value, dist); |
mihaidd | 0:ae94058fb59a | 244 | //STM2Android.printf("ad=(%d)\r\n",dist); |
mihaidd | 0:ae94058fb59a | 245 | }//小if语句判断结束 */ |
mihaidd | 0:ae94058fb59a | 246 | }//大if语句判断结束 |
mihaidd | 0:ae94058fb59a | 247 | |
mihaidd | 0:ae94058fb59a | 248 | |
mihaidd | 0:ae94058fb59a | 249 | |
mihaidd | 0:ae94058fb59a | 250 | // else if(strcmp(Android_0,flag_Android_3)==0)//维护模式 |
mihaidd | 0:ae94058fb59a | 251 | // { |
mihaidd | 0:ae94058fb59a | 252 | // STM2Android.scanf("%c",&Android_1); |
mihaidd | 0:ae94058fb59a | 253 | // if(Android_1=='c')STM2Android.printf("dClear1(%d),Red1(%d),Green1(%d),Blue1(%d)\r\n", clear_value1, red_value1, green_value1, blue_value1); |
mihaidd | 0:ae94058fb59a | 254 | // else if(Android_1=='d')STM2Android.printf("dd=(%d)\r\n",dist); |
mihaidd | 0:ae94058fb59a | 255 | // else if(Android_1=='e') |
mihaidd | 0:ae94058fb59a | 256 | // { |
mihaidd | 0:ae94058fb59a | 257 | // d=0;j=0;k=0;//电机转动 |
mihaidd | 0:ae94058fb59a | 258 | // wait(10); |
mihaidd | 0:ae94058fb59a | 259 | // d=1;j=1;k=1;//电机停止转动 |
mihaidd | 0:ae94058fb59a | 260 | // } |
mihaidd | 0:ae94058fb59a | 261 | // } |
mihaidd | 0:ae94058fb59a | 262 | }//while循环结束 |
mihaidd | 0:ae94058fb59a | 263 | |
mihaidd | 0:ae94058fb59a | 264 | } |