Buenas gente.
Estaba probando piezoeléctricos con Arduino Nano, y vi un código por la web de un proyecto de batería electrónica con varios programas. El problema que tengo es que al golpear el piezoeléctrico, suenan varios tambores y platillos a la vez en el programa. Así que decidí borrar algunas cosas de la siguiente línea de código (más abajo está el código original):
unsigned char PadNote[15] = {38};
Borré los otros números porque estaban destinado a los otros tambores/platillos, así que dejé solo uno (el 38) que corresponde al redoblante, y funciona bien porque sólo suena dicho tambor.
Pero la idea es conectarle más piezoeléctricos y que suene cada tambor de manera individual y, además, suene más/menos fuerte dependiendo de la intensidad del golpe al piezoeléctrico (obvio que el piezo está protegido para no golpearlo directamente).
A continuación, detallo todo lo que tengo para dicho proyecto:
- FL Studio 20 (Sotware de edición de sonido)
- EZDrummer 2 (batería virtual)
- LoopBe1 (Cable virtual MIDI)
- Hairless MIDI Serial (Software comunicación Serial entre Arduino y el software de edición de sonido).
- Arduino Nano
- Un piezoeléctrico conectado al pin análogo A0.
Y el siguiente código para Arduino que no lo entiendo:
unsigned char PadNote[15] = { 38,35,44,55,50,45,47,0,0,0,0,0,0,0,0 }; // 38 granadero 35 bombo 44 hi hat 55 platillo 45 platillo 57 tonton MIDI
int PadCutOff[15] = { 400,400,400,400,400,400,400,1000,600,600,600,600,600,600,600 }; // Sensibilidad con respecto a los tonos
int MaxPlayTime[15] = { 30,40,10,20,10,10,10,90,90,90,90,90,90,90,90 }; // Cantidad de golpes por milisegundos
#define midichannel 0; // canal MIDI
boolean VelocityFlag = true; // velocidad del golpe
boolean activePad[15] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
int PinPlayTime[15] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
unsigned char status;
int pin = 0;
int hitavg = 0;
unsigned char PadNote[15] = { 38,35,44,55,50,45,47,0,0,0,0,0,0,0,0 }; // 38 granadero 35 bombo 44 hi hat 55 platillo 45 platillo 57 tonton MIDI
int PadCutOff[15] = { 400,400,400,400,400,400,400,1000,600,600,600,600,600,600,600 }; // Sensibilidad con respecto a los tonos
int MaxPlayTime[15] = { 30,40,10,20,10,10,10,90,90,90,90,90,90,90,90 }; // Cantidad de golpes por milisegundos
#define midichannel 0; // canal MIDI
boolean VelocityFlag = true; // velocidad del golpe
boolean activePad[15] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
int PinPlayTime[15] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
unsigned char status;
int pin = 0;
int hitavg = 0;
void setup() {
Serial.begin(57600); // connect to the serial port 115200
}
void loop() {
for (int pin = 0; pin < 7; pin++) {
hitavg = analogRead(pin);
if ((hitavg > PadCutOff[pin])) {
if ((activePad[pin] == false)) {
if (VelocityFlag == true) {
hitavg = (hitavg / 8) - 1; // Upper range
}
else {
hitavg = 127;
}
MIDI_TX(144, PadNote[pin], hitavg);
PinPlayTime[pin] = 0;
activePad[pin] = true;
}
else {
PinPlayTime[pin] = PinPlayTime[pin] + 1;
}
}
else if ((activePad[pin] == true)) {
PinPlayTime[pin] = PinPlayTime[pin] + 1;
if (PinPlayTime[pin] > MaxPlayTime[pin]) {
activePad[pin] = false;
MIDI_TX(128, PadNote[pin], 127);
}
}
}
}
void setup() {
Serial.begin(57600); // connect to the serial port 115200
}
void loop() {
for (int pin = 0; pin < 7; pin++) {
hitavg = analogRead(pin);
if ((hitavg > PadCutOff[pin])) {
if ((activePad[pin] == false)) {
if (VelocityFlag == true) {
hitavg = (hitavg / 8) - 1; // Upper range
}
else {
hitavg = 127;
}
MIDI_TX(144, PadNote[pin], hitavg);
PinPlayTime[pin] = 0;
activePad[pin] = true;
}
else {
PinPlayTime[pin] = PinPlayTime[pin] + 1;
}
}
else if ((activePad[pin] == true)) {
PinPlayTime[pin] = PinPlayTime[pin] + 1;
if (PinPlayTime[pin] > MaxPlayTime[pin]) {
activePad[pin] = false;
MIDI_TX(128, PadNote[pin], 127);
}
}
}
}
void MIDI_TX(unsigned char MESSAGE, unsigned char PITCH, unsigned char VELOCITY) {
status = MESSAGE + midichannel;
Serial.write(status);
Serial.write(PITCH);
Serial.write(VELOCITY);
}
Dejo una imagen del Hairless MIDI para que vean los valores que arroja cada vez que es golpeado el piezoeléctrico:

Muchas gracias por su tiempo y por su ayuda.
Moderador:
Editado el código con sangría adecuada para mejor lectura
Editado el título de acuerdo a punto 5 de las normas.