-
-
Save mateuswetah/1353619 to your computer and use it in GitHub Desktop.
Arduino - Simon Says
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Arduino - Simon Says | |
* ELTN.4M - Douglas Antunes, Eduardo Souza, Joao Gabriel e Mateus Mahado | |
*/ | |
#include <LiquidCrystal.h> | |
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); | |
int rounds = 50; | |
int vec[50]; | |
int vecRound[50]; | |
int btnPin = 0; | |
int buzzerPin = 13 ; | |
int answer; | |
int error = 0; | |
void show ( int led ) | |
{ | |
int tons[4] = {392, 440, 494, 523}; | |
digitalWrite( led, HIGH ); | |
tone( buzzerPin, tons[led - 7], 300 ); | |
delay( 300 ); | |
digitalWrite( led, LOW ); | |
delay( 200 ); | |
} | |
void setup () | |
{ | |
Serial.begin(9600); | |
lcd.begin(16, 2); | |
/** Leds **/ | |
pinMode(7, OUTPUT); | |
pinMode(8, OUTPUT); | |
pinMode(9, OUTPUT); | |
pinMode(10, OUTPUT); | |
/** Buzzer **/ | |
pinMode(buzzerPin, OUTPUT); | |
/** Button **/ | |
pinMode(btnPin, INPUT); | |
} | |
void loop () | |
{ | |
/** Preencher vetor com sequencia aleatoria **/ | |
for ( int i = 0; i < rounds; i++ ) { | |
vec[i] = random(7, 11); // Usar pinos de 0 a 4 para saida dos leds | |
} | |
Serial.println("INCIO \n"); | |
/** Percorre toda a sequencia (ate o fim, ou ate que erre) **/ | |
for ( int i = 0; i < rounds; i++ ) { | |
lcd.clear(); | |
lcd.print("Minha Vez"); | |
/** Preenche o vetor com a sequencia E acender os leds **/ | |
for ( int j = 0; j < i; j++ ) { | |
vecRound[j] = vec[j]; | |
/** Acender e apagar o led da sequencia **/ | |
show( vec[j] ); | |
} | |
/** Verificar se a sequencia digitada e a mesma da mostrada **/ | |
for ( int j = 0; j < i; j++ ) { | |
answer = 1023; | |
lcd.clear(); | |
lcd.print("Sua Vez"); | |
/** Entrar em loop ate que algo seja digitado **/ | |
do { | |
answer = analogRead( btnPin ); | |
} while ( answer == 1023 ); | |
/** Colocar nivel analogico como botao **/ | |
if ( answer > 495 && answer < 560 ) { | |
answer = 10; | |
} else if ( answer > 640 && answer < 720 ) { | |
answer = 9; | |
} else if ( answer > 730 && answer < 790 ) { | |
answer = 8; | |
} else if ( answer > 800 && answer < 840 ) { | |
answer = 7; | |
} | |
show( answer ); | |
delay( 400 ); | |
/** Verificar no. sequencia, caso erre sai e passa "error" para 1 e diz para sair do outro loop tambem **/ | |
if ( answer != vecRound[j] ) { | |
i = 0; | |
lcd.clear(); | |
lcd.print("Voce errou"); | |
tone( buzzerPin, 44, 500); | |
delay( 500 ); | |
lcd.clear(); | |
lcd.print("Reiniciando"); | |
delay( 500 ); | |
} else { | |
error = 0; | |
} | |
} | |
/** Sai do loop principal caso sequencia errada **/ | |
if ( error > 0 ) { | |
break; | |
} | |
Serial.println("-----------"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment