Mingcheng Lin / Mbed 2 deprecated TEST

Dependencies:   mbed

main.cpp

Committer:
mrweilun
Date:
2019-05-08
Revision:
0:3d3331775af2
Child:
1:9bafb8db5980

File content as of revision 0:3d3331775af2:

#include "mbed.h"
#include "stdint.h"
#include "MCP23017.h"
#include "WattBob_TextLCD.h"
#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)
#define IDENTIFICATIONMODEL_ID 0x0000
VL6180  TOF_sensor(I2C_SDA, I2C_SCL);
MCP23017            *par_port;
WattBob_TextLCD     *lcd;
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);
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;
void echouart1()
{
      start_signal=pc.getc();
}
void echouart2()
{
      end_signal=pc.getc();
}
int color_sensor()
{
      int customer_card;
      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);

        

        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);
    

        int blue_value = ((int)blue_data[1] << 8) | blue_data[0];

    //判断颜色
          if (red_value>green_value&&red_value>blue_value)
    customer_card=-2;
        
        
        else if (green_value>red_value&&green_value>blue_value)
           customer_card=1;
        
        else if (blue_value>red_value&&blue_value>green_value)
           customer_card=2;
    
    return customer_card;
    }
int main()
{
pc.baud(9600);
    
    // Connect to the Color sensor and verify whether we connected to the correct sensor. 
    
    i2c.frequency(100000);//修改为100000,否则报错
    
    char id_regval[1] = {146};
    char data[1] = {0};
    i2c.write(sensor_addr,id_regval,1, true);
    i2c.read(sensor_addr,data,1,false);
    

    // Initialize color sensor
    
    char timing_register[2] = {129,0};
    i2c.write(sensor_addr,timing_register,2,false);
    
    char control_register[2] = {143,0};
    i2c.write(sensor_addr,control_register,2,false);
    
    char enable_register[2] = {128,3};
    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->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(mode1==0&&mode2==0)
{}
if(mode1==0&&mode2==1)
 {winscore=15;}
 else if(mode1==1&&mode2==0)
{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())
       {
          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)
        {
            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秒以后产生)
        {}

                  }
    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)
        {
            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);//如果串口没有发送数据,那么主程序中的程序会继续执行,如果串口有发送数据,则执行函数 
        }
    }
    }

  }
}