Problème de déchiffrage dans le Serial Moniteur...

Bonjour :slight_smile:

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<⸮:wink:

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

}

As-tu essayé avec Serial.print ?

write() envoie la donnée brute (l'octet) en binaire et non une représentation ASCII de sa valeur.
Le moniteur série lui essaye de comprendre des codes ASCII pour afficher ce qu'il reçoit...

en gros ils ne parlent pas le même langage


corrigez votre post ci dessus et rajoutez les code tags autour du code:
[code]`` [color=blue]// votre code ici[/color] ``[/code].

ça doit ressembler à cela:// votre code ici
(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement)

fireblock:
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<⸮:wink:

Les messages MIDI ne sont pas affichables dans un terminal.
Il faudrait remplacer tes Serial.write(valeur) par un Serial.print( valeur, DEC) qui t’afficherait les codes en décimal.
Si tu ne veux pas retoucher ton code il faudrait utiliser un logiciel de terminal qui ait une option qui permette d’afficher les codes reçus au lieu de les interpréter ce que le terminal de l’IDE Arduino ne sait pas faire…

fireblock:
Bonjour :slight_smile:

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<⸮:wink:

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 :

Bonjour
1- mettre ton programme entre balises code </>
2- ce que tu recupére ensuite ce sont des trames au format midi à 115200
c’est normal que ce soit “illlisible” , il faut à minima un terminal capable d’afficher en Hexa , ce que ne sait pas faire le serial terminal de l’IDE

Avec 4 fois la même solution, là je pense que @fireblock aura compris l'idée :slight_smile:

J-M-L:
Avec 4 fois la même solution, là je pense que @fireblock aura compris l'idée :slight_smile:

Il y a aussi Serial.println :wink:

Bonjour à tous :slight_smile:

Je vous remercie pour vos solutions !

J'ai essayé et en effet les "messages" sont bien plus compréhensibles. (Ca ne dépasse pas une suite de chiffres, mais au moins c'est cohérent !)

Merci également de m'avoir donné le petit conseil pour afficher le code correctement !
Je voulais le faire mais je ne savais pas comment :confused:

Je peux reprendre mon projet là où je l'avais laissé !

Encore merci :slight_smile:

Bonne journée