Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 1:8d53c6fe8815, committed 2019-05-12
- 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;
+ }
}
}
}
}
}
+