Bonjour
Je suis en train de réaliser un Xylophone à l’aide de capteurs Piézoélectriques.
Pour le moment, je me contente de recevoir un message Midi correct dans le Moniteur sérial mais cela est déja compliqué ! Je n’ai que des caractères totalement incompréhensibles (ex : ⸮;⸮?2⸮C=⸮D9⸮FD⸮G;⸮HG⸮9H⸮:C⸮=2⸮@D⸮AC⸮B>⸮E<⸮
J’ai déja essayé de changer la valeur des bauds (dans le code et dans le moniteur bien évidemment).
Pour info, j’ai récupéré le code sur un site comportant un tuto bien détaillé pour réaliser ce xylophone.
Si quelqu’un voit une solution à mon problème, je lui en serait très reconnaissant !
Merci d’avance !
Voici le code complet :
//*******************************************************************************************************************
// User settable variables
//*******************************************************************************************************************
int pinRead;
int pinAssignments[12] ={
'A0','A1','A2','A3','A4','A5','A6','A7','A8','A9','A10','A11'};
byte PadNote[16] = {
57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72}; // MIDI notes from 0 to 127 (Mid C = 60)
int PadCutOff[16] =
{
400,400,200,800,400,400,400,400,400,400,400,400,400,400,400,400}; // Minimum Analog value to cause a drum hit
int MaxPlayTime[16] = {
90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90}; // Cycles before a 2nd hit is allowed
#define midichannel 1; // MIDI channel from 0 to 15 (+1 in "real world")
boolean VelocityFlag = true; // Velocity ON (true) or OFF (false)
//*******************************************************************************************************************
// Internal Use Variables
//*******************************************************************************************************************
boolean activePad[16] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // Array of flags of pad currently playing
int PinPlayTime[16] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // Counter since pad started to play
byte status1;
int pin = 0;
int hitavg = 0;
//*******************************************************************************************************************
// Setup
//*******************************************************************************************************************
void setup()
{
Serial.begin(115200); // connect to the serial port 115200
}
//*******************************************************************************************************************
// Main Program
//*******************************************************************************************************************
void loop()
{
for(int pin=0; pin < 16; pin++) //
{
//int pin = 3;
// for (pinRead=0; pinRead < 16, pin++){
hitavg = analogRead(pinAssignments[pin]);
//Serial.println(hitavg);
// read the input pin
if((hitavg > PadCutOff[pin]))
{
if((activePad[pin] == false))
{
if(VelocityFlag == true)
{
// hitavg = 127 / ((1023 - PadCutOff[pin]) / (hitavg - PadCutOff[pin])); // With full range (Too sensitive ?)
hitavg = (hitavg / 8) -1 ; // Upper range
}
else
{
hitavg = 127;
}
MIDI_TX(144,PadNote[pin],hitavg); //note on
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(144,PadNote[pin],0);
}
}
}
}
//*******************************************************************************************************************
// Transmit MIDI Message
//*******************************************************************************************************************
void MIDI_TX(byte MESSAGE, byte PITCH, byte VELOCITY)
{
status1 = MESSAGE + midichannel;
Serial.write(status1); // Remplacé par Serial.print
Serial.write(PITCH); // Remplacé par Serial.print
Serial.write(VELOCITY); // Remplacé par Serial.print
}