yyyy

Dependencies:   mbed juli111

Committer:
mihaidd
Date:
Mon May 13 09:07:38 2019 +0000
Revision:
0:ae94058fb59a
ffff

Who changed what in which revision?

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