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,9600);//上位机串口定义 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 d=1; 00050 j=1; 00051 k=1; 00052 uint8_t dist;//距离的值 00053 //julichuanganqi 00054 par_port = new MCP23017(I2C_SDA, I2C_SCL,0x0400); 00055 par_port->config(0x0F00, 0x0F00, 0x0F00); // configure MCP23017 chip on WattBob 00056 lcd = new WattBob_TextLCD(par_port); 00057 00058 00059 00060 while(1) 00061 { 00062 int goal_1=0;//人类得分 00063 int goal_2=0;//机器人得分 00064 00065 int kehu=0;//客户类型 00066 00067 dist = TOF_sensor.getDistance(); 00068 lcd->cls(); 00069 lcd->locate(0,0); 00070 i2c1.frequency(100000);//修改为100000,否则报错 00071 i2c2.frequency(100000); 00072 00073 char id_regval[1] = {146}; 00074 char data[1] = {0}; 00075 i2c1.write(sensor_addr,id_regval,1, true); 00076 i2c1.read(sensor_addr,data,1,false); 00077 i2c2.write(sensor_addr,id_regval,1, true); 00078 i2c2.read(sensor_addr,data,1,false); 00079 00080 char timing_register[2] = {129,0}; 00081 i2c1.write(sensor_addr,timing_register,2,false); 00082 i2c2.write(sensor_addr,timing_register,2,false); 00083 00084 char control_register[2] = {143,0}; 00085 i2c1.write(sensor_addr,control_register,2,false); 00086 i2c2.write(sensor_addr,control_register,2,false); 00087 00088 char enable_register[2] = {128,3}; 00089 i2c1.write(sensor_addr,enable_register,2,false); 00090 i2c2.write(sensor_addr,enable_register,2,false); 00091 // Read data from color sensor (Clear/Red/Green/Blue) 00092 00093 char clear_reg[1] = {148}; 00094 char clear_data1[2] = {0,0}; 00095 char clear_data2[2] = {0,0}; 00096 00097 i2c1.write(sensor_addr,clear_reg,1, true); 00098 i2c1.read(sensor_addr,clear_data1,2, false); 00099 i2c2.write(sensor_addr,clear_reg,1, true); 00100 i2c2.read(sensor_addr,clear_data2,2, false); 00101 00102 int clear_value1 = ((int)clear_data1[1] << 8) | clear_data1[0]; 00103 int clear_value2 = ((int)clear_data2[1] << 8) | clear_data2[0]; 00104 00105 char red_reg[1] = {150}; 00106 char red_data1[2] = {0,0}; 00107 char red_data2[2] = {0,0}; 00108 00109 i2c1.write(sensor_addr,red_reg,1, true); 00110 i2c1.read(sensor_addr,red_data1,2, false); 00111 i2c2.write(sensor_addr,red_reg,1, true); 00112 i2c2.read(sensor_addr,red_data2,2, false); 00113 00114 int red_value1 = ((int)red_data1[1] << 8) | red_data1[0]; 00115 int red_value2 = ((int)red_data2[1] << 8) | red_data2[0]; 00116 00117 char green_reg[1] = {152}; 00118 char green_data1[2] = {0,0}; 00119 char green_data2[2] = {0,0}; 00120 00121 i2c1.write(sensor_addr,green_reg,1, true); 00122 i2c1.read(sensor_addr,green_data1,2, false); 00123 i2c2.write(sensor_addr,green_reg,1, true); 00124 i2c2.read(sensor_addr,green_data2,2, false); 00125 00126 int green_value1 = ((int)green_data1[1] << 8) | green_data1[0]; 00127 int green_value2 = ((int)green_data2[1] << 8) | green_data2[0]; 00128 00129 char blue_reg[1] = {154}; 00130 char blue_data1[2] = {0,0}; 00131 char blue_data2[2] = {0,0}; 00132 00133 i2c1.write(sensor_addr,blue_reg,1, true); 00134 i2c1.read(sensor_addr,blue_data1,2, false); 00135 i2c2.write(sensor_addr,blue_reg,1, true); 00136 i2c2.read(sensor_addr,blue_data2,2, false); 00137 00138 int blue_value1 = ((int)blue_data1[1] << 8) | blue_data1[0]; 00139 int blue_value2 = ((int)blue_data2[1] << 8) | blue_data2[0]; 00140 // print sensor readings 00141 00142 STM2Android.scanf("%s",&Android_0);//要给上位机传输dist以及用户识别 00143 if(strcmp(Android_0,flag_Android_2)==0) 00144 { 00145 // if (a==0&&b==0) kehu=0;//用户识别 小孩 00146 // else if (a==0&&b==1) kehu=1;//青年 00147 //else if (a==1&&b==0) kehu=2;//老人 00148 //STM2Android.printf("x%d\r\n",kehu); 00149 wait(3); 00150 // if(dist<=180) 00151 STM2Android.printf("e");//距离合适 00152 00153 /* else if(strcmp(Android_0,flag_Android_3)==0)//维护模式 00154 { 00155 STM2Android.scanf("%c",&Android_1); 00156 if(Android_1=='c')STM2Android.printf("dClear1(%d),Red1(%d),Green1(%d),Blue1(%d)\r\n", clear_value1, red_value1, green_value1, blue_value1); 00157 else if(Android_1=='d')STM2Android.printf("dd=(%d)\r\n",dist); 00158 else if(Android_1=='e') 00159 { 00160 d=0;j=0;k=0;//电机转动 00161 wait(10); 00162 d=1;j=1;k=1;//电机停止转动 00163 } 00164 } 00165 */ 00166 wait(2); 00167 STM2Android.scanf("%s",&flag_Android); 00168 if(strcmp(flag_Android,flag_Android_1)==0) 00169 { 00170 wait(1); 00171 if ((red_value1>green_value1)&&(red_value1>blue_value1)) //shifoukeyiyizhichuanzhi??????????????? 00172 { 00173 STM2Android.printf("a3");//red+3 00174 goal_1=3; 00175 } 00176 if ((green_value1>red_value1)&&(green_value1>blue_value1)) //shifoukeyiyizhichuanzhi??????????????? 00177 { 00178 STM2Android.printf("a2");//green+2 00179 goal_1=2; 00180 } 00181 if ((blue_value1>green_value1)&&(blue_value1>red_value1)) //shifoukeyiyizhichuanzhi??????????????? 00182 { 00183 STM2Android.printf("a1");//blue+1 00184 goal_1=1; 00185 } 00186 wait(1); 00187 d=0;j=0;k=0;//电机转动 00188 wait(5); 00189 d=1;j=1;k=1;//电机停止转动 00190 wait(1); 00191 00192 if ((red_value2>green_value2)&&(red_value2>blue_value2)) //shifoukeyiyizhichuanzhi??????????????? 00193 { 00194 STM2Android.printf("b3");//red+3 00195 goal_2=3; 00196 } 00197 if ((green_value2>red_value2)&&(green_value2>blue_value2)) //shifoukeyiyizhichuanzhi??????????????? 00198 { 00199 STM2Android.printf("b2");//green+2 00200 goal_2=2; 00201 } 00202 if ((blue_value2>green_value2)&&(blue_value2>red_value2)) //shifoukeyiyizhichuanzhi??????????????? 00203 { 00204 STM2Android.printf("b1");//blue+1 00205 goal_2=1; 00206 } 00207 wait(1); 00208 00209 if(goal_1>goal_2) 00210 { 00211 STM2Android.printf("c1");//ren win 00212 if(kehu==0) 00213 { 00214 d=0; 00215 j=0; 00216 k=1; 00217 wait(5); 00218 d=1; 00219 j=1; 00220 k=1; 00221 } 00222 else if(kehu==1) 00223 { 00224 d=0; 00225 j=1; 00226 k=0; 00227 } 00228 else if(kehu==2) 00229 { 00230 d=1; 00231 j=0; 00232 k=0; 00233 } 00234 } 00235 00236 // 00237 00238 if(goal_1<=goal_2) 00239 STM2Android.printf("c0");//robot win 00240 00241 // STM2Android.printf("aClear(%d),Red(%d),Green(%d),Blue(%d),d=(%d)\r\n", clear_value, red_value, green_value, blue_value, dist); 00242 //STM2Android.printf("ad=(%d)\r\n",dist); 00243 }//小if语句判断结束 00244 }//大if语句判断结束 00245 00246 00247 00248 // else if(strcmp(Android_0,flag_Android_3)==0)//维护模式 00249 // { 00250 // STM2Android.scanf("%c",&Android_1); 00251 // if(Android_1=='c')STM2Android.printf("dClear1(%d),Red1(%d),Green1(%d),Blue1(%d)\r\n", clear_value1, red_value1, green_value1, blue_value1); 00252 // else if(Android_1=='d')STM2Android.printf("dd=(%d)\r\n",dist); 00253 // else if(Android_1=='e') 00254 // { 00255 // d=0;j=0;k=0;//电机转动 00256 // wait(10); 00257 // d=1;j=1;k=1;//电机停止转动 00258 // } 00259 // } 00260 00261 }//while循环结束 00262 }
Generated on Tue Jul 19 2022 03:12:12 by
1.7.2