image 2 e1768314247865 Saravati

Projeto com Arduino: Jogo da Memória (Estilo Genius) com LEDs, Botões e Buzzer

Introdução

Neste tutorial, vamos construir um jogo da memória estilo Genius, utilizando Arduino Uno, botões, LEDs e um buzzer para criar efeitos sonoros.

Arduino

Além de ser um projeto divertido, ele ensina conceitos fundamentais como:

  • Leitura de entradas digitais
  • Uso correto de botões com INPUT_PULLUP
  • Controle de LEDs
  • Geração de sons com buzzer
  • Lógica de programação e estados
  • Sequências e memória no microcontrolador

Esse é um projeto excelente para iniciantes, mas que também ajuda quem já estuda Arduino a organizar melhor a lógica de programação.

Como funciona o jogo da memória?

O funcionamento é simples e muito intuitivo:

  1. O Arduino acende os LEDs em uma sequência aleatória
  2. Cada LED aceso emite um som específico
  3. O jogador deve pressionar os botões correspondentes aos LEDs, na mesma ordem
  4. Se acertar:
    • O jogo avança para o próximo nível
    • A sequência fica maior
  5. Se errar:
    • O buzzer emite um som de erro
    • O jogo reinicia do começo

Materiais necessários

Ligações do circuito

Botões

Os botões estão ligados de forma ativa em nível baixo (LOW):

  • Um lado do botão → VCC (5V)
  • Outro lado do botão → pino digital do Arduino
  • O Arduino usa INPUT_PULLUP
BotãoPino ArduinoLED correspondente
Botão 1D7LED D8
Botão 2D6LED D9
Botão 3D5LED D10
Botão 4D4LED D11

LEDs

  • Anodo do LED → resistor → pino digital
  • Catodo → GND
LEDPino Arduino
LED 1D8
LED 2D9
LED 3D10
LED 4D11

Buzzer

  • Terminal positivo → D2
  • Terminal negativo → GND

IDE utilizada

  • Arduino IDE
  • Placa selecionada: Arduino Uno
  • Porta COM correta do Arduino

Lógica utilizada no código

Antes de ir para o código, vale entender os principais conceitos usados:

INPUT_PULLUP

  • O pino fica em HIGH por padrão
  • Quando o botão é pressionado, o pino vai para LOW
  • Isso evita o uso de resistores externos

Sequência aleatória

  • O Arduino gera uma sequência de números entre 0 e 3
  • Cada número representa um LED e um botão

Comparação passo a passo

  • O jogador precisa acertar toda a sequência
  • Se errar um único passo, o jogo reinicia

Código completo do projeto

Copie o código abaixo e cole na Arduino IDE:

/*
  Jogo da Memória (Genius) - Arduino UNO
  Botões: D7, D6, D5, D4 (VCC fixo / GND ao pressionar)
  LEDs: D8, D9, D10, D11
  Buzzer: D2
*/

const byte buzzerPin = 2;

// Botões (ativo em LOW)
const byte btnPins[4] = {7, 6, 5, 4};

// LEDs correspondentes
const byte ledPins[4] = {8, 9, 10, 11};

// Tons para cada botão/LED
const int tonesHz[4] = {262, 330, 392, 494};

// Configuração do jogo
const int MAX_SEQ = 100;
byte sequenceArr[MAX_SEQ];
int level = 1;

void beep(int freq, int dur) {
  tone(buzzerPin, freq, dur);
  delay(dur);
  noTone(buzzerPin);
}

void flash(byte idx, int timeMs) {
  digitalWrite(ledPins[idx], HIGH);
  tone(buzzerPin, tonesHz[idx]);
  delay(timeMs);
  digitalWrite(ledPins[idx], LOW);
  noTone(buzzerPin);
  delay(120);
}

void startAnimation() {
  for (byte r = 0; r < 2; r++) {
    for (byte i = 0; i < 4; i++) {
      flash(i, 120);
    }
  }
}

void errorAnimation() {
  for (byte i = 0; i < 3; i++) {
    for (byte l = 0; l < 4; l++) digitalWrite(ledPins[l], HIGH);
    tone(buzzerPin, 120);
    delay(200);
    noTone(buzzerPin);
    for (byte l = 0; l < 4; l++) digitalWrite(ledPins[l], LOW);
    delay(150);
  }
}

void generateSequence() {
  for (int i = 0; i < MAX_SEQ; i++) {
    sequenceArr[i] = random(0, 4);
  }
}

void showSequence(int len) {
  delay(400);
  for (int i = 0; i < len; i++) {
    flash(sequenceArr[i], 350);
  }
}

int waitButton() {
  while (true) {
    for (byte i = 0; i < 4; i++) {
      if (digitalRead(btnPins[i]) == LOW) {
        digitalWrite(ledPins[i], HIGH);
        tone(buzzerPin, tonesHz[i]);
        while (digitalRead(btnPins[i]) == LOW);
        digitalWrite(ledPins[i], LOW);
        noTone(buzzerPin);
        delay(80);
        return i;
      }
    }
  }
}

bool checkSequence(int len) {
  for (int i = 0; i < len; i++) {
    if (waitButton() != sequenceArr[i]) return false;
  }
  return true;
}

void setup() {
  pinMode(buzzerPin, OUTPUT);
  for (byte i = 0; i < 4; i++) {
    pinMode(btnPins[i], INPUT_PULLUP);
    pinMode(ledPins[i], OUTPUT);
  }
  randomSeed(analogRead(A0));
  generateSequence();
  startAnimation();
}

void loop() {
  showSequence(level);
  if (checkSequence(level)) {
    level++;
    delay(400);
  } else {
    errorAnimation();
    level = 1;
    generateSequence();
    startAnimation();
  }
}

Conclusão

Esse projeto mostra como Arduino não é apenas piscar LED, mas sim uma poderosa ferramenta para desenvolver:

  • Raciocínio lógico
  • Eletrônica prática
  • Programação aplicada
  • Projetos reais e divertidos

Saiba mais sobre a parceria Saravati e Sara Educação

Este “Guia de Montagem” é uma colaboração especial entre a Saravati e a Sara Educação, criado pelo Professor Felipe Rosa. Nosso objetivo é enriquecer a comunidade de entusiastas da eletrônica, IoT e automação com recursos educacionais de alta qualidade. Através dessa parceria, buscamos inspirar e capacitar criadores em seus projetos, disponibilizando esses guias em nosso blog e nas redes sociais.

@saravatirobotica no Instagram e Tiktok

@sara.educacao no Instagram e Tiktok