//DEFINE PINS-------------------------------------
#define push1 D0
#define push2 D1
#define led1 D2
#define led2 D3
#define led3 D4
#define led4 D5
#define led5 D6
#define led6 D7
#define led7 D8
#define led8 D9
#define led9 D10
//VARIABLES---------------------------------------
int flag1 = 1; //flag for the buttons
int flag2 = 1;
int cont = 0; //main counter to turn on leds
int cont_vel = 0; //counter to determine speed
int state = 1; //counter increases(1) or decreases(0)
int game = 0; //start game
int cont_red=0; //count when you reach the color red
void setup() {
Serial.begin(9600); //comunication
//PINMODE-------------------------------------------
pinMode(push1,INPUT); //buttons
pinMode(push2,INPUT);
pinMode(led1,OUTPUT); //LEDS
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);
pinMode(led6,OUTPUT);
pinMode(led7,OUTPUT);
pinMode(led8,OUTPUT);
pinMode(led9,OUTPUT);
}
void loop() {
//START GAME----------------------------------------
//press the two buttons to start, small blink and I enter
//the game loop
if ((digitalRead(push1)==1) && (digitalRead(push2)==1)) {
game=1;
Serial.println("--------START----------");
(digitalWrite(led1,1));
(digitalWrite(led2,1));
(digitalWrite(led3,1));
(digitalWrite(led4,1));
(digitalWrite(led5,1));
(digitalWrite(led6,1));
(digitalWrite(led7,1));
(digitalWrite(led8,1));
(digitalWrite(led9,1));
delay(50);
(digitalWrite(led1,0));
(digitalWrite(led2,0));
(digitalWrite(led3,0));
(digitalWrite(led4,0));
(digitalWrite(led5,0));
(digitalWrite(led6,0));
(digitalWrite(led7,0));
(digitalWrite(led8,0));
(digitalWrite(led9,0));
delay(50);
state=1;
}
//GAME LOOP-------------------------------------------------
while(game==1){
//game speed
for (int x=100; x>=cont_vel; x--) {
delay(2);
}
//first button with flag, counter increases and speed
//increases
if ((digitalRead(push1)==1) && (flag1==1)) {
state=1;
cont_vel++;
flag1=0;
}
if((digitalRead(push1)==0) && (flag1==0)){
flag1=1;
}
//second button with flag, counter decreases and speed
//increases
if ((digitalRead(push2)==1) && (flag2==1)) {
state=0;
flag2=0;
cont_vel++;
}
if((digitalRead(push2)==0) && (flag2==0)){
flag2=1;
}
//counter increases or decreases
if (state==1) {
cont++;
}
if (state==0) {
cont--;
}
//print counter
Serial.println(cont);
//negative limit of counter
if (cont<=-1){
state=1;
cont=1;
}
//accountant cases
switch (cont) {
//blink and we give up the game
case 0:
for (int x=0; x<=5; x++) {
(digitalWrite(led1,1));
(digitalWrite(led2,1));
(digitalWrite(led3,1));
(digitalWrite(led4,1));
(digitalWrite(led5,1));
(digitalWrite(led6,1));
(digitalWrite(led7,1));
(digitalWrite(led8,1));
(digitalWrite(led9,1));
delay(100);
(digitalWrite(led1,0));
(digitalWrite(led2,0));
(digitalWrite(led3,0));
(digitalWrite(led4,0));
(digitalWrite(led5,0));
(digitalWrite(led6,0));
(digitalWrite(led7,0));
(digitalWrite(led8,0));
(digitalWrite(led9,0));
delay(100);
}
game=2;
break;
//LED1 turns on and network increases
case 1:
(digitalWrite(led1,1));
(digitalWrite(led2,0));
(digitalWrite(led3,0));
(digitalWrite(led4,0));
(digitalWrite(led5,0));
(digitalWrite(led6,0));
(digitalWrite(led7,0));
(digitalWrite(led8,0));
(digitalWrite(led9,0));
cont_red++;
Serial.println("red");
break;
case 2:
(digitalWrite(led1,0));
(digitalWrite(led2,1));
(digitalWrite(led3,0));
(digitalWrite(led4,0));
(digitalWrite(led5,0));
(digitalWrite(led6,0));
(digitalWrite(led7,0));
(digitalWrite(led8,0));
(digitalWrite(led9,0));
break;
case 3:
(digitalWrite(led1,0));
(digitalWrite(led2,0));
(digitalWrite(led3,1));
(digitalWrite(led4,0));
(digitalWrite(led5,0));
(digitalWrite(led6,0));
(digitalWrite(led7,0));
(digitalWrite(led8,0));
(digitalWrite(led9,0));
break;
case 4:
(digitalWrite(led1,0));
(digitalWrite(led2,0));
(digitalWrite(led3,0));
(digitalWrite(led4,1));
(digitalWrite(led5,0));
(digitalWrite(led6,0));
(digitalWrite(led7,0));
(digitalWrite(led8,0));
(digitalWrite(led9,0));
break;
case 5:
(digitalWrite(led1,0));
(digitalWrite(led2,0));
(digitalWrite(led3,0));
(digitalWrite(led4,0));
(digitalWrite(led5,1));
(digitalWrite(led6,0));
(digitalWrite(led7,0));
(digitalWrite(led8,0));
(digitalWrite(led9,0));
break;
case 6:
(digitalWrite(led1,0));
(digitalWrite(led2,0));
(digitalWrite(led3,0));
(digitalWrite(led4,0));
(digitalWrite(led5,0));
(digitalWrite(led6,1));
(digitalWrite(led7,0));
(digitalWrite(led8,0));
(digitalWrite(led9,0));
break;
case 7:
(digitalWrite(led1,0));
(digitalWrite(led2,0));
(digitalWrite(led3,0));
(digitalWrite(led4,0));
(digitalWrite(led5,0));
(digitalWrite(led6,0));
(digitalWrite(led7,1));
(digitalWrite(led8,0));
(digitalWrite(led9,0));
break;
case 8:
(digitalWrite(led1,0));
(digitalWrite(led2,0));
(digitalWrite(led3,0));
(digitalWrite(led4,0));
(digitalWrite(led5,0));
(digitalWrite(led6,0));
(digitalWrite(led7,0));
(digitalWrite(led8,1));
(digitalWrite(led9,0));
break;
//LED9 turns on and network increases
case 9:
(digitalWrite(led1,0));
(digitalWrite(led2,0));
(digitalWrite(led3,0));
(digitalWrite(led4,0));
(digitalWrite(led5,0));
(digitalWrite(led6,0));
(digitalWrite(led7,0));
(digitalWrite(led8,0));
(digitalWrite(led9,1));
cont_red++;
Serial.println("red");
break;
//blink and we give up the game
case 10:
for (int x=0; x<=5; x++) {
(digitalWrite(led1,0));
(digitalWrite(led2,0));
(digitalWrite(led3,0));
(digitalWrite(led4,0));
(digitalWrite(led5,1));
(digitalWrite(led6,1));
(digitalWrite(led7,1));
(digitalWrite(led8,1));
(digitalWrite(led9,1));
delay(100);
(digitalWrite(led1,0));
(digitalWrite(led2,0));
(digitalWrite(led3,0));
(digitalWrite(led4,0));
(digitalWrite(led5,0));
(digitalWrite(led6,0));
(digitalWrite(led7,0));
(digitalWrite(led8,0));
(digitalWrite(led9,0));
delay(100);
}
game=2;
break;
}
}
//SCORE AND RESET---------------------------------
//In this oart we show the results and reset the counters,
//we return to the beginning of the game
if(game==2){
cont_red=cont_red-2;
Serial.println("-------GAME OVER--------");
Serial.print("Speed: ");
Serial.println(cont_vel);
Serial.print("Red: ");
Serial.println(cont_red);
Serial.println(" ");
Serial.print("SCORE: ");
Serial.println(cont_red*cont_vel+cont_vel);
game=0;
cont=0;
cont_vel=0;
cont_red=0;
}
}