Mingcheng Lin / Mbed 2 deprecated TEST

Dependencies:   mbed

Revision:
1:9bafb8db5980
Parent:
0:3d3331775af2
Child:
2:eca01caa037f
--- a/main.cpp	Wed May 08 03:37:43 2019 +0000
+++ b/main.cpp	Fri May 24 13:11:44 2019 +0000
@@ -2,6 +2,7 @@
 #include "stdint.h"
 #include "MCP23017.h"
 #include "WattBob_TextLCD.h"
+#include "string"
 #include "VL6180.h"
 #define     BACK_LIGHT_ON(INTERFACE)    INTERFACE->write_bit(1,BL_BIT)
 #define     BACK_LIGHT_OFF(INTERFACE)   INTERFACE->write_bit(0,BL_BIT)
@@ -9,17 +10,22 @@
 VL6180  TOF_sensor(I2C_SDA, I2C_SCL);
 MCP23017            *par_port;
 WattBob_TextLCD     *lcd;
-Serial pc(A0,A1,9600);//TX,RX
+Serial pc(PC_12,PD_2,115200);//TX,RX
+//Serial pc(USBTX,USBRX,115200);//TX,RX
 I2C i2c(PC_1, PC_0); //pins for I2C communication (SDA, SCL)
+//
+DigitalIn input1(D2);
+DigitalIn input2(D3);
+DigitalIn input3(D4);
+DigitalIn input4(D5);
+
+DigitalOut out1(D7);
+DigitalOut out2(D8);
+DigitalOut out3(D9);
 int sensor_addr = 41 << 1;
 #define Random(x)(rand()%x)
 DigitalOut green(LED1);
 int flag_Android=0;
-DigitalOut pwm1(D6);
-DigitalOut pwm2(D7);
-DigitalOut pwm3(D8);
-DigitalIn mode1(A3);
-DigitalIn mode2(A4);
 int start_signal;
 int end_signal;
 int a;
@@ -31,9 +37,9 @@
 {
       end_signal=pc.getc();
 }
-int color_sensor()
+string color_sensor()
 {
-      int customer_card;
+      string y;
       char clear_reg[1] = {148};
 
         char clear_data[2] = {0,0};
@@ -89,20 +95,76 @@
 
     //判断颜色
           if (red_value>green_value&&red_value>blue_value)
-    customer_card=-2;
         
+        y="red";
         
         else if (green_value>red_value&&green_value>blue_value)
-           customer_card=1;
+        y="green";
+    
+    return y;
+    }
+    string color_sensors()
+{
+      string y;
+      char clear_reg[1] = {148};
+
+        char clear_data[2] = {0,0};
+
+        i2c.write(sensor_addr,clear_reg,1, true);
+
+        i2c.read(sensor_addr,clear_data,2, false);
+
+        
+
+        int clear_value = ((int)clear_data[1] << 8) | clear_data[0];
+
+        
+
+        char red_reg[1] = {150};
+
+        char red_data[2] = {0,0};
+
+        i2c.write(sensor_addr,red_reg,1, true);
+
+        i2c.read(sensor_addr,red_data,2, false);
+
         
-        else if (blue_value>red_value&&blue_value>green_value)
-           customer_card=2;
+
+        int red_value = ((int)red_data[1] << 8) | red_data[0];
+
+       
+
+       char green_reg[1] = {152};
+
+       char green_data[2] = {0,0};
+
+        i2c.write(sensor_addr,green_reg,1, true);
+
+        i2c.read(sensor_addr,green_data,2, false);
+
+       
+
+       int green_value = ((int)green_data[1] << 8) | green_data[0];
+
+        
+
+        char blue_reg[1] = {154};
+
+        char blue_data[2] = {0,0};
+
+        i2c.write(sensor_addr,blue_reg,1, true);
+
+        i2c.read(sensor_addr,blue_data,2, false);
     
-    return customer_card;
+
+        int blue_value = ((int)blue_data[1] << 8) | blue_data[0];
+
+    //判断颜色
+        pc.printf("green%d red%d blue%d\n",green_value,red_value,blue_value);
     }
 int main()
 {
-pc.baud(9600);
+pc.baud(115200);
     
     // Connect to the Color sensor and verify whether we connected to the correct sensor. 
     
@@ -124,22 +186,17 @@
     
     char enable_register[2] = {128,3};
     i2c.write(sensor_addr,enable_register,2,false);
-    pc.baud(9600); 
+    pc.baud(115200); 
     uint8_t dist;
-    par_port = new MCP23017(I2C_SDA, I2C_SCL,0x0400);
-    par_port->config(0x0F00, 0x0F00, 0x0F00);           // configure MCP23017 chip on WattBob
-    
-    lcd = new WattBob_TextLCD(par_port);
-    int winscore;
-while(dist==255)
-{
- dist = TOF_sensor.getDistance();
-
-        pc.printf("d=%d", dist);
-        wait(0.2);
-        lcd->cls(); 
-        lcd->locate(0,0);
-}
+//while(dist==255)
+//{
+// dist = TOF_sensor.getDistance();
+//
+//        pc.printf("d=%d", dist);
+//        wait(0.2);
+//        lcd->cls(); 
+//        lcd->locate(0,0);
+//}
 /*while(mode1==0&&mode2==0)
 {}
 if(mode1==0&&mode2==1)
@@ -148,94 +205,74 @@
 {winscore=20;}
 else if(mode1==1&&mode2==1)
 {winscore=25;}*/
-    int customer_card;
- int record[10];
- int p;
 while(1)
 {
-/*pc.attach(&echouart1,SerialBase::RxIrq);//如果串口没有发送数据,那么主程序中的程序会继续执行,如果串口有发送数据,则执行函数*/
-if(pc.readable())
+
+       char c=pc.getc();
+       switch(c)
        {
-          p=pc.getc();
-          start_signal=p;
-          break;
-          }
-}
- if(start_signal==1)
-  {
-    int score[10];
-    score[0]=10;
-    int robot_card;
-    int a;
-    int i;
-    for(i=1;i<5;i++)
-      {
-           pwm1=1;pwm2=1;pwm3=0;//控制遮挡电机关闭
-           a=Random(4);//电脑出牌,产生[0, dis)之间的随机数,注意不包括4
-           switch(a)
-        {case 0:{robot_card=-2;pwm1=0;pwm2=0;pwm3=1;break;}
-         case 1: {robot_card=-1;pwm1=0;pwm2=1;pwm3=0;break;}
-         case 2: {robot_card=1;pwm1=0;pwm2=1;pwm3=1;break;}
-         case 3: {robot_card=2;pwm1=1;pwm2=0;pwm3=0;break;}     
-        }
-                       /*wait_ms(15000);*/
-        customer_card=color_sensor();
-        switch(customer_card)
-        {case -2:{record[i]=2;break;}
-         case 1:{record[i]=Random(2);break;}
-         case 2:{record[i]=-2;break;}   
-        }
-        if(customer_card==!0)
+        case'j':
+        dist = TOF_sensor.getDistance();
+        if(dist<100)
         {
-            pwm1=1;pwm2=1;pwm3=1;//控制遮挡电机显示电脑出牌
+        pc.printf("youren");
         }
-        score[i]=score[i-1]+robot_card*customer_card;
-        pc.printf("%d",score[i]);//每一轮传给上位机总分
-        if(score[i]>=winscore)
-            {   
-            pc.printf("%d",score[i]);
-            break;
-            }
-        while(end_signal==0)//这一轮结束信号(即25秒以后产生)
-        {}
-
-                  }
-    if(score[i]<20)
-    {
-        for(i;i<7;i++)
-    {
-        pwm1=1;pwm2=1;pwm3=0;//控制遮挡电机关闭
-            robot_card=record[Random(i-1)+1];
-           switch(robot_card)
-        {case -2:  {pwm1=0;pwm2=0;pwm3=1;break;}
-         case -1:  {pwm1=0;pwm2=1;pwm3=0;break;}
-         case 1:   {pwm1=0;pwm2=1;pwm3=1;break;}
-         case 2:   {pwm1=1;pwm2=0;pwm3=0;break;}        
-        }
-                       wait_ms(15000);
-        customer_card=color_sensor();
-        switch(customer_card)
-        {case -2:{record[i]=2;break;}
-         case 1:{record[i]=Random(2);break;}
-         case 2:{record[i]=-2;break;}   
-        }
-        if(customer_card==!0)
+        break;
+        
+        case'y':
+        if(input3==1&&input4==0){
+        wait(0.1);
+        pc.printf("CN");
+        }  
+        else
         {
-            pwm1=1;pwm2=1;pwm3=1;//控制遮挡电机显示电脑出牌
-        }
-        score[i]=score[i-1]+robot_card*customer_card;
-        pc.printf("%d",score[i]);//每一轮传给上位机总分
-        if(score[i]>=winscore)
-            {   
-            pc.printf("%d",score[i]);
-            break;
-            }
-        while(end_signal==0)//这一轮结束信号(即25秒以后产生)
-        {
-        pc.attach(&echouart1,SerialBase::RxIrq);//如果串口没有发送数据,那么主程序中的程序会继续执行,如果串口有发送数据,则执行函数 
-        }
+        wait(0.1);
+        pc.printf("EN");
+        }    
+        break;
+        
+        case'n':
+        pc.printf("%s",color_sensor()); 
+        break;
+        
+        case'd':
+        out1=0;out2=1;out3=0;
+        wait(1);
+        if(input1==0&&input2==1)
+     {
+        pc.printf("1");
+     }
+        else if(input1==1&&input2==0) 
+     {
+        pc.printf("0") ;
+     }
+        break;
+        
+        case'g':
+        out1=1;out2=0;out3=0;
+        wait(1);
+        if(input1==1&&input2==0)
+     {
+        pc.printf("1");
+     }
+        else if(input1==0&&input2==1)
+     {
+        pc.printf("0") ;
+     }
+        break;
+        
+        case'l':
+        out1=0;out2=0;out3=1;
+        break;
+        
+        case'1':
+        color_sensors();
+        break;
+        
+        case'2':
+        dist = TOF_sensor.getDistance();
+        pc.printf("dis%d\n",dist);
+        break;
     }
-    }
-
   }
 }