162.Eternal

Andressa Regina Funes RA 0040961513038 Diogo Garcia Prestes dos Santos RA 0040961513006 Rafael Leite Santos RA 0040961513005
 * Grupo **

Jogo: A Senha
 * Projeto **

Projeto de jogo com o arduino utilizando sequência numérica e luzes de led.
 * Resumo **

.
 * Software/materiais utilizados **
 * Arduino Uno
 * Placa Protoboard
 * Luzes de Led
 * Resistores
 * Fios e Jumpers
 * Teclado Numérico 3x4
 * Caixa de Papelão
 * Papel Contact
 * Fita adesiva


 * Software **
 * IDE do arduino
 * Bibliotecas disponíveis em Bibliotecas para arduino

O projeto foi pensando em utilizar o Arduíno de uma maneira divertida e barata sua estrutura utiliza somente materiais disponibilizado pelo professor e possui logica apresentadas em aula de uma maneira simples e versátil, possuindo apenas luzes de leds programadas para analisar a sequencia numérica do teclado 3x4 e apresentar assim se sua sequência esta correta ou não.
 * Metodologia **


 * Desenvolvimento **

Primeiramente não tivemos nenhuma dificuldade com o projeto que escolhemos, nossa maior dificuldade foi na escolha do projeto, pois tínhamos muitas ideias e poucos recurso, por isso optamos por utilizar somente o material disponibilizado em aula.

O primeiro passo foi começarmos a montagem do circuito na protoboard de acordo com a lógica pensada para o nosso jogo.



Foram ligadas as luzes de leds na protoboard e da protobard no arduino junto com o teclado 4x3 onde pode se ver nas imagens abaixo como ficou tudo conectado:





Com a montagem finalizada começamos o processo de programação que não se mostrou muito difícil,pois só foram aplicadas técnicas utilizadas em sala de aula apenas com algumas modificações. ** Programação ** Primeiramente identificamos os pinos dos leds e do teclado como mostra o código abaixo: code format="cpp" void setup { pinMode(11, OUTPUT); digitalWrite(11, LOW); pinMode(12, OUTPUT); digitalWrite(12, LOW); pinMode(13, OUTPUT); digitalWrite(13, LOW);

pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, INPUT); digitalWrite(8, HIGH); pinMode(9, INPUT); digitalWrite(9, HIGH); pinMode(10, INPUT); digitalWrite(10, HIGH); code

Depois inicializamos o monitor serial para enviar mensagens pertinentes ao usuário: code format="cpp" Serial.begin(9600); Serial.println("Descubra a senha"); Serial.println("Aguardando acionamento das teclas..."); Serial.println;

randomSeed(42);

start; } code

Inserimos o código para que fizesse a verificação de qual tecla foi apertada pelo usuário: code format="cpp" void loop {   for (int gate = 4; gate<8; gate++) {     digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(gate, LOW); if (digitalRead(8) == LOW) {       getButton(gate-3, 1); while(digitalRead(8) == LOW){} }     if (digitalRead(9) == LOW) {       getButton(gate-3, 2); while(digitalRead(9) == LOW){}; }     if (digitalRead(10) == LOW) {       getButton(gate-3, 3); while(digitalRead(10) == LOW){} }   } code Inserimos a verificação do estado do jogo ( se o jogador já venceu, se ainda está jogando, ou se perdeu o jogo). code format="cpp" if(index==LENGTH){ checkResult; if(leds[0] == 2 && leds[1] == 2 && leds[2] == 2) Serial.println("Voce descobriu"); else index=0; }  setLed (11, leds[0]); setLed (12, leds[1]); setLed (13, leds[2]);

delay(10); } code Inserimos no código também o reset, o start do jogo e o gerador de senha para a partida como veremos abaixo: code format="cpp" void newChance { index = 0; int i; for (i = 0; i < LENGTH; i++) attempt[i] = 0; }

void start { setPassword; newChance; leds[0] = 0; leds[1] = 0; leds[2] = 0; //Serial.print(password[0]);Serial.print(password[1]);Serial.println(password[2]); }

void setPassword { int i; for (i = 0; i < LENGTH; i++){ password[i] = random(0,10); } } code Não poderia falta a inserção de um código para reconhecimento da ação acima gerando um reconhecimento code format="cpp" void getButton(int x, int y){ int number = getNumber(x, y); if(number>=0 && index<LENGTH){ attempt[index] = number; index++; Serial.print(number); Serial.print(" foi seu palpite para o digito "); Serial.println(index); }else if (number == -1){newChance;Serial.println("voce resetou a rodada");} else if(number == -2){start;Serial.println("voce resetou o jogo");} delay(10); } code Definimos um comportamento para os leds de acordo com a lógica do jogo, existindo então três estados que são:
 * Aceso: se o número e a posição digitada esta correta.
 * Piscando: se somente o número estiver correto.
 * Apagado: se não tiver acertado o número.

code format="cpp" void setLed (int led, int i){ if(i==0)digitalWrite(led, LOW); else if(i==2)digitalWrite(led, HIGH); else if(i==1)digitalWrite(led, !digitalRead(led)); delay(100); } code É inserido um código para fazer a checagem do resultado: code format="cpp" void checkResult{ int i; int j;  for (i = 0; i < LENGTH; i++){ int led = 0; for(j = 0; j < LENGTH; j++){ if(attempt[i] == password[j] && i == j){ led = 2; break;} else if(attempt[i] == password[j]){ int value = 1; int k;       for(k = i; k >= 0; k--){ if(attempt[i]==attempt[k]&&leds[k]==2)value = 0; }       led=value; }   }    leds[i] = led; } order ; } code Um código de checagem dos leds é inserido: code format="cpp" int order { int i; int j;  for (i = 0; i < LENGTH; i++){ for(j = i; j < LENGTH; j++){ if(leds[j]>leds[i]){ int tmp = leds[i]; leds[i]=leds[j]; leds[j]=tmp; }   }  } } code Adicionamos também um código que atribui valores internos as teclas apertadas pelo usuário: code format="cpp" int getNumber(int x, int y) { int number; if(x==1){ if(y==1)number = 1; else if(y==2)number = 2; else if(y==3)number = 3; } else if(x==2){ if(y==1)number = 4; else if(y==2)number = 5; else if(y==3)number = 6; } else if(x==3){ if(y==1)number = 7; else if(y==2)number = 8; else if(y==3)number = 9; } else if(x==4){ if(y==1)number = -1; else if(y==2)number = 0; else if(y==3)number = -2; } return number; } code Finalizado a porte logica do nosso projeto começamos a montagem da parte estética, pois não gostaríamos de deixar toda a montagem a amostra, por esse motivo buscamos uma forma de deixar o projeto bem apresentado sem que houvesse gastos, optamos por reutilizar uma caixinha de papelão fazendo pequenas modificações para que coubesse todo o circuito e o usuário final não visse.

Para melhorar a estética da caixa ela foi toda encapada utilizando papel contact com textura de madeiramento.

Então finalizado o encapamento nosso circuito com a placa do arduino foi inserida dentro da caixa ficando visível somente teclado e as luzes de led como é possível ver abaixo:



** Teste ** media type="youtube" key="yWe9c5Hpc5Y" width="560" height="315"


 * Resultados **

media type="youtube" key="2pTuV7wN0-I" width="560" height="315"


 * Conclusão **

Concluímos que conseguimos aproveitar os conhecimentos nos passados em sala de aula e com isso criar nosso projeto que apesar de não ter apresentado nenhuma dificuldade nos proporcionou a utilização das técnicas aprendidas em sala na aplicação em jogos.

Apesar de não termos recursos para aproveitar ao máximo a capacidade que o arduino possui podemos fazer pesquisas e compreender técnicas para possíveis projetos de jogos, nos mostrando que a utilização do arduino é infinita e que é possível utilizarmos ele para a nossa área de jogos de uma forma simples e dinâmica.

