#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define PARLANTE_PIN 8
#define NOTA_DO1 131
#define NOTA_RE 147
#define NOTA_MI 165
#define NOTA_FA 175
#define NOTA_SOL 196
#define NOTA_LA 220
#define NOTA_SI 247
#define NOTA_DO2 262
const int BotonPins[] = { 12, 11, 10, 9, 7, 6, 5, 4 };
const int BotonTonos[] = {
NOTA_DO1, NOTA_RE, NOTA_MI, NOTA_FA,
NOTA_SOL, NOTA_LA, NOTA_SI, NOTA_DO2
};
const int numTonos = 8;
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
lcd.init();
lcd.backlight();
lcd.print("TECLADO MUSICAL");
for (int i = 0; i < numTonos; i++) {
pinMode(BotonPins[i], INPUT_PULLUP);
}
pinMode(PARLANTE_PIN, OUTPUT);
}
void loop() {
// Ubicamos el cursor en la primera posición(columna:0) de la segunda línea(fila:1)
lcd.setCursor(0, 1);
int eleg = 0;
for (int i = 0; i < numTonos; i++) {
if (digitalRead(BotonPins[i]) == LOW) {
eleg = BotonTonos[i];
}
}
if (eleg) {
tone(PARLANTE_PIN, eleg);
// Ubicamos el cursor en la primera posición(columna:0) de la segunda línea(fila:1)
lcd.setCursor(0, 1);
// Escribimos el número de segundos trascurridos
lcd.print("Nota: " );
switch(eleg){
case NOTA_DO1:
lcd.print("DO");
break;
case NOTA_RE:
lcd.print("RE");
break;
case NOTA_MI:
lcd.print("MI");
break;
case NOTA_FA:
lcd.print("FA");
break;
case NOTA_SOL:
lcd.print("SOL");
break;
case NOTA_LA:
lcd.print("LA");
break;
case NOTA_SI:
lcd.print("SI");
break;
case NOTA_DO2:
lcd.print("DO");
break;
}
} else {
noTone(PARLANTE_PIN);
lcd.print("Nota: " );
}
}