Piano en ESP32

Piano en ESP32

Ahora que ya sabemos usar el zumbador y el teclado matricial 4×4, ahora vamos a crear un piano en ESP32, seguiremos estos pasos:

  • Al presionar una tecla numérica la vamos a almacenar.
  • Al presionar una tecla letra vamos a convertir el string de los números almacenados en número y lo guardamos en un array.
  • Al presionar la tecla * hacemos un ciclo con el total de números almacenados y emitimos un sonido desde el zumbador.

Requerimientos:

  • ESP32.
  • Zumbador.
  • Teclado matricial de 4x4.
  • Cables

Conexiones:

TecladoESP32
C4D15
C3D2
C2D4
C1D16
R4D17
R3D5
R2D18
R1D19
  • Conectamos la tierra (GND) del ESP32 al cable negro del zumbador.
  • Conectamos el pin D21 del ESP32 al cable rojo del zumbador.
Diagrama del teclado matricial 4×4
Diagrama de Piano en ESP32

Código de un Piano en ESP32

/*
Piano en ESP32
*/
// importa libreria Keypad
#include <Keypad.h>
// define numero de filas
const uint8_t ROWS = 4;
// define numero de columnas
const uint8_t COLS = 4;
// define la distribucion de teclas
char keys[ROWS][COLS] = {
  { '1', '2', '3', 'A' },
  { '4', '5', '6', 'B' },
  { '7', '8', '9', 'C' },
  { '*', '0', '#', 'D' }
};
// pines correspondientes a las filas
uint8_t colPins[COLS] = { 16, 4, 2, 15 };
// pines correspondientes a las columnas
uint8_t rowPins[ROWS] = { 19, 18, 5, 17 };
// crea objeto con los prametros creados previamente
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
//Declaramos el pin del zumbador
int pinZumbador=21;
//Inicializamos las variables de la salida pwm
int canal=0, frec=2000, resolucion=8;
//String que almacenara los numero ingresados y que despues seran convertidos a numero
String numeroString="";
//Variable que almacena hasta 50 notas
int notas[50];
//Contamos la cantidad de notas que se van ingresando
int contNotas=0;
void setup() {
  Serial.begin(115200);
  //Inicializamos la salida del pwm
  ledcSetup(canal,frec,resolucion);
  //Declaramos pin donde se conecta el zumbador
  ledcAttachPin(pinZumbador, 0);

}

void loop() {
  // obtiene tecla presionada y asigna a variable
  char key = keypad.getKey();
  // comprueba que se haya presionado una tecla
  if (key) {
    //Si se preciona un numero
    if(key>='0' && key<='9'){
      //Concatenamos el numero cada nuevo numero que se va ingresando
      numeroString=numeroString+key;
      //Emitimos un bip
      ledcWriteTone(canal, 1000);
      Serial.println(key);
    }
    //Si se preciona A B C D o #
    else if( key=='A' ||  key=='B' ||  key=='C' ||  key=='D' ||  key=='#' ){
      //Convertimos el numero ingresado a un numero
      notas[contNotas]=numeroString.toInt();
      //Borramos el contenido del numero string
      numeroString="";
      //Emitimos el sonido de la nota almacenada
      ledcWriteTone(canal, notas[contNotas]);
      Serial.println(notas[contNotas]);
      //Incrementamos el contador de las notas
      contNotas++;
    }
    //Si se preciona el *
    else if(key=='*'){
      //Creamos un ciclo de 0 hasta la cantidad de notas creadas
      for(int i=0;i<contNotas;i++){
        //Emitimos el sonido de la nota del arreglo
        ledcWriteTone(canal, notas[i]);
        Serial.println(notas[i]);
        delay(1000);
      }
    }
    // envia a monitor serial la tecla presionada
    Serial.println(key);
  }
  else{
    //Si no se preciona ningun tecla no emitimos ningun sonido
    ledcWriteTone(canal, 0);
  }
  delay(10);
}

Código y diagrama: https://wokwi.com/projects/344586386216583764

Piano en ESP32

🎦 Este curso: https://www.youtube.com/watch?v=VuJkqL2Ys3Y&list=PLCTD_CpMeEKTvjzabAvLGHakg-ql6t0q6&ab_channel=ProgramadorNovato

🎦 Curso de Arduino: https://www.youtube.com/watch?v=oGinJt9aALc&list=PLCTD_CpMeEKSqw3Nh7rA9aXUAzbPIPkdv&ab_channel=ProgramadorNovato

🎦 [CURSO] C++ DE 0 A HEROE: https://www.youtube.com/watch?v=APN8aCyPvww&list=PLCTD_CpMeEKTofxs7iottRxJ5YPM7BOc

Salir de la versión móvil

Ads Blocker Detected!!!

En Programador Novato vivimos de los anuncios, hemos detectado que está utilizando extensiones para bloquear anuncios. Ayudanos deshabilitando tu bloqueador de anuncios. :)