/* * MECRO FLIGHT CORE - PROYECTO 02: PIANO ELECTRÓNICO
* Arquitectura: Generación de Frecuencias por Hardware (LEDC)
* Hardware: ESP32 DevKit V1 + Buzzer Pasivo
* Versión: Compatible con ESP32 Core v3.0+
*/
// --- 1. DEFINICIONES DE HARDWARE ---
const int PIN_BUZZER = 19; // Salida PWM
// Botones con resistencia Pull-Up interna (Conectar a GND)
const int BTN_DO = 4;
const int BTN_RE = 5;
const int BTN_MI = 18;
// --- 2. CONFIGURACIÓN PWM (LEDC) ---
// En la v3.0 ya no definimos canales manuales (0-15), el driver lo hace solo.
const int FREC_INICIAL = 2000;
const int RESOLUCION_BITS = 8; // 8 bits = valores de 0 a 255
// --- 3. TABLA DE FRECUENCIAS (Escala 4) ---
// Frecuencias en Hertz (Hz)
const int NOTA_DO = 261; // C4
const int NOTA_RE = 294; // D4
const int NOTA_MI = 329; // E4
void setup() {
Serial.begin(115200);
Serial.println("--- MECRO AUDIO SYSTEM: ONLINE ---");
// Configurar pines de entrada
// INPUT_PULLUP es vital: mantiene el pin en 3.3V (HIGH) cuando está suelto.
// Al presionar, se conecta a GND (LOW).
pinMode(BTN_DO, INPUT_PULLUP);
pinMode(BTN_RE, INPUT_PULLUP);
pinMode(BTN_MI, INPUT_PULLUP);
// Configurar el generador de tonos (Sintaxis v3.0+)
// ledcAttach(pin, frecuencia, resolución) reemplaza a ledcSetup + ledcAttachPin
ledcAttach(PIN_BUZZER, FREC_INICIAL, RESOLUCION_BITS);
}
void loop() {
// Lógica Inversa: LOW significa botón presionado
if (digitalRead(BTN_DO) == LOW) {
// En la v3.0, usamos el PIN como referencia, no el canal
ledcWriteTone(PIN_BUZZER, NOTA_DO);
Serial.println("Nota: DO (261 Hz)");
}
else if (digitalRead(BTN_RE) == LOW) {
ledcWriteTone(PIN_BUZZER, NOTA_RE);
Serial.println("Nota: RE (294 Hz)");
}
else if (digitalRead(BTN_MI) == LOW) {
ledcWriteTone(PIN_BUZZER, NOTA_MI);
Serial.println("Nota: MI (329 Hz)");
}
else {
// Silencio: Frecuencia 0 apaga el timer
ledcWriteTone(PIN_BUZZER, 0);
}
// Pequeño retardo para estabilidad (Debounce simple)
delay(10);
}