Lire RX 1

Bojour à tous,
Quelqu'un saurait-il me dire ce que je dois mettre dans ce code, pour que la carte lise RX1 ?

#include <MIDI.h>  // Add Midi Library

#define LED 13    // Arduino Board LED is on Pin 13

// Below is my function that will be called by the Midi Library
// when a MIDI NOTE ON message is received.
// It will be passed bytes for Channel, Pitch, and Velocity
void MyHandleNoteOn(byte channel, byte pitch, byte velocity) {
  digitalWrite(LED,HIGH);  //Turn LED on
  if (velocity == 0) {//A NOTE ON message with a velocity = Zero is actualy a NOTE OFF
    digitalWrite(LED,LOW);//Turn LED off
  }
}

void setup() {
  pinMode (LED, OUTPUT); // Set Arduino board pin 13 to output
  MIDI.begin(MIDI_CHANNEL_OMNI); // Initialize the Midi Library.
// OMNI sets it to listen to all channels.. MIDI.begin(2) would set it
// to respond to channel 2 notes only.
  MIDI.setHandleNoteOn(MyHandleNoteOn); // This is important!! This command
  // tells the Midi Library which function I want called when a Note ON command
  // is received. in this case it's "MyHandleNoteOn".
}

void loop() { // Main loop
  MIDI.read(); // Continually check what Midi Commands have been received.
}

D'avance merciiiii.

Carolyne:
Bojour à tous,
Quelqu'un saurait-il me dire ce que je dois mettre dans ce code, pour que la carte lise RX1 ?

quelle (exacte reference de) carte ?

quelle (exacte reference de) carte ?

C'est marqué: Mega 2560 au dos de la carte.

Carolyne:

quelle (exacte reference de) carte ?

C'est marqué: Mega 2560 au dos de la carte.

Dans le midi.h
#define USE_SERIAL_PORT Serial // Change the number (to Serial1 for example) if you want

Mince j'ai mis une lib midi dans chaque dossier (celui d'install et celui où s'enregistrent les codes; dans les documents)
bah, je change dans les deux. j'en supprimerai un pour voir lequel est appelé. Merci pour l'info.

J'ai mis: #define USE_SERIAL1_PORT dans les deux MIDI.h
Et ça comppile pas. Il me sort:
C:\Documents....\MIDI.cpp: In member function
'void MIDI_Class::begin(byte)':
A:\Documents......\MIDI.cpp:72:error:
'USE_SERIAL_PORT' was not declared in this scope

Carolyne:
J'ai mis: #define USE_SERIAL1_PORT dans les deux MIDI.h
Et ça comppile pas. Il me sort:
C:\Documents....\MIDI.cpp: In member function
'void MIDI_Class::begin(byte)':
A:\Documents......\MIDI.cpp:72:error:
'USE_SERIAL_PORT' was not declared in this scope

faut bien tout lire et plus posemment :grin:

try this

#define USE_SERIAL_PORT         Serial1      // Change the number (to Serial1 for example) if you want

// Change the number (to Serial1 for example) if you want

#define USE_SERIAL_PORT Serial1

Subtil ! Avec un "=" c'aurait été plus clair. J'y retourne :stuck_out_tongue:

Bon, ça compile, et j'ai bien des "1" sur RX1. Le problème c'est qu'ils ne font que 3,8 V. Même sans brancher sur la carte.
Et j'ai beau varier la R de sortie de l'opto entre 7K et 15K, ça ne fait pas bouger le signal.
Qu'est-ce que je peut faire pour "remonter" les creneaux à 5 V ?

Carolyne:
Bon, ça compile, et j'ai bien des "1" sur RX1. Le problème c'est qu'ils ne font que 3,8 V. Même sans brancher sur la carte.
Et j'ai beau varier la R de sortie de l'opto entre 7K et 15K, ça ne fait pas bouger le signal.
Qu'est-ce que je peut faire pour "remonter" les creneaux à 5 V ?

quel interet à vouloir faire remonter du 3.8 vers du 5 ?
les uart ne sont exploitables que par definition de niveaux logique
3.8 ou 5 là ça ne change rien sur une 2560
ton probleme est ailleurs , cherche déjà pourquoi tu n'obtient aucune transition acceptable de niveaux logiques accceptés

cherche déjà pourquoi tu n'obtient aucune transition acceptable de niveaux logiques accceptés

Pfiouuu..Si tu savais...Je passe d'interrogation en perplexité. Vois plutôt:
Jusque là, je faisait les essais avec une sorte de petit sampleur contenant des échantillons de batterie. Avec ça, j'avais un train d'impulsions à chaque envoi.
j'ai branché maintenant un clavier, et surprise !...Je n'ai plus un train à 3,8 V, mais un seul pic bien costaud. Un front raide et une décroissance immédiate (genre: mirroir droite pour gauche d'une exponentielle, ou mirroir haut/bas d'une logarithmique. Bref un truc qui redescend brusquement sans revenir de suite à zéro.)
Franchement, je ne sais plus quoi en penser.
Tu a l'air de dire que le petit prog du premier message, qui compile bien devrait "voir" les creneaux de 3,8 V.
J'enrage..Parce que ce basar, je tiens mordicus à le réaliser.

Carolyne:
j'ai branché maintenant un clavier, et surprise !...Je n'ai plus un train à 3,8 V, mais un seul pic bien costaud. Un front raide et une décroissance immédiate (genre: mirroir droite pour gauche d'une exponentielle, ou mirroir haut/bas d'une logarithmique. Bref un truc qui redescend brusquement sans revenir de suite à zéro.)
Franchement, je ne sais plus quoi en penser.

Cela fait penser à une liaison capacitive

Cela fait penser à une liaison capacitive

C'est le même cable de 50 cm (blindage à la masse de la carte) qui sert pour toutes les manips.
Avec le sampleur, au bout d'une vingtaine d'envoi, la led 13 s'est allumée, et est restée allumée.
Deux fois, non reproductible,.
Je vérifie que les impulsions sont toujours présentes sur RX1 à chaque envoi.
J'ai testé chez un copain sur un autre clavier: Pareil-> Un seul pic.

Tu n'aurais pas un problème avec le tirage au plus. Les sorties optocouplées se comportant comme des collecteurs ouverts le niveau 0 est toujours actif par contre si le tirage au plus est manquant ou défectueux le niveau 1 ne remonte pas (ou pas bien).

Carolyne:
Mince j'ai mis une lib midi dans chaque dossier (celui d'install et celui où s'enregistrent les codes; dans les documents)
bah, je change dans les deux. j'en supprimerai un pour voir lequel est appelé. Merci pour l'info.

T'es quand même un peu bordélique. Les librairies on essaye de ne pas les multiplier (sinon où est l'intérêt de faire des librairies). Et on les organise de manière intelligente.
La "règle" sur la plateforme arduino c'est:

  • les librairies livrées avec l'IDE dans le répertoire d'installation
  • les librairies ajoutées par l'utilisateur dans le répertoire librairies situé dans le répertoire sketchbook.
    Ainsi lorsque tu mets à jour ton IDE tu ne perd pas tes librairies.

si le tirage au plus est manquant ou défectueux

Mais ça, c'est dans le code..non ? (PULLUP ?)
Je suis trop occupée avec le hard, je n'ai pas encore regardé le code de près
Je vais voir de trouver un code plus simple.
Là, je vais quand même changer le câble, c'est de l'audio, genre voie Gauche voie Droite blindé par brin; j'ai fais un essai avec plus de longueur (3m), y'avait carrément plus rien au bout.
Je vais mettre du plus gros, et je vais le souder dans l'appareil.(foin des prises)

T'es quand même un peu bordélique

Si c'était qu'un peu... =(Mais je me soigne... :stuck_out_tongue:
Je range la bibliothèque comme tu dis; et je conclus que le prog va chercher la lib dans le sketchbook.

J'ai trouvé ce code qui est plus simple. J'ai ajouté des serialPrint; mais je ne sais pas comment faire pour que le prog lise RX1 et pas le port par défaut (RX0)

/*Receive Midi
By Amanda Ghassaei
July 2012
http://www.instructables.com/id/Send-and-Receive-MIDI-with-Arduino/
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
*/

byte commandByte;
byte noteByte;
byte velocityByte;

void setup(){
  Serial.begin(31250);
}

void checkMIDI(){
  do{
    if (Serial.available()){
      commandByte = Serial.read();//read first byte
	  serialPrintl(commandByte);
      noteByte = Serial.read();//read next byte
	  serialPrintl(noteByte);
      velocityByte = Serial.read();//read final byte
	  serialPrintl(velocityByte);
    }
  }
  while (Serial.available() > 2);//when at least three bytes available
}
    
void loop(){
  checkMIDI();
}

Carolyne:
J'ai trouvé ce code qui est plus simple. J'ai ajouté des serialPrint; mais je ne sais pas comment faire pour que le prog lise RX1 et pas le port par défaut (RX0)

C'est presque à desesperer 8)
exactement la meme reponse qu'hier , il suffit là encore d'un simple 1 , encore faut il qu'il soit bien et toujours parfaitement concatené --->[]

Artouste:

Carolyne:
J'ai trouvé ce code qui est plus simple. J'ai ajouté des serialPrint; mais je ne sais pas comment faire pour que le prog lise RX1 et pas le port par défaut (RX0)

C'est presque à desesperer 8)
exactement la meme reponse qu'hier , il suffit là encore d'un simple 1 , encore faut il qu'il soit bien et toujours parfaitement concatené --->[]

C'est marrant on a l'impression que personne ne clique jamais sur le lien reference en haut de la page.

Petite copie de l'article sur Serial

The Arduino Mega has three additional serial ports: Serial1 on pins 19 (RX) and 18 (TX), Serial2 on pins 17 (RX) and 16 (TX), Serial3 on pins 15 (RX) and 14 (TX).

C'est presque à desesperer 8)

Que celui qui ne doute jamais de rien me jette la première pierre.
Serial1. Certes!...Mais hélas, il y a:
Du: Serial.begin(31250);
Du: if (Serial.available()){
Plus trois:
blablabla....= Serial.read();
Dois-je mettre serial1 à chacun de ces serial's ? à un seul ? si oui, lequel, ou lesquels ? :open_mouth:
Vous voyez bien que c'est pas si évident. :stuck_out_tongue:
Il ne faut jamais désespérer, car le pire n'est jamais sûr. :wink:
EDIT: C'est bon ! j'y suis allée à la doc de ref. Et j'ai tout compris !
Vous pouvez retourner au bar :grin:

Carolyne:
Serial1. Certes!...Mais hélas, il y a:
Du: Serial.begin(31250);
Du: if (Serial.available()){
Plus trois:
blablabla....= Serial.read();
Dois-je mettre serial1 à chacun de ces serial's ? à un seul ? si oui, lequel, ou lesquels ? :open_mouth:
Vous voyez bien que c'est pas si évident. :stuck_out_tongue:
Il ne faut jamais désespérer, car le pire n'est jamais sûr. :wink:

Cerveau en berne après les fêtes??
Si j'ai bien compris, tu prends un programme qui est écrit pour une carte arduino "classique" (uno, duemillanove,...) sur laquelle il n'y a qu'un seul port série appelé Serial. Donc la substitution ne doit pas être très compliquée.

Carolyne:
Dois-je mettre serial1 à chacun de ces serial's ? à un seul ? si oui, lequel, ou lesquels ?

Serial, Serial1, 2, 3 sont des objets liaison série (au sens C++). Chacun de ses objets est unique et associé à des I/O comme indiqué dans la doc. Donc à chaque fois que l'on fait une action sur l'un de ces objets on doit indiquer auquel on accède donc il faut préciser à chaque fois Serial ou Serial1, 2, 3

Et je t'engage à relire la doc de référence. Ce n'est pas serial1 mais Serial1. Sauf si tu veux que cela ne fonctionne pas bien sur.