cao yang / Mbed 2 deprecated game_zuizhongban

Dependencies:   mbed juli111

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }