4
respostas

Não consigo ver o valor no Serial pela função iniciaJogo

Boa tarde, Eu estou tendo um problema, não estou conseguindo ver pelo Serial o valor do potenciometro pela fução (inicaJogo), só aparece se eu colocar o Serial na função loop. Tentei baixar o código pronto da aula pra testar, mas esta dando o mesmo erro. Meu código está assim:

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

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

#define UM_SEGUNDO 1000

#define TAMANHO_SEQUENCIA 4
#define INDEFINIDO -1

int sequenciaLuzes[TAMANHO_SEQUENCIA];

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

void iniciaJogo(){
  int potenciometro = analogRead(0);
  Serial.println(potenciometro);
  for(int i =0; i < TAMANHO_SEQUENCIA; i++){
  sequenciaLuzes[i] = sorteiCor();
  }  
}

int sorteiCor(){
  return random (LED_VERDE, LED_AZUL+1);
}

void iniciaPortas(){

  pinMode(LED_VERMELHO,OUTPUT);
  pinMode(LED_VERDE,OUTPUT);
  pinMode(LED_AMARELO,OUTPUT);
  pinMode(LED_AZUL,OUTPUT);

  pinMode(BOTAO_VERDE,INPUT_PULLUP);
  pinMode(BOTAO_AMARELO,INPUT_PULLUP);
  pinMode(BOTAO_VERMELHO,INPUT_PULLUP);
  pinMode(BOTAO_AZUL,INPUT_PULLUP);

}

void loop() {

   for(int indice = 0; indice < TAMANHO_SEQUENCIA; indice++){
    piscaLed(sequenciaLuzes[indice]);
   }
 // Serial.println(checaRespostaJogador());

}

int checaRespostaJogador(){

 if(digitalRead(BOTAO_VERDE) == LOW)
  return piscaLed(LED_VERDE);

 if(digitalRead(BOTAO_AMARELO) == LOW)
  return piscaLed(LED_AMARELO);

 if(digitalRead(BOTAO_VERMELHO) == LOW)
  return piscaLed(LED_VERMELHO);

 if(digitalRead(BOTAO_AZUL) == LOW)
  return piscaLed(LED_AZUL);

  return INDEFINIDO;
}

int piscaLed(int portaLed){

  digitalWrite(portaLed,HIGH);
  delay(UM_SEGUNDO);
  digitalWrite(portaLed,LOW);
  delay(UM_SEGUNDO/2); 
  return portaLed;
}
4 respostas

Opa, tudo bom Bruno?

Cara, seguinte, você criou a função iniciaJogo(), mas você só a exucuta no metodo Setup(), que executa o codigo apenas uma vêz, logo o codigo Serial.println(potenciometro); é executado apenas uma vêz (no setup), então por isso que funciona ao colocar no metodo loop(), pois esse, executa o codigo repetidas vezes, se seu objetivo é visualizar o potenciometro no serial, apenas no inicio da aplicação (e não está tendo sucesso), experimente coloca-lo diretamente no setup()

Espero ter ajudado :D

Ola Heron! Tudo e certo, e com você?

Então, o que me deixou confuso foi que na vídeo aula, o professor coloca o Serial.println(potenciometro) dentro da funçãoiniciaJogo() e funciona, já no meu código não. Tentei colocar direto na função Setup() mas mesmo assim não adiantou. Mas obrigado pela ajuda viu!

att

Bruno, acabei de ver o vídeo, lá o código de leitura é executado apenas uma vez, e é mostrado no serial também apenas uma vez, devido a questão do setup() ser executado apenas no inicio da aplicação.

Não me parece haver nada de errado no seu código, logo o problema pode ser hardware, tem certeza de que o potenciômetro está conectado na porta analógica 0 ? E de que todos os cabos estão bem conectados? Que resultado foi obtido ao colocar a linha de leitura do potenciômetro no loop()?

Quando coloco no loop() o código roda normal, mostrando exatamente os valores do potenciômetro, porém várias vezes, pelo fato de estar em uma função de repetição. Mas em alguns casos até a função loop() buga para mostrar o serial, e assim não mostrando alguns valores que deveriam ser mostrados.