Baixe o app do Guru IA
Android e iOS

Gustavo
#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
#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