Genius with tinkerpad

i got a 'invalid header file error' and i do not know how to solve, can someone help? this code was supposed to play "genius" on arduino with buttons and serial, im using tinkerpad. `#include <LiquidCrystal.h>

#include <EEPROM.h>

//Definindo as notas dos botões
#define NOTE_D4 294
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTE_A5 880

// Variaveis Globais
int tons[4] = { NOTE_A5, NOTE_A4, NOTE_G4, NOTE_D4 };

int sequencia[100] = {};

int rodada_atual = 0;

int passo_atual_na_sequencia = 0;

int nivelDificuldade = 0;
int tempoDelay = 1000;
const long SERIAL_TIMEOUT = 5000; // Timeout de 5 segundos para leitura do Serial
int pinoAudio = 6;
int pinosLeds[4] = {7, 8, 9, 10};
int pinosBotoes[4] = { 2, 3, 4, 5 };

int botao_pressionado = 0;

int perdeu_o_jogo = false;

bool setDificuldade = true;

void setup() {

Serial.begin(5000);

// Definindo os Pinos dos leds como saídas
for (int i = 0; i <= 3; i++) {
pinMode(pinosLeds[i], OUTPUT);
}

// Definindo o modo dos pinos dos Botões como entrada.
for (int i = 0; i <= 3; i++) {
pinMode(pinosBotoes[i], INPUT);
}

// Definindo o modo do pino de Áudio como saída.
pinMode(pinoAudio, OUTPUT);

randomSeed(analogRead(0));
}

void loop() {

Serial.println("* INICIO ");
Serial.println("Comecar? (s/n)");
leserial();
if (recebido.equalsIgnoreCase("s")){
/
while(setDificuldade){
for (int i = 0; i <= 3; i++) {
if (digitalRead(pinosBotoes[i]) == HIGH) {
setDificuldade = false;
if (i == 0){
tempoDelay = 750;
}
else if (i == 1){
tempoDelay = 500;
}
else if (i == 2){
tempoDelay = 300;
}
else {
tempoDelay = 100;
}
}
}
}

// Se perdeu o jogo reinicializamos todas as variáveis.
if (perdeu_o_jogo) {
	int sequencia[100] = {};
	rodada_atual = 0;
	passo_atual_na_sequencia = 0;
	perdeu_o_jogo = false;
}

// Toca um som de início para anúnicar que o jogo está começando quando é a primeira rodada.
if (rodada_atual == 0) {
	tocarSomDeInicio();
	delay(500);
}

// Começa a próxima rodada
proximaRodada();
// Reproduz a sequência atual.
reproduzirSequencia();
// Aguarda os botões serem pressionados pelo jogador.
aguardarJogador();

// Aguarda 0,5 segundo entre cada jogada.
delay(500);
/*} else {
	Serial.println("Jogo não iniciado");
	digitalWrite(pinosLeds[0], HIGH);
  	digitalWrite(pinosLeds[1], HIGH);
  	digitalWrite(pinosLeds[2], HIGH);
  	digitalWrite(pinosLeds[3], HIGH);
  	delay(100);
  	digitalWrite(pinosLeds[0], LOW);
  	digitalWrite(pinosLeds[1], LOW);
  	digitalWrite(pinosLeds[2], LOW);
  	digitalWrite(pinosLeds[3], LOW);
  	delay(100);
}*/

}

// Sorteia um novo item e adiciona na sequência.
void proximaRodada() {
int numero_sorteado = random(0, 4);
sequencia[rodada_atual++] = numero_sorteado;
}

// Reproduz a sequência para ser memorizada.
void reproduzirSequencia() {
for (int i = 0; i < rodada_atual; i++) {
tone(pinoAudio, tons[sequencia[i]]);
digitalWrite(pinosLeds[sequencia[i]], HIGH);
delay(tempoDelay);
noTone(pinoAudio);
digitalWrite(pinosLeds[sequencia[i]], LOW);
delay(100);
}
noTone(pinoAudio);
}

// Aguarda o jogador iniciar sua jogada.
void aguardarJogador() {
for (int i = 0; i < rodada_atual; i++) {
aguardarJogada();
verificarJogada();

if (perdeu_o_jogo) {
  setDificuldade = true;
  break;
}

passo_atual_na_sequencia++;

}

// Redefine a variável para 0.
passo_atual_na_sequencia = 0;
}

void aguardarJogada() {
boolean jogada_efetuada = false;
while (!jogada_efetuada) {
for (int i = 0; i <= 3; i++) {
if (digitalRead(pinosBotoes[i]) == HIGH) {
// Dizendo qual foi o botao pressionado.
botao_pressionado = i;

    tone(pinoAudio, tons[i]);
    digitalWrite(pinosLeds[i], HIGH);
    delay(300);
    digitalWrite(pinosLeds[i], LOW);
    noTone(pinoAudio);

    jogada_efetuada = true;
  }
}
delay(10);

}
}

void verificarJogada() {
if (sequencia[passo_atual_na_sequencia] != botao_pressionado) {
// GAME OVER.
for (int i = 0; i <= 3; i++) {
tone(pinoAudio, tons[i]);
digitalWrite(pinosLeds[i], HIGH);
delay(200);
digitalWrite(pinosLeds[i], LOW);
noTone(pinoAudio);
setDificuldade = true;
}

tone(pinoAudio, tons[3]);
for (int i = 0; i <= 3; i++) {
  digitalWrite(pinosLeds[0], HIGH);
  digitalWrite(pinosLeds[1], HIGH);
  digitalWrite(pinosLeds[2], HIGH);
  digitalWrite(pinosLeds[3], HIGH);
  delay(100);
  digitalWrite(pinosLeds[0], LOW);
  digitalWrite(pinosLeds[1], LOW);
  digitalWrite(pinosLeds[2], LOW);
  digitalWrite(pinosLeds[3], LOW);
  delay(100);
}
noTone(pinoAudio);

perdeu_o_jogo = true;

}
}

void tocarSomDeInicio() {
tone(pinoAudio, tons[0]);
digitalWrite(pinosLeds[0], HIGH);
digitalWrite(pinosLeds[1], HIGH);
digitalWrite(pinosLeds[2], HIGH);
digitalWrite(pinosLeds[3], HIGH);
delay(500);
digitalWrite(pinosLeds[0], LOW);
digitalWrite(pinosLeds[1], LOW);
digitalWrite(pinosLeds[2], LOW);
digitalWrite(pinosLeds[3], LOW);
delay(500);
noTone(pinoAudio);
}

void leSerial(){
Serial.println("* Insira sua resposta *");

// Aguardar a resposta do usuário pelo tempo definido em SERIAL_TIMEOUT
long startTime = millis();
while (Serial.available() == 0 && millis() - startTime < SERIAL_TIMEOUT)
{}

// Guarda o valor digitado pelo usuário em recebido
if (Serial.available()) {
recebido = Serial.readString();
} else {
Serial.println("Timeout! Resposta não recebida.");
}
}

void piscaLed(int tempo, int vezes){
for(int i = 0; i < vezes; i++){
for(int j = 0; j < NUM_LEDS; j++){
digitalWrite(LED_PINS[j], HIGH);
}
delay(tempo);
for(int j = 0; j < NUM_LEDS; j++){
digitalWrite(LED_PINS[j], LOW);
}
delay(tempo);
}
}

void geraSequencia(int tempo, int sequencia){
// Criar uma lista de inteiros com o tamanho que é passado como argumento
int ordemLeds[sequencia];

// Gerar sequência aleatória
for (int i = 0; i < sequencia; i++){
ordemLeds[i] = random(1, NUM_LEDS + 1);
}

// Inicialmente, a String sequenciaNumerica é uma String vazia
sequenciaNumerica = "";

// Pisca os LEDs na sequência gerada
for (int j = 0; j < sequencia; j++){
int ledIndex = ordemLeds[j] - 1;
digitalWrite(LED_PINS[ledIndex], HIGH);
delay(tempo);
digitalWrite(LED_PINS[ledIndex], LOW);
delay(tempo);
// Converte a lista em uma String
sequenciaNumerica += String(ordemLeds[j]);
}
}
`

Welcome to the forum
Your topic has been moved to the Programming category of the forum as it is more appripriate

Please follow the advice given in the link below when posting code, in particular the section entitled 'Posting code and common code problems'

Use code tags (the < CODE/ > icon above the compose window) to make it easier to read and copy for examination

https://forum.arduino.cc/t/how-to-get-the-best-out-of-this-forum

2 Likes

Add #include before the above entry

The above is missing a closing brace.

Stray "/" and recebido not declared (probably as type String)

NUM_LEDS (probably near 100) and LED_PINS (probably an array, probably 9 or 10) need type and values

Type not declared, probably String type.

That should make it compile... but there is a lot of cleanup to be done... including serial input does not work.
sino

Hi, @doiseffe
Welcome to the forum.

Can you please tell us your electronics, programming, arduino, hardware experience?

It looks like you have written your code in one lot and then discovered bugs.

Can I suggest you write your code in stages.
First stage is to get the LCD display to show "Hello World".
Then when you have that working go ont ot he next input or output stage each time generating individual working codes for each peripheral.
Then begin combining them, one at a time, each time debugging before adding the next.

This way you will be able to find problems easily in small codes, rather than having to attack the complete code to find one or more bugs.

So first get your display working, forget about your big code for the moment, just get the display working.

Thanks.. Tom.. :grinning: :+1: :coffee: :australia:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.