Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 #include "mbed.h" 00002 #include "stdint.h" 00003 #include <string> 00004 #include "MCP23017.h" 00005 #include "WattBob_TextLCD.h" 00006 #include "VL6180.h" 00007 00008 //Hyperterminal configuration 00009 //9600 bauds, 8-bit data, no parity 00010 00011 //VL6180X defines 00012 00013 #define IDENTIFICATIONMODEL_ID 0x0000 00014 00015 VL6180 TOF_sensor(I2C_SDA, I2C_SCL);//距离的串口定义 00016 DigitalOut myled0(LED2); 00017 00018 #define BACK_LIGHT_ON(INTERFACE) INTERFACE->write_bit(1,BL_BIT) 00019 #define BACK_LIGHT_OFF(INTERFACE) INTERFACE->write_bit(0,BL_BIT) 00020 00021 MCP23017 *par_port; 00022 WattBob_TextLCD *lcd; 00023 Serial STM2Android(PC_4,PC_5,115200);//上位机串口定义 00024 I2C i2c1(PC_1, PC_0); //pins for I2C communication (SDA, SCL) 人颜色的串口定义 00025 I2C i2c2(PB_14, PB_13); //机器人颜色的串口定义 00026 00027 DigitalOut d(PB_3); //电机的第一位 00028 DigitalOut j(PA_9); //电机的第二位 00029 DigitalOut k(PC_7); //电机的第三位 00030 DigitalOut a(PC_10);//红外的一 00031 DigitalOut b(PC_12);//红外的二 00032 00033 int sensor_addr = 41 << 1; 00034 00035 char flag_Android[]=""; 00036 char flag_Android_1[]="begin"; 00037 char flag_Android_2[]="distance"; 00038 char Android_0[]=""; 00039 char Android_1='l'; 00040 char flag_Android_3[]="repair"; 00041 int main() 00042 { 00043 int goal_1=0;//人类得分 00044 int goal_2=0;//机器人得分 00045 d=1; 00046 j=1; 00047 k=1; 00048 int kehu=0;//客户类型 00049 00050 uint8_t dist;//距离的值 00051 //julichuanganqi 00052 par_port = new MCP23017(I2C_SDA, I2C_SCL,0x0400); 00053 par_port->config(0x0F00, 0x0F00, 0x0F00); // configure MCP23017 chip on WattBob 00054 lcd = new WattBob_TextLCD(par_port); 00055 00056 00057 00058 while(1) 00059 { 00060 00061 dist = TOF_sensor.getDistance(); 00062 lcd->cls(); 00063 lcd->locate(0,0); 00064 i2c1.frequency(100000);//修改为100000,否则报错 00065 i2c2.frequency(100000); 00066 00067 char id_regval[1] = {146}; 00068 char data[1] = {0}; 00069 i2c1.write(sensor_addr,id_regval,1, true); 00070 i2c1.read(sensor_addr,data,1,false); 00071 i2c2.write(sensor_addr,id_regval,1, true); 00072 i2c2.read(sensor_addr,data,1,false); 00073 00074 char timing_register[2] = {129,0}; 00075 i2c1.write(sensor_addr,timing_register,2,false); 00076 i2c2.write(sensor_addr,timing_register,2,false); 00077 00078 char control_register[2] = {143,0}; 00079 i2c1.write(sensor_addr,control_register,2,false); 00080 i2c2.write(sensor_addr,control_register,2,false); 00081 00082 char enable_register[2] = {128,3}; 00083 i2c1.write(sensor_addr,enable_register,2,false); 00084 i2c2.write(sensor_addr,enable_register,2,false); 00085 // Read data from color sensor (Clear/Red/Green/Blue) 00086 00087 char clear_reg[1] = {148}; 00088 char clear_data1[2] = {0,0}; 00089 char clear_data2[2] = {0,0}; 00090 00091 i2c1.write(sensor_addr,clear_reg,1, true); 00092 i2c1.read(sensor_addr,clear_data1,2, false); 00093 i2c2.write(sensor_addr,clear_reg,1, true); 00094 i2c2.read(sensor_addr,clear_data2,2, false); 00095 00096 int clear_value1 = ((int)clear_data1[1] << 8) | clear_data1[0]; 00097 int clear_value2 = ((int)clear_data2[1] << 8) | clear_data2[0]; 00098 00099 char red_reg[1] = {150}; 00100 char red_data1[2] = {0,0}; 00101 char red_data2[2] = {0,0}; 00102 00103 i2c1.write(sensor_addr,red_reg,1, true); 00104 i2c1.read(sensor_addr,red_data1,2, false); 00105 i2c2.write(sensor_addr,red_reg,1, true); 00106 i2c2.read(sensor_addr,red_data2,2, false); 00107 00108 int red_value1 = ((int)red_data1[1] << 8) | red_data1[0]; 00109 int red_value2 = ((int)red_data2[1] << 8) | red_data2[0]; 00110 00111 char green_reg[1] = {152}; 00112 char green_data1[2] = {0,0}; 00113 char green_data2[2] = {0,0}; 00114 00115 i2c1.write(sensor_addr,green_reg,1, true); 00116 i2c1.read(sensor_addr,green_data1,2, false); 00117 i2c2.write(sensor_addr,green_reg,1, true); 00118 i2c2.read(sensor_addr,green_data2,2, false); 00119 00120 int green_value1 = ((int)green_data1[1] << 8) | green_data1[0]; 00121 int green_value2 = ((int)green_data2[1] << 8) | green_data2[0]; 00122 00123 char blue_reg[1] = {154}; 00124 char blue_data1[2] = {0,0}; 00125 char blue_data2[2] = {0,0}; 00126 00127 i2c1.write(sensor_addr,blue_reg,1, true); 00128 i2c1.read(sensor_addr,blue_data1,2, false); 00129 i2c2.write(sensor_addr,blue_reg,1, true); 00130 i2c2.read(sensor_addr,blue_data2,2, false); 00131 00132 int blue_value1 = ((int)blue_data1[1] << 8) | blue_data1[0]; 00133 int blue_value2 = ((int)blue_data2[1] << 8) | blue_data2[0]; 00134 // print sensor readings 00135 // while(1) 00136 // { 00137 // if(STM2Android.readable()) 00138 // { 00139 STM2Android.scanf("%s",&Android_0);//要给上位机传输dist以及用户识别 00140 // break; 00141 // } 00142 // } 00143 wait(2); 00144 if(strcmp(Android_0,flag_Android_2)==0) 00145 { 00146 // if (a==0&&b==0) kehu=0;//用户识别 小孩 00147 // else if (a==0&&b==1) kehu=1;//青年 00148 //else if (a==1&&b==0) kehu=2;//老人 00149 //STM2Android.printf("x%d\r\n",kehu); 00150 wait(1); 00151 // if(dist<=180) 00152 STM2Android.printf("e");//距离合适 00153 00154 /* else if(strcmp(Android_0,flag_Android_3)==0)//维护模式 00155 { 00156 STM2Android.scanf("%c",&Android_1); 00157 if(Android_1=='c')STM2Android.printf("dClear1(%d),Red1(%d),Green1(%d),Blue1(%d)\r\n", clear_value1, red_value1, green_value1, blue_value1); 00158 else if(Android_1=='d')STM2Android.printf("dd=(%d)\r\n",dist); 00159 else if(Android_1=='e') 00160 { 00161 d=0;j=0;k=0;//电机转动 00162 wait(10); 00163 d=1;j=1;k=1;//电机停止转动 00164 } 00165 } 00166 */ 00167 /* wait(2); 00168 STM2Android.scanf("%s",&flag_Android);//得到上位机传来的begin 00169 00170 if(strcmp(flag_Android,flag_Android_1)==0) 00171 { 00172 wait(1); 00173 if ((red_value1>green_value1)&&(red_value1>blue_value1)) //shifoukeyiyizhichuanzhi??????????????? 00174 { 00175 STM2Android.printf("a3");//red+3 00176 goal_1=3; 00177 } 00178 else if ((green_value1>red_value1)&&(green_value1>blue_value1)) //shifoukeyiyizhichuanzhi??????????????? 00179 { 00180 STM2Android.printf("a2");//green+2 00181 goal_1=2; 00182 } 00183 else if ((blue_value1>green_value1)&&(blue_value1>red_value1)) //shifoukeyiyizhichuanzhi??????????????? 00184 { 00185 STM2Android.printf("a1");//blue+1 00186 goal_1=1; 00187 } 00188 wait(1); 00189 d=0;j=0;k=0;//电机转动 00190 wait(5); 00191 d=1;j=1;k=1;//电机停止转动 00192 wait(1); 00193 00194 if ((red_value2>green_value2)&&(red_value2>blue_value2)) //shifoukeyiyizhichuanzhi??????????????? 00195 { 00196 STM2Android.printf("b3");//red+3 00197 goal_2=3; 00198 } 00199 else if ((green_value2>red_value2)&&(green_value2>blue_value2)) //shifoukeyiyizhichuanzhi??????????????? 00200 { 00201 STM2Android.printf("b2");//green+2 00202 goal_2=2; 00203 } 00204 else if ((blue_value2>green_value2)&&(blue_value2>red_value2)) //shifoukeyiyizhichuanzhi??????????????? 00205 { 00206 STM2Android.printf("b1");//blue+1 00207 goal_2=1; 00208 } 00209 wait(1); 00210 00211 if(goal_1>goal_2) 00212 { 00213 STM2Android.printf("c1");//ren win 00214 if(kehu==0) 00215 { 00216 d=0; 00217 j=0; 00218 k=1; 00219 wait(5); 00220 d=1; 00221 j=1; 00222 k=1; 00223 } 00224 else if(kehu==1) 00225 { 00226 d=0; 00227 j=1; 00228 k=0; 00229 } 00230 else if(kehu==2) 00231 { 00232 d=1; 00233 j=0; 00234 k=0; 00235 } 00236 } 00237 00238 // 00239 00240 else if(goal_1<=goal_2) 00241 STM2Android.printf("c0");//robot win 00242 00243 // STM2Android.printf("aClear(%d),Red(%d),Green(%d),Blue(%d),d=(%d)\r\n", clear_value, red_value, green_value, blue_value, dist); 00244 //STM2Android.printf("ad=(%d)\r\n",dist); 00245 }//小if语句判断结束 */ 00246 }//大if语句判断结束 00247 00248 00249 00250 // else if(strcmp(Android_0,flag_Android_3)==0)//维护模式 00251 // { 00252 // STM2Android.scanf("%c",&Android_1); 00253 // if(Android_1=='c')STM2Android.printf("dClear1(%d),Red1(%d),Green1(%d),Blue1(%d)\r\n", clear_value1, red_value1, green_value1, blue_value1); 00254 // else if(Android_1=='d')STM2Android.printf("dd=(%d)\r\n",dist); 00255 // else if(Android_1=='e') 00256 // { 00257 // d=0;j=0;k=0;//电机转动 00258 // wait(10); 00259 // d=1;j=1;k=1;//电机停止转动 00260 // } 00261 // } 00262 }//while循环结束 00263 00264 }
Generated on Thu Aug 18 2022 22:56:09 by
1.7.2