Hola The Man, yo te escribí un par de mensajes privados, pero creo que será mejor que comparta con todos lo que me pasa.
Quiero aclarar que soy de los que se animan, pero no sé casi nada de arduino ni programación, apenas me doy maña en releer los códigos e intento interpretarlos para copiar lo que necesito y supongo que funcionará.
En tu código, yo agregué líneas para conformar una batería completa, que ya tengo armada con piezos y todo, pero tengo un gran inconveniente, y es que apenas la conecto, en mi ez drummer empieza a tocar sola, haciendo una ametralladora de sonidos entre todos los cuerpos de la batería.
Al circuito, le agregué de la siguiente manera:
Así como está conectado el piezo al análogo 0 a través de una resistencia de 10K a maza y su positivo a 5V, puse a cada piezo lo mismo pero en los análogos 1, 2, 3, 4... al 7
Entiendo que todos van a masa a través de resistencia y que todos los piezos conectan su positivo a los 5V. Corrígeme si estoy equivocado por favor.
No se si el problema lo tengo en los piezoeléctricos o en el código. No instalé los botones de cambio de sonido, pues no quiero utilizarlos, pero pienso si eso influye en algo en mi problema.
Si fueras tan amable, podrías revisarlo?
Tengo 50 años y hace 20 que vendí mi batería y quiero volver a tocar, y lamentablemente no puedo comprar una acústica...
Uso una Mega 2560 y un cable midi-usb que funciona bien con otros instrumentos.
Aquí dejo el código completo, a ver si vos o alguien más es capaz de descubrir lo que me pasa.
/*
PADUINO based on MIDI note player (by Tom Igoe)
This sketch shows how to use two piezos to send Midi notes. It's able to change the note of wich one, using pushbuttons.
The circuit:
* digital pin 1 connected to MIDI jack pin 5
* MIDI jack pin 2 connected to ground
* MIDI jack pin 4 connected to +5V through 220-ohm resistor
Attach a MIDI cable to the jack, then to a MIDI synth, and play music.
PiezoA connected to analog pin 0
PiezoB connected to analog pin 1
buttonmasA connected to digital pin2
buttonmenosA connected to digital pin3
buttonmasB connected to digital pin4
buttonmenosB connected to digital pin5
created 13 Jun 2006
modified 2 Jul 2009
modified 21 may 2012 by The man with the x-ray eyes
This example code is in the public domain.
https://elcastizo-vpn/wiki/index.php/Incluir_dos_botones_de_selecci%C3%B3n_de_sonido_al_piezo_MIDI
*/
#define PIEZOATHRESHOLD 14//change this value
#define PIEZOBTHRESHOLD 14
#define PIEZOCTHRESHOLD 14
#define PIEZODTHRESHOLD 14
#define PIEZOETHRESHOLD 14
#define PIEZOFTHRESHOLD 14
#define PIEZOGTHRESHOLD 14
#define PIEZOHTHRESHOLD 14
#define piezoAPin 0
#define piezoBPin 1
#define piezoCPin 2
#define piezoDPin 3
#define piezoEPin 4
#define piezoFPin 5
#define piezoGPin 6
#define piezoHPin 7
// this constant won't change:
const int buttonmasAPin = 2;
const int buttonmenosAPin = 3;// the pin that the pushbutton is attached to
const int buttonmasBPin = 4;
const int buttonmenosBPin = 5;// the pin that the pushbutton is attached to
const int ledPin = 13; // the pin that the LED is attached to
// Variables will change:
int noteA = 38; //Redoblante MIDI note 69=A (440hz)
int noteB = 50; //TOM 1
int noteC = 45; //TOM 2
int noteD = 66; //CHANCHA
int noteE = 35; //BOMBO
int noteF = 49; //CRASH 1
int noteG = 51; //RIDE
int noteH = 46; //OPEN HI-HAT
int buttonmasAState = 0; // current state of the button
int lastButtonmasAState = 0; // previous state of the button
/// int buttonmenosPushCounter = 0; // counter for the number of button presses
int buttonmenosAState = 0; // current state of the button
int lastButtonmenosAState = 0; // previous state of the button
int buttonmasBState = 0; // current state of the button
int lastButtonmasBState = 0; // previous state of the button
/// int buttonmenosPushCounter = 0; // counter for the number of button presses
int buttonmenosBState = 0; // current state of the button
int lastButtonmenosBState = 0; // previous state of the button
int valA;
int valB;
int valC;
int valD;
int valE;
int valF;
int valG;
int valH;
void setup() {
// initialize the button pin as a input:
pinMode(buttonmasAPin, INPUT);
pinMode(buttonmenosAPin, INPUT);
pinMode(buttonmasBPin, INPUT);
pinMode(buttonmenosBPin, INPUT);
// initialize the LED as an output:
pinMode(ledPin, OUTPUT);
// initialize serial communication:
// Set MIDI baud rate:
Serial.begin(31250);
}
void loop() {
valA = analogRead(piezoAPin);
if( valA >= PIEZOATHRESHOLD ) {
while(analogRead(piezoAPin) >= PIEZOATHRESHOLD/3) {
}
noteOn(0x90,noteA,0x45);
// delay(0);
noteOn(0x90,noteA,0x40);
}
valB = analogRead(piezoBPin);
if( valB >= PIEZOBTHRESHOLD ) {
while(analogRead(piezoBPin) >= PIEZOBTHRESHOLD/3) {
}
noteOn(0x90,noteB,0x45);
// delay(0);
noteOn(0x90,noteB,0x40);//0x00 = note off, but 0x40= no velocity
}
valC = analogRead(piezoCPin);
if( valC >= PIEZOCTHRESHOLD ) {
while(analogRead(piezoCPin) >= PIEZOCTHRESHOLD/3) {
}
noteOn(0x90,noteC,0x45);
// delay(0);
noteOn(0x90,noteC,0x40);
}
valD = analogRead(piezoDPin);
if( valD >= PIEZODTHRESHOLD ) {
while(analogRead(piezoDPin) >= PIEZODTHRESHOLD/3) {
}
noteOn(0x90,noteD,0x45);
// delay(0);
noteOn(0x90,noteD,0x40);
}
valE = analogRead(piezoEPin);
if( valE >= PIEZOETHRESHOLD ) {
while(analogRead(piezoEPin) >= PIEZOETHRESHOLD/3) {
}
noteOn(0x90,noteE,0x45);
// delay(0);
noteOn(0x90,noteE,0x40);
}
valF = analogRead(piezoFPin);
if( valF >= PIEZOFTHRESHOLD ) {
while(analogRead(piezoFPin) >= PIEZOFTHRESHOLD/3) {
}
noteOn(0x90,noteF,0x45);
// delay(0);
noteOn(0x90,noteF,0x40);
}
valG = analogRead(piezoGPin);
if( valG >= PIEZOGTHRESHOLD ) {
while(analogRead(piezoGPin) >= PIEZOGTHRESHOLD/3) {
}
noteOn(0x90,noteG,0x45);
// delay(0);
noteOn(0x90,noteG,0x40);
}
valH = analogRead(piezoHPin);
if( valH >= PIEZOHTHRESHOLD ) {
while(analogRead(piezoHPin) >= PIEZOHTHRESHOLD/3) {
}
noteOn(0x90,noteH,0x45);
// delay(0);
noteOn(0x90,noteH,0x40);
}
buttonmasAState = digitalRead(buttonmasAPin);
buttonmenosAState = digitalRead(buttonmenosAPin);
buttonmasBState = digitalRead(buttonmasBPin);
buttonmenosBState = digitalRead(buttonmenosBPin);
// compare the buttonState to its previous state
if (buttonmasAState != lastButtonmasAState) {
// if the state has changed, increment the counter
if (buttonmasAState == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
if (noteA <127)
{ noteA++; }
else { noteA = 0; }
// compare the buttonState to its previous state
}
}
if (buttonmenosAState != lastButtonmenosAState) {
// if the state has changed, increment the counter
if (buttonmenosAState == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
if (noteA > 0)
{ noteA--; }
else { noteA = 127; }
}
// compare the buttonState to its previous state
// if the current state is LOW then the button wend from on to off:
}
// save the current state as the last state,
//for next time through the loop
lastButtonmasAState = buttonmasAState;
lastButtonmenosAState = buttonmenosAState;
if (buttonmasBState != lastButtonmasBState) {
if (buttonmasBState == HIGH) {
if (noteB <127)
{ noteB++; }
else { noteB = 0; }
}
}
if (buttonmenosBState != lastButtonmenosBState) {
if (buttonmenosBState == HIGH) {
if (noteB > 0)
{ noteB--; }
else { noteB = 127; }
}
}
// save the current state as the last state,
//for next time through the loop
lastButtonmasBState = buttonmasBState;
lastButtonmenosBState = buttonmenosBState;
}
// plays a MIDI note. Doesn't check to see that
// cmd is greater than 127, or that data values are less than 127:
void noteOn(int cmd, int pitch, int velocity) {
Serial.write(byte (cmd));
Serial.write(byte (pitch));
Serial.write(byte (velocity));
}
MUCHAS GRACIAS A QUIENES ME AYUDEN CON ESTA AVENTURA!