Baixe o app do Guru IA

Android e iOS

Foto de perfil

Gustavo

Linguagens de Programação11/06/2024

#include <Arduino.h> #include <LiquidCrystal.h> // Pinos...

#include <Arduino.h> #include <LiquidCrystal.h>

// Pinos dos botões const int buttonPins[6] = {33, 32, 18, 19, 35, 21};

// Variáveis para controlar a dificuldade int difficulty = 1; // 1: fácil, 2: médio, 3: difícil int interval = 1000; // Intervalo entre as mudanças de estado dos botões (em ms)

// Variáveis para contagem int correctAnswers = 0; int wrongAnswers = 0;

// Variável para controlar o tempo unsigned long startTime; // Tempo de início do nível atual (em milissegundos)

// Variáveis para debounce unsigned long lastDebounceTime[6] = {0}; // Tempo da última mudança de estado unsigned long debounceDelay = 50; // Tempo de debounce em milissegundos

// Estado anterior dos botões int lastButtonState[6] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH};

// Configuração do display LCD (pinos RS, E, D4, D5, D6, D7) LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// Função para iniciar um novo nível void startNewLevel(int newDifficulty) { difficulty = newDifficulty; switch (difficulty) { case 1: interval = 1000; break; case 2: interval = 500; break; case 3: interval = 250; break; }

correctAnswers = 0; // Resetar respostas corretas para o novo nível wrongAnswers = 0; // Resetar respostas erradas para o novo nível startTime = millis(); // Resetar tempo de início para o novo nível

lcd.clear(); lcd.print("Nivel: "); lcd.print(difficulty); }

void setup() { // Configurar pinos dos botões como entrada com pullup for (int i = 0; i < 6; i++) { pinMode(buttonPins[i], INPUT_PULLUP); }

// Inicializar comunicação serial Serial.begin(115200);

// Inicializar o display LCD lcd.begin(16, 2);

// Instruções iniciais para o usuário lcd.print("Bem-vindo ao jogo"); lcd.setCursor(0, 1); lcd.print("Escolha dif.:"); delay(2000); // Esperar 2 segundos

lcd.clear(); lcd.print("'e' - Facil"); lcd.setCursor(0, 1); lcd.print("'m' - Medio 'd'-Dificil"); }

void loop() { // Ler dados da comunicação serial if (Serial.available() > 0) { char command = Serial.read();

bool validCommand = true;

switch (command) {
  case 'e': // Fácil
    startNewLevel(1);
    break;

  case 'm': // Médio
    startNewLevel(2);
    break;

  case 'd': // Difícil
    startNewLevel(3);
    break;
  default:
    validCommand = false;
    break;
}

if (validCommand) {
  lcd.clear();
  lcd.print("Dif. definida:");
  lcd.setCursor(0, 1);
  lcd.print(difficulty);
  delay(2000); // Esperar 2 segundos
  lcd.clear();
}

}

// Ler estado dos botões com debounce for (int i = 0; i < 6; i++) { int reading = digitalRead(buttonPins[i]);

if (reading != lastButtonState[i]) {
  lastDebounceTime[i] = millis();
}

if ((millis() - lastDebounceTime[i]) > debounceDelay) {
  if (reading == LOW && lastButtonState[i] == HIGH) {
    // Botão pressionado
    // Verificar se o botão pressionado corresponde à sequência aleatória

    // (Simulação da sequência aleatória - Substitua por sua lógica de jogo)
    int expectedButton = i; // Suposição: botão pressionado deve ser o mesmo do índice

    if (expectedButton == i) {
      // Resposta correta
      lcd.clear();
      lcd.print("Resp. correta!");
      correctAnswers++;
    } else {
      // Resposta errada
      lcd.clear();
      lcd.print("Resp. errada!");
      wrongAnswers++;
    }
    delay(1000); // Mostrar mensagem por 1 segundo
    lcd.clear();
  }
}

lastButtonState[i] = reading;

}

// Verificar se o tempo limite do nível foi atingido unsigned long currentTime = millis(); if (currentTime - startTime >= 180000) { // 3 minutos em milissegundos // Tempo limite atingido lcd.clear(); lcd.print("Tempo limite!"); delay(2000); // Esperar 2 segundos

// Calcular e imprimir a porcentagem de acertos
float percentage = (float)correctAnswers / (correctAnswers + wrongAnswers) * 100;
lcd.clear();
lcd.print("Acertos:");
lcd.setCursor(0, 1);
lcd.print(percentage, 2); // Mostrar duas casas decimais
delay(5000); // Mostrar resultado por 5 segundos

// Iniciar novo nível
startNewLevel((difficulty % 3) + 1); // Próximo nível (com ciclo entre 1, 2, 3)

} }. eu preciso da pinagem dos 6 botões e do display lcd onde vai ficar a pinagem deles ligadas na esp-32

Envie suas perguntas pelo App
Google Play
App Store
Equipe Meu Guru

Prefere sua atividade resolvida por um tutor especialista?

  • Receba resolvida até o seu prazo
  • Converse com o tutor pelo chat
  • Garantia de 7 dias contra erros