kjkjkjk

Dependencies:   mbed juli111

Committer:
mihaidd
Date:
Sun May 12 13:39:08 2019 +0000
Revision:
2:a6b8baa4e4b7
Parent:
1:0c82ff54d168
kjkjk

Who changed what in which revision?

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