1
resposta

E se as portas estiverem em números aleatórios e não em ordem ?

No exemplo o array de leds ficam todos dentro de numero de portas em sequencia (2,3,4,5) no meu está aleatório (12,3,2,7) dessar forma como faz para compreender esses números dentro da const "tamanho__sequencia"? Tentei outra forma, acho que foi mas ta gerando um delay muito grande na resposta do botão

#define LEDVERM 12
#define LEDAZ 3
#define LEDAM 2
#define LEDVERD 7

#define BOTAOVERM 10
#define BOTAOAZ 11
#define BOTAOAM 9
#define BOTAOVERD 5

#define INDEFINIDO -1
#define UM_SEGUNDO 1000
#define MEIO_SEGUNDO 500

#define TAMANHO_SEQUENCIA 13
int sequenciaLuzes[TAMANHO_SEQUENCIA];


void setup(){
  Serial.begin(9600);
    iniciaPortas();
    iniciaJogo();
    sorteiaCor();
}


void loop(){
    for(int i = 0; i < TAMANHO_SEQUENCIA; i++){
      sequenciaLuzes[i] = piscaLed (random(LEDAM, LEDVERM+1));
            }
  respostaJogador();

Serial.println(respostaJogador());
}


int piscaLed(int portaLed){
    digitalWrite(portaLed, HIGH);
    delay(UM_SEGUNDO);
    digitalWrite(portaLed, LOW);
    delay(MEIO_SEGUNDO);
    return portaLed;
}



  int  respostaJogador(){

      if(digitalRead(BOTAOVERM) == LOW){
         return piscaLed(LEDVERM);
      }

      if(digitalRead(BOTAOAZ) == LOW){
         return piscaLed(LEDAZ);
      }
      if(digitalRead(BOTAOAM) == LOW){
         return piscaLed(LEDAM);
      }
      if(digitalRead(BOTAOVERD) == LOW){
         return piscaLed(LEDVERD);
      }
      return INDEFINIDO;
  }
void iniciaPortas(){
    pinMode(LEDVERM, OUTPUT);
    pinMode(LEDAZ, OUTPUT);
    pinMode(LEDAM, OUTPUT);
    pinMode(LEDVERD , OUTPUT);

    pinMode (BOTAOVERM, INPUT_PULLUP);
    pinMode (BOTAOAZ, INPUT_PULLUP);
    pinMode (BOTAOAM, INPUT_PULLUP);
    pinMode (BOTAOVERD, INPUT_PULLUP);
}

int sorteiaCor(){
  return random(LEDVERM, LEDVERD +1);
  }

void iniciaJogo()
{
  for (int i = 0; i < TAMANHO_SEQUENCIA; i++){
  sequenciaLuzes[i] = sorteiaCor();

  }
}


1 resposta

Oi Pedro, tudo bem ?

Neste caso em especial onde as portas possuem números aleatórios, teríamos que fazer um tipo de tratamento para que quando o número sorteado não for uma daquelas portas aleatórias, faça o sorteio novamente, até que se tenha uma porta válida.

Por exemplo:

  • Portas válidas: 12,3,2,7
  • Então teremos um range de 2 até 13, certo?!

Daí, imagine que:

  • O Número sorteado é o 4. Mas não temos o 4 como uma porta válida, então, faça o sorteio novamente até que se encontre um número de porta válida. Pegou a ideia?

Entretanto, esta abordagem deixará o programa menos performático, uma vez que demandará tempo para realizar o sorteio toda vez que o número for diferente daqueles esperados. Sendo assim, para melhor desempenho do projeto tanto em quesito tempo de resposta e performance do mesmo, que é recomendado escolher as portas na sequência. Tudo bem ?

Qualquer dúvida estou a disposição. Espero ter ajudado. Bons estudos!!!