做完感觉速度很慢,后来还测试了一下游戏的街机模式,发现最多能玩到160分,还没我同学玩的快呢。
- /******************************************************
- *
- *
- * 说明:舵机玩别踩白块儿游戏程序
- * 日期:2017-01-08
- * 作者:TDA2030
- * 硬件:Arduino uno板
- *
- *
- *******************************************************/
- #include
- #define u16 unsigned int
- #define u8 unsigned char
- //光敏电阻数据校准值,调试得出具体数值
- #define S1_ADJ (0)
- #define S2_ADJ (20)
- #define S3_ADJ (-47)
- #define S4_ADJ (-120)
- #define C_V 620 //触发动作阀值
- #define PRESS_VAL 1//按下所对应的值
- #define BOUNCE_VAL 0//弹起所对应的值
- //传感器端口定义
- #define SENSOR_PORT1 0 // analog pin used to connect the potentiometer
- #define SENSOR_PORT2 1
- #define SENSOR_PORT3 2
- #define SENSOR_PORT4 3
- //舵机端口定义
- #define SERVO_PORT4 5
- #define SERVO_PORT3 6
- #define SERVO_PORT2 9
- #define SERVO_PORT1 10
- void setup()
- {
- Serial.begin(115200);
- while (!Serial) {
- ; // wait for serial port to connect. Needed for Leonardo only
- }
- Serial.println("*****************************************\n");
- Serial.println(" * Play the game by MCU\n");
- Serial.println(" * Author: TDA2030\n");
- Serial.println(" * Date: 2017/01/08\n\n");
- Serial.println("*****************************************\n\n");
- pinMode(SENSOR_PORT1,INPUT);
- pinMode(SENSOR_PORT2,INPUT);
- pinMode(SENSOR_PORT3,INPUT);
- pinMode(SENSOR_PORT4,INPUT);
- pinMode(SERVO_PORT1,OUTPUT);
- pinMode(SERVO_PORT2,OUTPUT);
- pinMode(SERVO_PORT3,OUTPUT);
- pinMode(SERVO_PORT4,OUTPUT);
- }
- //全局变量定义
- u16 sv1,sv2,sv3,sv4;
- u8 flag1,flag2,flag3,flag4;
- u16 time1,time2,time3,time4;
- u16 core=0;
- u16 MAX1_TIME = 230; //最大按下时间定义
- u16 MAX2_TIME = MAX1_TIME+300; //免检测时间定义
- void loop()
- {
- //读取光敏电阻AD值
- sv1=analogRead(SENSOR_PORT1)+S1_ADJ;
- sv2=analogRead(SENSOR_PORT2)+S2_ADJ;
- sv3=analogRead(SENSOR_PORT3)+S3_ADJ;
- sv4=analogRead(SENSOR_PORT4)+S4_ADJ;
- //串口打印数据,调试时用
- Serial.print("sensor1:");
- Serial.println(sv1,DEC);
- Serial.print("sensor2:");
- Serial.println(sv2,DEC);
- Serial.print("sensor3:");
- Serial.println(sv3,DEC);
- Serial.print("sensor4:");
- Serial.println(sv4,DEC);
- Serial.println("\n");
- delay(200);
- //-------当得分大于一定后加快速度按下
- // if(core>100)
- // {
- // MAX1_TIME = 200;
- // MAX2_TIME = MAX1_TIME+200;
- // }
- //判断是否大于阀值,执行按下并标识位
- if(flag1==0&&sv1>C_V)
- {
- digitalWrite(SERVO_PORT1,PRESS_VAL);
- flag1=1;core++;
- }
- if(flag2==0&&sv2>C_V)
- {
- digitalWrite(SERVO_PORT2,PRESS_VAL);
- flag2=1;core++;
- }
- if(flag3==0&&sv3>C_V)
- {
- digitalWrite(SERVO_PORT3,PRESS_VAL);
- flag3=1;core++;
- }
- if(flag4==0&&sv4>C_V)
- {
- digitalWrite(SERVO_PORT4,PRESS_VAL);
- flag4=1;core++;
- }
- /*在按下一段时间后自动弹起,不管是不是还大于阀值,
- 另外还要等待一段时间不检测,防止一个黑块多次按下*/
- if(flag1==1)
- {
- time1++;
- if(time1>MAX1_TIME)//大于了弹起时间,则自己弹起
- {
- digitalWrite(SERVO_PORT1,BOUNCE_VAL);
- if(time1>MAX2_TIME)//大于了免检测时间,复位标志位,以开始重新判断阀值
- {time1=0;flag1=0;}
- }
- }
- if(flag2==1)
- {
- time2++;
- if(time2>MAX1_TIME)
- {
- digitalWrite(SERVO_PORT2,BOUNCE_VAL);
- if(time2>MAX2_TIME)
- {time2=0;flag2=0;}
- }
- }
- if(flag3==1)
- {
- time3++;
- if(time3>MAX1_TIME)
- {
- digitalWrite(SERVO_PORT3,BOUNCE_VAL);
- if(time3>MAX2_TIME)
- {time3=0;flag3=0;}
- }
- }
- if(flag4==1)
- {
- time4++;
- if(time4>MAX1_TIME)
- {
- digitalWrite(SERVO_PORT4,BOUNCE_VAL);
- if(time4>MAX2_TIME)
- {time4=0;flag4=0;}
- }
- }
- }
欢迎光临 嵌入式开发交流网论坛 (http://www.dianzixuexi.com/bbs/) | Powered by Discuz! X3.2 |