/****************************************************************************************/
/****************************************************************************************/
/***** PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ *****/
/***** FACULTAD DE CIENCIAS E INGENIERÍA *****/
/***** SISTEMAS DIGITALES B *****/
/****************************************************************************************/
/***** Tema: PWM *****/
/***** Proyecto: PWM_Speaker *****/
/****************************************************************************************/
/***** EvalBoard: ESP32 S3 DevKitC C1 *****/
/***** Autor: Rolando Sánchez Ponce *****/
/***** Fecha: Octubre 2024 *****/
/****************************************************************************************/
/***** Enunciado: *****/
/***** Tenemos conectado al módulo ESP32-S3 un parlante y siete pulsadores. *****/
/***** El programa controla el sonido emitido por el parlante mediante los pulsado- *****/
/***** res a modo de órgano electrónico, donde por medio de cada pulsador se emite *****/
/***** una nota de la cuarta octva. *****/
/****************************************************************************************/
/****************************************************************************************/
// Difinición para pines
#define pinSPK 40
// Definición de frecuencias en Hz para cada nota
#define DO4 262
#define RE4 294
#define MI4 330
#define FA4 349
#define SOL4 392
#define LA4 440
#define SI4 494
// Declaración de arreglos y variables
int pinPUL[7] = {16, 17, 18, 8, 3, 46, 9};
int notas4[7] = {DO4, RE4, MI4, FA4, SOL4, LA4, SI4};
int i;
void setup() {
// Configuramos los pines de los pulsadores
for(i=0; i<7; i++){
pinMode(pinPUL[i], INPUT_PULLUP);
}
// Inicializamos el parlante en silencio
analogWrite(pinSPK, 0);
}
void loop() {
for(i=0; i<7; i++){
// Si se presiona alguno de los siete pulsadores
if(digitalRead(pinPUL[i]) == LOW){
delay(5);
// Actualizamos la frecuencia PWM
analogWriteFrequency(pinSPK, notas4[i]);
// Ciclo de trabajo de 50%
analogWrite(pinSPK, 128);
while(digitalRead(pinPUL[i])==LOW);
delay(5);
// Ciclo de trabajo 0% al soltar el pulsador
analogWrite(pinSPK, 0);
}
}
delay(10); // this speeds up the simulation
}