Skip to main content

PR脕CTICA DOS

隆MAKE SOME NOISE! Controlando un zumbador con el mando de PS4#

Descripci贸n del Proyecto#

En esta pr谩ctica lo que vamos a hacer es utilizar los joysticks del mando de PS4 para controlar el sonido emitido por un zumbador. A diferencia del resto de botones del mando, que s贸lo pueden tomar dos valores (HIGH si son oprimidos y LOW si no se tocan) los joysticks toman dos valores entre -127 y 127 (uno para la coordenada x y otro para la coordenada y), dependiendo de hacia donde se giran. Utilizaremos esos valores para determinar la nota que debe emitir el zumbador.

Pasos#

  • El montaje de esta pr谩ctica es muy sencillo. Se puede ver en la figura adjunta.

Circuito

C贸digo#

#include <PS4Controller.h>
int zumb = 15; //Pin donde conectamos el zumbador.
//Funci贸n de asignaci贸n de pines
void setUpPinModes()
{
pinMode(zumb, OUTPUT);
}
/*Funci贸n notify: Esta funci贸n es la clave de este c贸digo. Es una funci贸n de tipo callback que se
activa cada vez que hay un cambio en el estado del mando (cada vez que se oprime o se suelta un
bot贸n del mando).
Los callbacks son una t茅cnica fundamental en programaci贸n as铆ncrona y en el manejo de eventos.
Permiten que un programa responda de manera din谩mica a eventos externos o cambios de estado sin
bloquear el flujo principal de ejecuci贸n. Mientras no ocurra nada en el mando, esta funci贸n no
es llamada y el programa sigue su curso.*/
void notify()
{
int Ry = PS4.RStickY(); // Lee el valor de la coordenada "y" del joystick derecho
int tono = map(Ry,-127,127,50,4000); // mapea el valor medido, que estar谩 entre -127 y 127, al rango de valores de frecuencia del zumbador, que est谩 entre 50 y 4000
tone(zumb,tono,20); // hace sonar el zumbador
delay(10);
}
void setup()
{
setUpPinModes();
Serial.begin(115200);
PS4.attach(notify); // Asignamos el callback al objeto PS4, que es el mando de la play.
PS4.begin();
Serial.println("Ready.");
}
void loop()
{
/* Al poner el notify() en el setup, no hace falta a帽adir nada en el loop del programa. De esta manera
descargamos de trabajo a la ESP32. Si hubi茅ramos puesto aqu铆 PS4.RStickY(), estar铆a leyendo todo el
tiempo el valor del joystick, lo cual supone un exceso de intercambio de informaci贸n. Al poner el notify()
hacemos que el mando s贸lo mande informaci贸n a la ESP32 cuando hay cambios en sus estado y no todo el tiempo*/
}