w m / Mbed 2 deprecated DISTANCE_PROJECT1

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
mrweilun
Date:
Sun May 12 11:02:13 2019 +0000
Parent:
0:3d3331775af2
Commit message:
dasda

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed May 08 03:37:43 2019 +0000
+++ b/main.cpp	Sun May 12 11:02:13 2019 +0000
@@ -3,6 +3,7 @@
 #include "MCP23017.h"
 #include "WattBob_TextLCD.h"
 #include "VL6180.h"
+#include "time.h"
 #define     BACK_LIGHT_ON(INTERFACE)    INTERFACE->write_bit(1,BL_BIT)
 #define     BACK_LIGHT_OFF(INTERFACE)   INTERFACE->write_bit(0,BL_BIT)
 #define IDENTIFICATIONMODEL_ID 0x0000
@@ -12,28 +13,30 @@
 Serial pc(A0,A1,9600);//TX,RX
 I2C i2c(PC_1, PC_0); //pins for I2C communication (SDA, SCL)
 int sensor_addr = 41 << 1;
-#define Random(x)(rand()%x)
-DigitalOut green(LED1);
+//#define          Random(x)      (rand()%x)
+DigitalOut led(LED2);
 int flag_Android=0;
 DigitalOut pwm1(D6);
 DigitalOut pwm2(D7);
 DigitalOut pwm3(D8);
-DigitalIn mode1(A3);
-DigitalIn mode2(A4);
+DigitalIn mode1(D0);
+DigitalIn mode2(D1);
 int start_signal;
 int end_signal;
 int a;
-void echouart1()
+
+
+/*void echouart1()
 {
       start_signal=pc.getc();
 }
 void echouart2()
 {
       end_signal=pc.getc();
-}
+}*/
 int color_sensor()
 {
-      int customer_card;
+      int customer_card=0;
       char clear_reg[1] = {148};
 
         char clear_data[2] = {0,0};
@@ -88,7 +91,18 @@
         int blue_value = ((int)blue_data[1] << 8) | blue_data[0];
 
     //判断颜色
-          if (red_value>green_value&&red_value>blue_value)
+    while(customer_card==0)
+          {
+               i2c.write(sensor_addr,red_reg,1, true);
+
+        i2c.read(sensor_addr,red_data,2, false);
+               i2c.write(sensor_addr,green_reg,1, true);
+
+        i2c.read(sensor_addr,green_data,2, false);
+               i2c.write(sensor_addr,blue_reg,1, true);
+
+        i2c.read(sensor_addr,blue_data,2, false);
+              if (red_value>green_value&&red_value>blue_value)
     customer_card=-2;
         
         
@@ -97,6 +111,7 @@
         
         else if (blue_value>red_value&&blue_value>green_value)
            customer_card=2;
+           }
     
     return customer_card;
     }
@@ -126,41 +141,73 @@
     i2c.write(sensor_addr,enable_register,2,false);
     pc.baud(9600); 
     uint8_t dist;
-    par_port = new MCP23017(I2C_SDA, I2C_SCL,0x0400);
+    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)
+      /* for(;;)
+    {
+        dist = TOF_sensor.getDistance();
+
+        
+        wait_ms(100);
+        lcd->cls(); 
+        lcd->locate(0,0);
+        if(dist==!255)
+       {
+           pc.printf("d=%d ", dist);
+           pc.printf("ready");
+           break;} 
+    }*/
+   dist = TOF_sensor.getDistance();
+    while(dist==255)
+      {  dist = TOF_sensor.getDistance();
+         
+         lcd->cls(); 
+        lcd->locate(0,0);}
+        pc.printf("ready ", dist);
+        
+/*while(1)
 {
  dist = TOF_sensor.getDistance();
-
-        pc.printf("d=%d", dist);
+ if(dist==!255)
+        {
+            dist = TOF_sensor.getDistance();
+            pc.printf("%d",dist);
+        pc.printf("Ready");
         wait(0.2);
         lcd->cls(); 
         lcd->locate(0,0);
-}
-/*while(mode1==0&&mode2==0)
+        break;
+        }
+}*/
+while(mode1==0&&mode2==0)
 {}
 if(mode1==0&&mode2==1)
- {winscore=15;}
+ {winscore=12;pc.printf("%d",winscore);}
  else if(mode1==1&&mode2==0)
-{winscore=20;}
+{winscore=14;pc.printf("%d",winscore);}
 else if(mode1==1&&mode2==1)
-{winscore=25;}*/
+{winscore=16;pc.printf("%d",winscore);}
+
     int customer_card;
  int record[10];
  int p;
-while(1)
+
+  while(1)
 {
-/*pc.attach(&echouart1,SerialBase::RxIrq);//如果串口没有发送数据,那么主程序中的程序会继续执行,如果串口有发送数据,则执行函数*/
-if(pc.readable())
-       {
-          p=pc.getc();
+//pc.attach(&echouart1,SerialBase::RxIrq);//如果串口没有发送数据,那么主程序中的程序会继续执行,如果串口有发送数据,则执行函数
+  if(pc.readable())
+        {
+          pc.scanf("%d",&p);
           start_signal=p;
           break;
-          }
+        }
 }
+
+         led=p; 
+        
  if(start_signal==1)
   {
     int score[10];
@@ -168,74 +215,97 @@
     int robot_card;
     int a;
     int i;
+    srand((unsigned)time(NULL));
     for(i=1;i<5;i++)
       {
-           pwm1=1;pwm2=1;pwm3=0;//控制遮挡电机关闭
-           a=Random(4);//电脑出牌,产生[0, dis)之间的随机数,注意不包括4
+          pwm1=1;pwm2=1;pwm3=1;//控制遮挡电机关闭
+           wait_ms(4000);
+           a=(rand()%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;}     
+        {
+         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);*/
+                       wait_ms(2000);
         customer_card=color_sensor();
         switch(customer_card)
         {case -2:{record[i]=2;break;}
-         case 1:{record[i]=Random(2);break;}
+         case 1:{record[i]=(rand()%2);break;}
          case 2:{record[i]=-2;break;}   
         }
-        if(customer_card==!0)
-        {
-            pwm1=1;pwm2=1;pwm3=1;//控制遮挡电机显示电脑出牌
-        }
-        score[i]=score[i-1]+robot_card*customer_card;
+        
+        
+           {pwm1=1;pwm2=1;pwm3=0;}//控制遮挡电机显示电脑出牌
+       
+   wait_ms(3000);
+        score[i]=score[i-1]+robot_card*color_sensor();
         pc.printf("%d",score[i]);//每一轮传给上位机总分
         if(score[i]>=winscore)
             {   
             pc.printf("%d",score[i]);
+             pc.printf("win");
             break;
             }
-        while(end_signal==0)//这一轮结束信号(即25秒以后产生)
-        {}
+        while(1)//这一轮结束信号(即25秒以后产生)
+        {
+            if(pc.readable())
+             {
+          pc.scanf("%d",&p);
+          end_signal=p;
+          break;
+          }
+          }
 
                   }
-    if(score[i]<20)
+    if(score[i]<winscore)
+    {
+        for(i;i<9;i++)
     {
-        for(i;i<7;i++)
-    {
-        pwm1=1;pwm2=1;pwm3=0;//控制遮挡电机关闭
-            robot_card=record[Random(i-1)+1];
+        pwm1=1;pwm2=1;pwm3=1;//控制遮挡电机关闭
+        wait_ms(4000);
+            robot_card=record[(rand()%(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);
+                       wait_ms(2000);
         customer_card=color_sensor();
         switch(customer_card)
         {case -2:{record[i]=2;break;}
-         case 1:{record[i]=Random(2);break;}
+         case 1:{record[i]=(rand()%2);break;}
          case 2:{record[i]=-2;break;}   
         }
-        if(customer_card==!0)
-        {
-            pwm1=1;pwm2=1;pwm3=1;//控制遮挡电机显示电脑出牌
-        }
+        
+        
+            pwm1=1;pwm2=1;pwm3=0;//控制遮挡电机显示电脑出牌
+        
+        wait_ms(3000);
         score[i]=score[i-1]+robot_card*customer_card;
         pc.printf("%d",score[i]);//每一轮传给上位机总分
         if(score[i]>=winscore)
             {   
             pc.printf("%d",score[i]);
+            pc.printf("win");
             break;
             }
-        while(end_signal==0)//这一轮结束信号(即25秒以后产生)
+        while(1)//这一轮结束信号(即25秒以后产生)
         {
-        pc.attach(&echouart1,SerialBase::RxIrq);//如果串口没有发送数据,那么主程序中的程序会继续执行,如果串口有发送数据,则执行函数 
+        //pc.attach(&echouart1,SerialBase::RxIrq);//如果串口没有发送数据,那么主程序中的程序会继续执行,如果串口有发送数据,则执行函数 
+        
+            if(pc.readable())
+             {
+          pc.scanf("%d",&p);
+          end_signal=p;
+          break;
+          }
         }
     }
     }
 
   }
 }
+