Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

aula10 atividade 3 de arduino, porque 128

Em meu codigo "resposta" retorna com o valor de 128 em vez de "nada" e que eu respondi a sequencia esse numero abaixou para 8 e depois foi para 9, porque isso aconteceu? o que foi de errado?

#define ledVerdeP 11
#define ledAmarelo 10
#define ledVermelho 9
#define ledVerdeS 8

#define botVerdeP 5
#define botAmarelo 4
#define botVermelho 3
#define botVerdeS 2

#define tamanhoSequencia 4
int sequenciaLuzes[tamanhoSequencia];
int rodada = 0;
int ledAcertados = 0;
#define NADA -1

enum ESTADOS{
  usuarioRespondendo,
  prontoProx,
  fimJogoVitoria,
  fimJogoPerda
};


void setup(){
  iniciaPortas();
  sequencia();

}

void iniciaPortas(){
  pinMode(ledVerdeP,OUTPUT);
  pinMode(ledAmarelo,OUTPUT);
  pinMode(ledVermelho,OUTPUT);
  pinMode(ledVerdeS,OUTPUT);

  pinMode(botVerdeP,INPUT_PULLUP);
  pinMode(botAmarelo,INPUT_PULLUP);
  pinMode(botVermelho,INPUT_PULLUP);
  pinMode(botVerdeS,INPUT_PULLUP);

  Serial.begin(9600);
}
//sorteia nova sequencia -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
void sequencia(){
  int porta = analogRead(A0);
  randomSeed(porta);

  for (int i=0; i<tamanhoSequencia; i++){
    sequenciaLuzes[i] = sorteiaCor();
  }
}


int sorteiaCor(){
  return random(ledVerdeS,ledVerdeP + 1);
}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

void loop(){
  switch(estados()){   
    case prontoProx:
      Serial.println("Pronto para a proxima rodada");
      preparaProxRodada();
      break;

    case usuarioRespondendo:
      Serial.println("O usuario esta respondendo.");
      processaRespJog();
      break;

    case fimJogoVitoria:
      Serial.println("Fim de Jogo, voce venceu");
      break;

    case fimJogoPerda:
      Serial.println("Fim de Jogo, voce predeu");
      break;
  }

  delay(500);
}


//estados-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

int estados(){
  if (rodada <= tamanhoSequencia){
    if (ledAcertados == rodada){
      return prontoProx;
    }else{
      return usuarioRespondendo;
    }
  }else{
    return fimJogoVitoria;
  }
}

void preparaProxRodada(){
  rodada++;
  ledAcertados = 0;
  if (rodada <= tamanhoSequencia){
   piscaSEQUENCIAled();
  }

}


void processaRespJog(){
  int resposta = controleBotoes();

  Serial.println(resposta);
  if (resposta == nada){
    return;
  }

  if (resposta == sequenciaLuzes[ledAcertados]){
    ledAcertados++;
  }else{
    Serial.println("reposta errada.");
  }
}






//controle dos botões-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


int controleBotoes(){
  if (digitalRead(botVerdeP) == LOW){
    return piscaLed(ledVerdeP);
  }
  if (digitalRead(botAmarelo) == LOW){
    return piscaLed(ledAmarelo);
  }
  if (digitalRead(botVerdeS) == LOW){
    return piscaLed(ledVerdeS);
  }
  if (digitalRead(botVermelho) == LOW){
    return piscaLed(ledVermelho);

  return NADA;
  }
}




//sequencia de leds-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

void piscaSEQUENCIAled(){
  for (int i=0; i<rodada; i++){
    piscaLed(sequenciaLuzes[i]);
  }
}

int piscaLed(int led){
  digitalWrite(led, HIGH);
  delay(1000);
  digitalWrite(led,LOW);
  delay(500);
  return led;
}
2 respostas
solução!

Oi Michael, como vai? Espero que esteja bem ^-^

Sinto muito pela demora em obter uma resposta.

Vamos observar o seguinte trecho de código:

int controleBotoes(){
  if (digitalRead(botVerdeP) == LOW){
    return piscaLed(ledVerdeP);
  }
  if (digitalRead(botAmarelo) == LOW){
    return piscaLed(ledAmarelo);
  }
  if (digitalRead(botVerdeS) == LOW){
    return piscaLed(ledVerdeS);
  }
  if (digitalRead(botVermelho) == LOW){
    return piscaLed(ledVermelho);

  return NADA;
  }
}

Observe que caso o usuário não aperte nenhum dos botões, nada acontece. E isso porque você está retornando a variável NADA quando o botão vermelho é apertado, veja que as chaves do último IF possui dois retornos: return piscaLed(ledVermelho); e return NADA . Então isso faz com que o retorno da função controleBotoes() seja indefinido, ora será um valor e ora outro. Para corrigir isso, basta retornar NADA quando nenhum dos botões for apertado. Do seguinte modo:


int controleBotoes(){
  if (digitalRead(botVerdeP) == LOW){
    return piscaLed(ledVerdeP);
  }
  if (digitalRead(botAmarelo) == LOW){
    return piscaLed(ledAmarelo);
  }
  if (digitalRead(botVerdeS) == LOW){
    return piscaLed(ledVerdeS);
  }
  if (digitalRead(botVermelho) == LOW){
    return piscaLed(ledVermelho);
  }

  return NADA;
}

Outro ponto a observar é na função processaRespJog(), quando você efetua a seguinte comparação:

 if (resposta == nada){
    return;
  }

Como a linguagem é case sensitive, ou seja, letras maiúsculas e minúsculas não possuem o mesmo significado. Por exemplo:

image

Precisamos escrever a variável da forma como ela foi definida(se é tudo maiúsculo temos que utilizar tudo maiúsculo). Veja:

 if (resposta == NADA){
    return;
  }

Com essas modificações, creio que obterá o resultado esperado.

Qualquer coisa é só falar, estou por aqui.

Abraços e bons estudos!

Nossa muito obrigado Nádia serio não acredito que era um erro tao pequeno assim muito obrigado mesm

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software