Monday, 31 August 2020

Basics

"Hello World" Code:

void setup() {                
pinMode(13, OUTPUT); //setup pin 13 as an output
}

void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH outputs 5V)
delay(500); // wait for 500 milliseconds
digitalWrite(13, LOW); // turn the LED off (LOW outputs 0V)
delay(500); // wait for 500 milliseconds
}
Simon Says Circuit:

5x pushbuttons

1x Blue led

1x Yellow led

1x Red led

1x Green Led

4x 1k resistors

4x 10k resistors

10x jumpers

1x Arduino Uno 


When the button attached to A4 pin is pressed a sequence is generated and the software wait for the same sequence. If the two sequence are different the LEDs will blink for three times very fast otherwise the sequence is correct. If the sequence is correct the game goes ahead and the difficulty and velocity are incremented.

The two sequence are stored in two vectors and compared.


Code: 


const int MAX_LEVEL = 100;

int sequence[MAX_LEVEL];

int your_sequence[MAX_LEVEL];

int level = 1;


int velocity = 1000;


void setup() {

pinMode(A0, INPUT);

pinMode(A1, INPUT);

pinMode(A2, INPUT);

pinMode(A3, INPUT);


pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

pinMode(5, OUTPUT);


digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

}


void loop()

{

if (level == 1)

generate_sequence();//generate a sequence;


if (digitalRead(A4) == LOW || level != 1) //If start button is pressed or you're winning

{

show_sequence();    //show the sequence

get_sequence();     //wait for your sequence

}

}


void show_sequence()

{

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);


for (int i = 0; i < level; i++)

{

digitalWrite(sequence[i], HIGH);

delay(velocity);

digitalWrite(sequence[i], LOW);

delay(200);

}

}


void get_sequence()

{

int flag = 0; //this flag indicates if the sequence is correct


for (int i = 0; i < level; i++)

{

flag = 0;

while(flag == 0)

{

if (digitalRead(A0) == LOW)

{

digitalWrite(5, HIGH);

your_sequence[i] = 5;

flag = 1;

delay(200);

if (your_sequence[i] != sequence[i])

{

wrong_sequence();

return;

}

digitalWrite(5, LOW);

}


if (digitalRead(A1) == LOW)

{

digitalWrite(4, HIGH);

your_sequence[i] = 4;

flag = 1;

delay(200);

if (your_sequence[i] != sequence[i])

{

wrong_sequence();

return;

}

digitalWrite(4, LOW);

}


if (digitalRead(A2) == LOW)

{

digitalWrite(3, HIGH);

your_sequence[i] = 3;

flag = 1;

delay(200);

if (your_sequence[i] != sequence[i])

{

wrong_sequence();

return;

}

digitalWrite(3, LOW);

}


if (digitalRead(A3) == LOW)

{

digitalWrite(2, HIGH);

your_sequence[i] = 2;

flag = 1;

delay(200);

if (your_sequence[i] != sequence[i])

{

wrong_sequence();

return;

}

digitalWrite(2, LOW);

}


}

}

right_sequence();

}


void generate_sequence()

{

randomSeed(millis()); //in this way is really random!!!


for (int i = 0; i < MAX_LEVEL; i++)

{

sequence[i] = random(2,6);

}

}

void wrong_sequence()

{

for (int i = 0; i < 3; i++)

{

digitalWrite(2, HIGH);

digitalWrite(3, HIGH);

digitalWrite(4, HIGH);

digitalWrite(5, HIGH);

delay(250);

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

delay(250);

}

level = 1;

velocity = 1000;

}


void right_sequence()

{

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

delay(250);


digitalWrite(2, HIGH);

digitalWrite(3, HIGH);

digitalWrite(4, HIGH);

digitalWrite(5, HIGH);

delay(500);

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

delay(500);


if (level < MAX_LEVEL);

level++;


velocity -= 50; //increase difficulty

}



No comments:

Post a Comment