Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

esta dando o erro "exit status 1 'estadoatual' was not declared in this scope"

basicamente ele da o erro "exit status 1 'estadoatual' was not declared in this scope"

#define LED_VERDE 2
#define LED_AMARELO 3
#define LED_VERMELHO 4
#define LED_AZUL 5
#define INDEFINIDO -1

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

#define UM_SEGUNDO 1000
#define MEIO_SEGUNDO 500

#define TAMANHO_SEQUENCIA 4

enum estados{
  PRONTO_PARA_PROX_RODADA,
  USUARIO_RESPONDENDO,
  JOGO_FINALIZADO_SUCESSO,
  JOGO_FINALIZADO_FALHA
  };

int sequencialuzes[TAMANHO_SEQUENCIA];

int rodada = 0;

void setup() {
  Serial.begin(9600);
  iniciaportas();
  iniciajogo();
}


void iniciajogo() {
    int numerojogo = analogRead(0);
    randomSeed(numerojogo);
    for(int indice = 0; indice < TAMANHO_SEQUENCIA; indice ++){
      sequencialuzes[indice] = sorteiacor();
    }
}

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

void iniciaportas(){
  pinMode(LED_VERDE,OUTPUT);
  pinMode(LED_AMARELO,OUTPUT);
  pinMode(LED_VERMELHO,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() {
  switch(estadoatual()) {
  case PRONTO_PARA_PROX_RODADA:
    Serial.println("pronto para próxima rodada");
    preparanovarodada();
    break;
  case USUARIO_RESPONDENDO:
    Serial.println("usuário respondendo");
    break;
  case JOGO_FINALIZADO_SUCESSO:
    Serial.println("jogo finalizado sucesso");
    break;
  case JOGO_FINALIZADO_FALHA:
    Serial.println("jogo finalizado falha");
    break;
  }
  delay(500);
}

void preparanovarodada(){
    rodada++;
    tocaledsdarodada();
  }

}
int estadoatual(){
    if(rodada < TAMANHO_SEQUENCIA) {
    return PRONTO_PARA_PROX_RODADA;
  }else{
    return JOGO_FINALIZADO_SUCESSO;
  }
 }


  void tocaledsdarodada(){
     for(int indice = 0; indice < TAMANHO_SEQUENCIA; indice++) {
     piscaled(sequencialuzes[indice]);
  }
    }

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(MEIO_SEGUNDO);
  digitalWrite(portaled,LOW);
  delay(MEIO_SEGUNDO);
  return portaled;
  }


void piscasequencia1() {
  piscaled(LED_VERDE);
  piscaled(LED_AMARELO);
  piscaled(LED_VERMELHO);
  piscaled(LED_AZUL);
  delay(MEIO_SEGUNDO);
  }


  void piscasequencia2(){
    digitalWrite(LED_VERDE, HIGH);
    digitalWrite(LED_AMARELO, HIGH);
    digitalWrite(LED_VERMELHO, HIGH);
    digitalWrite(LED_AZUL, HIGH);

    delay(UM_SEGUNDO);


    digitalWrite(LED_VERDE, LOW);
    digitalWrite(LED_AMARELO, LOW);
    digitalWrite(LED_VERMELHO, LOW);
    digitalWrite(LED_AZUL, LOW);

    delay(MEIO_SEGUNDO);
  } 
1 resposta
solução!

Veja na função preparanovarodada() ela tem um bracket } a mais, ela está assim:

void preparanovarodada(){ rodada++; tocaledsdarodada(); } }

e deveria ser

void preparanovarodada(){ rodada++; tocaledsdarodada(); }

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