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.
Diff: main.cpp
- 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; } - } - } }