Tutorial demonstrando o uso do LCD, Teclado e Buzzer com Arduino em um jogo da tabuada
Neste pequeno tutorial vamos mostrar como fazer a interface do Arduino com dispositivos básicos de I/O.
Para isso, apresentamos um pequeno projeto de um jogo para ensinar “tabuada” onde as informações são digitadas em um teclado keypad 4×4 e exibidos em um LCD 2×16.
Projeto Arduino – LCD – Teclado – Buzzer
Vamos precisar dos seguintes componentes:
- Um Arduino UNO placa compatível;
- Protoboard;
- Teclado matricial 4×4;
- LCD 2×16;
- Potenciômetro 1k;
- Resistor 100 oms;
- 5v Piezzo Buzzer;
- Fios Jumpers.
Na imagem abaixo, vemos como estes componentes serão montados:
Pontos de interesse:
- O resistor de 100 ohms é necessário para evitar a distorção do som;
- O potenciômetro é necessário para ajustar a visibilidade LCD;
- Os pinos analógicos serão usados como pinos digitais.
- Quanto ao teclado, você não vai precisar de resistências externas porque a biblioteca usa os resistores pullup internos (ativada através de software).
O jogo de “tabuada” funciona da seguinte forma:
- O sistema escolhe aleatoriamente dois números para serem multiplicado e os exibe na tela LCD;
- O sistema aguarda resposta do usuário;
- O usuário digita sua resposta no teclado e pressione a tecla “#”;
- O sistema verifica se a resposta está correta ou não, e exibe o resultado na segunda linha do LCD através de emoticons e sons;
- O usuário pressiona a tecla “#”;
- O sistema retorna para o passo 1.
Veja a demonstração do jogo em vídeo:
O Sketch
/* * Data input and output whit Arduino, Keypad 4x4, LCD 2x16 and buzzer * 2015, by José Augusto Cintra (www.josecintra.com/blog) */ #include <Keypad.h> #include <LiquidCrystal.h> #include "pitches.h" // Musical Notes //keyPad definitions const byte numRows= 4; //number of rows on the keypad const byte numCols= 4; //number of columns on the keypad char keyMap[numRows][numCols]= { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte rowPins[numRows] = {9,8,7,6}; //Rows 0 to 3 byte colPins[numCols]= {5,4,3,2}; //Columns 0 to 3 Keypad keyPad= Keypad(makeKeymap(keyMap), rowPins, colPins, numRows, numCols); //LCD Display LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); //Buzzer int buzzPin = 10; //connect a 100ohms resistor on this pin void setup() { lcd.begin(16, 2); pinMode(buzzPin,OUTPUT); //Buzzer pin randomSeed(analogRead(7));//Starts the random number generator on this analogic pin } void loop() { lcd.clear(); lcd.setCursor(0, 0); //Choose two numbers and displays them on the LCD int num1 = random(2, 11); int num2 = random(2, 11); int result = num1 * num2; String mult = String(num1) + " x " + String(num2) + " = "; lcd.print(mult); // Waiting for user response and evaluates the result int hit = readVal().toInt(); lcd.setCursor(0, 1); if (result == hit){ lcd.print(":-)"); playHappy(); } else { lcd.print(":-( " + String(result)); playAlarm(); } hit = readVal().toInt(); //Just waiting for you to press any key to continue } //Data input: Enter the values and press "#" String readVal(){ String myString = ""; char keyPressed = keyPad.getKey(); while (keyPressed != '#'){ keyPressed = keyPad.getKey(); if ((keyPressed != NO_KEY) && (keyPressed != '#')) { myString.concat(keyPressed); lcd.print(keyPressed); playTone(); } } return(myString); } //Success: Play "Happy Birthday" void playHappy(){ int melody[] = {NC4,NC4,ND4,NC4,NF4,NE4, NC4,NC4,ND4,NC4,NG4,NF4, NC4,NC4,NC5,NA4,NF4,NE4,ND4, NAS4,NAS4,NA4,NF4,NG4,NF4 }; int noteDurations[] = {6,12,4,4,4,2, 6,12,4,4,4,2, 6,12,4,4,4,4,2, 6,12,4,4,4,2, }; for (int thisNote = 0; thisNote < 12; thisNote++) { int noteDuration = 1000/noteDurations[thisNote]; tone(buzzPin, melody[thisNote],noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); noTone(buzzPin); } } //Error: Play a alarm void playAlarm(){ for (int thisNote = 150; thisNote < 1000; thisNote += 1) { tone(buzzPin, thisNote, 10); delay(1); } for (int thisNote = 1000; thisNote > 150; thisNote -= 1) { tone(buzzPin, thisNote, 10); delay(1); } } //Beeps on key presses void playTone(){ tone(buzzPin, 150, 10); }
Pontos de interesse:
- As bibliotecas (keypad.h e LiquidCrystal.h) estão disponíveis através do gerenciador de bibliotecaa do IDE Arduino
- O arquivo pitches.h contém definições de notas musicais usadas na canção “Happy Birthday to You” e está disponível para download logo abaixo;
- A matriz Keymap define os caracteres do teclado;
- A função randomSeed inicializa o gerador de números aleatórios através da pino A7 analógico;
Recursos
- Download do código-fonte e esquemas
- Artigo original em inglês publicado no CodeProject
- Arduino Playground
- Melodias para Arduino com biblioteca Tone
Conclusão
Isso é tudo!
Espero que o projeto apresentado aqui ajude o iniciante em Arduino a evoluir em seu aprendizado.
Até o próximo projeto…
Ola tentei usar no mega2560 nao rodou. Porque seria??
Olá Dante!
O Arduino que usei também foi o Mega 2560.
Não compilou ou não rodou?
boa noite e c eu quiser por o * como um reset como faria?
Você diz:
Quando apertar o *, os dados digitados até o momento apagariam?
o meu fica dando erro no #include “pitches.h” // Musical Notes alguem sabe me dizer oq pode ser de errado ?
Olá Xará!
Pode ser que ele não está encontrando o arquivo pitches.h.
Você baixou o zip com os arquivos necessários pelo blog?
Tente colocar esse arquivo na pasta do INO ou na pasta include
gostaria de montar um display com numeros que digitar de 3 digitos , usar em uma igreja alguem tem projeto para me ajudar .
gostaria de montar um display com números que digitar de 3 dígitos , usar em uma igreja alguém tem protejo para me ajudar