Índice:
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.

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:
- O Arduino acende os LEDs em uma sequência aleatória
- Cada LED aceso emite um som específico
- O jogador deve pressionar os botões correspondentes aos LEDs, na mesma ordem
- Se acertar:
- O jogo avança para o próximo nível
- A sequência fica maior
- Se errar:
- O buzzer emite um som de erro
- O jogo reinicia do começo
Materiais necessários
- 1 Arduino Uno
- 4 Botões (push buttons)
- 4 LEDs
- 4 resistores para LEDs (220Ω ou 330Ω)
- 1 Buzzer passivo
- Jumpers
- Protoboard
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ão | Pino Arduino | LED correspondente |
| Botão 1 | D7 | LED D8 |
| Botão 2 | D6 | LED D9 |
| Botão 3 | D5 | LED D10 |
| Botão 4 | D4 | LED D11 |
LEDs
- Anodo do LED → resistor → pino digital
- Catodo → GND
| LED | Pino Arduino |
| LED 1 | D8 |
| LED 2 | D9 |
| LED 3 | D10 |
| LED 4 | D11 |
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.

