cao yang / Mbed 2 deprecated game_ceshiban

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,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 }