Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- @Autor: George Victor
- @Version: 0.1
- @Description:
- Projeto de desenvolvimento de um labirinto elétrico onde o jogador necessita de passar por
- três etapas:
- 1. Ativação na ilha inicial
- 2. Passar com o anel por todo o percurso, sem tocar na trilha
- 3. Finalização do Percurso na ilha final
- A etapa inicial é ativação do sistema através de um interruptor que alimenta o sistema.
- Após a terceira etapa, será acionado um RELÉ para abrir uma trava eletrônica.
- O sistema também conta com 3 leds e 1 buzzer.
- - Led #1: Sistema Ligado
- - Led #2: Vitoria!
- - Led #3: Perdeu, volte para o começo.
- */
- //OUTPUTS
- #define rele 2
- #define led1 3 // led 1 = power
- #define led2 4 // led 2 = vitoria
- #define led3 5 // led 3 = perdeu
- #define buzzer 6
- //INPUTS
- #define ilha1 10
- #define ilha2 11
- #define trilha 12
- //Auxiliares
- int i = 0;
- bool aguardaIlha1 = true;
- // Tempo de delay para filtragem do sinal da ilha
- int TEMPO_ESPERA = 1000;
- unsigned long tempoAgora = millis();
- unsigned long tempoDepois = 0;
- void setup() {
- Serial.begin(9600);
- Serial.println("Comecou o setup");
- // Setup OUTPUTS
- pinMode(rele, OUTPUT);
- digitalWrite(rele, HIGH); // Força com que o relé fique desligado
- pinMode(led1, OUTPUT);
- pinMode(led2, OUTPUT);
- pinMode(led3, OUTPUT);
- pinMode(buzzer, OUTPUT);
- // Setup INPUTS
- /*
- Para testes em bancada, foi necessário utilizar o INPUT_PULLUP
- No caso de colocar o projeto no "local", será necessário fazer um input comum.
- */
- //pinMode(ilha1, INPUT_PULLUP); // Realizar um PULLDOWN EM TODOS INPUTS.
- //pinMode(ilha2, INPUT_PULLUP);
- pinMode(ilha1, INPUT);
- pinMode(ilha2, INPUT);
- pinMode(trilha, INPUT);
- delay(200);
- digitalWrite(led1, HIGH);
- digitalWrite(led3, HIGH);
- Serial.println("Terminou o setup e comecou o loop!");
- }
- void loop() {
- // Aguarda que o anel seja posicionado na primeira ilha para iniciar o jogo
- aguarda_ilha1();
- // Aguarda que o anel seja posicionado na segunda ilha para finalizar o jogo
- aguarda_ilha2();
- }
- // Aguarda o anel ficar por alguns segundos na primeira ilha para resetar o jogo.
- void aguarda_ilha1() {
- while (aguardaIlha1) {
- //Serial.println(digitalRead(ilha1));
- //if (!digitalRead(ilha1)) { // Mudei aqui para teste em bancada
- if (digitalRead(ilha1)) {
- tempoDepois = millis();
- if ((tempoDepois - tempoAgora) > TEMPO_ESPERA)
- {
- digitalWrite(led3, LOW);
- tone(buzzer, 400);
- delay(500);
- noTone(buzzer);
- aguardaIlha1 = false;
- Serial.println("Passou " + String(TEMPO_ESPERA) + " ms na ILHA 1 e comecou o jogo");
- }
- } else {
- tempoAgora = millis();
- }
- }
- }
- /*
- * Aguarda o toque na ilha 2
- *
- * Função responsável pela "execução" do jogo. Verifica toques na trilha
- * bem como na ilha 2. Ao tocar na ilha 2, o jogador ganha o jogo e precisa
- * resetar o arduino para voltar a jogar.
- */
- void aguarda_ilha2() {
- while (!aguardaIlha1) // Mudei aqui para teste em bancada
- {
- if (digitalRead(trilha) == true) {
- digitalWrite(led3, HIGH);
- tone(buzzer, 600);
- delay(1000);
- noTone(buzzer);
- aguardaIlha1 = true;
- Serial.println("Bateu na trilha! Volte para a ilha 1");
- }
- if (digitalRead(ilha2)) {
- //if (!digitalRead(ilha2)) {
- tempoDepois = millis();
- if ((tempoDepois - tempoAgora) > TEMPO_ESPERA)
- {
- digitalWrite(led2, HIGH);
- tone(buzzer, 800);
- delay(1000);
- noTone(buzzer);
- digitalWrite(rele, LOW); // Relé chaveia com LOW, destrava trava elétrica.
- delay(1000);
- Serial.println("Ganhou o jogo, abriu a porta.");
- Serial.println("===================================");
- Serial.println("Para jogar novamente, reset o jogo!");
- Serial.println("===================================");
- while (true) {}
- }
- } else {
- tempoAgora = millis();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement