1
resposta

[Bug] Meu projeto tá normal, os leds acendem conforme eu aperto os botões, porém meu monitor serial tá mostrando o valor errado.

Meu projeto tá normal, os leds acendem conforme eu aperto os botões, porém meu monitor serial tá mostrando o valor errado.

Esse é meu código:

#define LED_VERDE 2
#define LED_VERMELHO 3
#define LED_AZUL 4
#define LED_AMARELO 5

#define BOTAO_VERDE 8
#define BOTAO_VERMELHO 9
#define BOTAO_AZUL 10
#define BOTAO_AMARELO 11

#define INDEFINIDO -1

#define TAMANHO_SEQUENCIA 4

int sequenciaLuzes[TAMANHO_SEQUENCIA];

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

void iniciaPortas(){
    pinMode(LED_VERDE, OUTPUT);
    pinMode(LED_VERMELHO, OUTPUT);
      pinMode(LED_AZUL, OUTPUT);
      pinMode(LED_AMARELO, OUTPUT);
    
  
      pinMode(BOTAO_VERDE, INPUT_PULLUP);
    pinMode(BOTAO_VERMELHO, INPUT_PULLUP);
      pinMode(BOTAO_AZUL, INPUT_PULLUP);
      pinMode(BOTAO_AMARELO, INPUT_PULLUP);
}

void iniciaJogo(){
      sequenciaLuzes[0] = LED_VERDE;
      sequenciaLuzes[1] = LED_VERMELHO;
      sequenciaLuzes[2] = LED_AZUL;
    sequenciaLuzes[3] = LED_AMARELO;
}

void loop(){
  Serial.println(checaRespostaJogador());
}

int checaRespostaJogador() {
  if(digitalRead(BOTAO_VERDE) == LOW) {
      return piscaLed(LED_VERDE);
  }
  if(digitalRead(BOTAO_VERMELHO) == LOW) {
      return piscaLed(LED_VERMELHO);
  }
  if(digitalRead(BOTAO_AZUL) == LOW) {
      return piscaLed(LED_AZUL);
  }
  if(digitalRead(BOTAO_AMARELO) == LOW) {
      return piscaLed(LED_AMARELO);
  }
  if(digitalRead(BOTAO_AMARELO) == HIGH) {
      INDEFINIDO;
  }
}

void piscaSequencia1(){
    piscaLed(LED_VERDE);
    piscaLed(LED_AMARELO);
    piscaLed(LED_VERMELHO);
    piscaLed(LED_AZUL);
    delay(500);    
}

void piscaSequencia2(){
    digitalWrite(LED_VERDE, HIGH);
    digitalWrite(LED_AMARELO, HIGH);
    digitalWrite(LED_VERMELHO, HIGH);
    digitalWrite(LED_AZUL, HIGH);
    delay(1000);

    digitalWrite(LED_VERDE, LOW);
    digitalWrite(LED_AMARELO, LOW);
    digitalWrite(LED_VERMELHO, LOW);
    digitalWrite(LED_AZUL, LOW);
    delay(500);
}

int piscaLed(int portaLed){
    digitalWrite(portaLed, HIGH);
    delay(1000);
    digitalWrite(portaLed, LOW);
    //delay(500);
      return portaLed;
}

por algum motivo no meu monitor Serial só fica o número 1. E o numero do indefinido tá como -1.

1 resposta

Olá, tudo bem?

Pelo que pude analisar no seu código, parece que o problema está relacionado à função checaRespostaJogador(). Há um detalhe que pode estar causando o comportamento inesperado no monitor serial: a falta de retorno da constante INDEFINIDO na função. No seu código, você mencionou INDEFINIDO; sem o return na frente, o que significa que essa linha não está fazendo nada efetivamente.

Aqui está como você poderia ajustar isso:

int checaRespostaJogador() {
  if(digitalRead(BOTAO_VERDE) == LOW) {
    return piscaLed(LED_VERDE);
  }
  if(digitalRead(BOTAO_VERMELHO) == LOW) {
    return piscaLed(LED_VERMELHO);
  }
  if(digitalRead(BOTAO_AZUL) == LOW) {
    return piscaLed(LED_AZUL);
  }
  if(digitalRead(BOTAO_AMARELO) == LOW) {
    return piscaLed(LED_AMARELO);
  }
  return INDEFINIDO; // Aqui estava o erro, faltava o return
}

Além disso, vale a pena verificar se o valor de INDEFINIDO está sendo tratado corretamente em outras partes do código, pois você mencionou que o monitor serial só mostra o número 1, o que sugere que talvez o valor de INDEFINIDO (-1) não esteja sendo exibido como esperado. Certifique-se de que o monitor serial esteja configurado corretamente para mostrar os valores que você está enviando.

Espero que dê tudo certo. Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

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