Mais rien ne se passe. Quand j'envoie des signaux à la borne Rx, la led témoin de l'activité de la liaison reste éteinte et rien ne se passe dans le programme (j'ai bien réglé le taux de transfert à 31250 bauds). Cette led devrait s'allumer au moindre signal qu'il reçoit, non ?
J'ai bien testé indépendamment la sortie MIDI et l'optocoupleur, tout fonctionne correctement... Est-ce que le problème pourrait venir de l'arduino ? Ou bien j'aurais oublié un détail pour que ça fontionne ?
J'espère vous pourrez m'aider et que je puisse enfin avancer
Petite précision : les LED sur arduino ms à part la LED sur le pin 13 sont raccordées au FT232 qui gère la gestion série avec le PC. Donc si pas d'interface avec le PC = pas de LED qui clignote
J'ai appliqué exactement ce qui se passe sur le premier schéma. J'envoie à partir de ma carte son (qui a une sortie MIDI) des octets à la borne Rx.
Voici un code d'exemple pour tester :
#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.
}
La led 13 est sensée s'allumer à chaque fois que l'arduino reçoit un signal de note MIDI. Or il ne se passe rien et la led témoin de Rx ne réagit pas quand j'envoie les notes.. J'en déduis donc que l'arduino ne reçoit rien...
J'ai bien pris soin de débrancher le cable USB après le transfert du programme.
B@tto : ça veut dire que led led Tx et Rx ne sont pas raccordées aux bornes 0 et 1 de la UNO ?
Sûr et certain, je l'ai testé indépendamment en mettant le collecteur du transistor sur une entrée logique de l'Arduino. Voici le schéma que j'ai fait pour tester :
Donc quand je ferme l'interrupteur, le courant passe dans la diode, donc le transistor devient passant et à ce moment là la broche de l'arduino détecte bien un 0 logique. Si je ne me trompe pas
Cet optocoupleur n'est pas le plus conseillé pour le transfert de signaux midi (vitesse limitée) mais j'ai cependant vu des gens qui s'en servaient et qui n'avaient pas de problème.
En passant,une petite question: l'optocoupleur étant cablé comme ça, le signal est normalement inversé.. Pourquoi est-ce qu'on l'inverse, au juste ?
J'ai découvert hier la bibliothèque SoftwareSerial qui permet d'utiliser n'importe quelle broche digitale pour la communication en série. Et ça fonctionne, l'arduino reçoit bien les signaux midi et je peux les exploiter. Ca prouve que mon câblage et mon optocoupleur fonctionnent correctement.
J'en conclus donc que ma broche 0 a un sérieux souci... Quelle perte de temps -_-
Enfin merci à vous pour votre aide, je reviendrai pour d'autres problèmes
kevo:
J'en conclus donc que ma broche 0 a un sérieux souci... Quelle perte de temps -_-
Si tu relis D0 et D1 et que tu envois quelque chose dans le Serial Monitor est-ce que tu as un echo ?
C'est aussi peut être un problème du aux résistances qui relie l'ATmega et le chipset série/usb.
Et qui, sous certaines conditions, forment un pont diviseur de tension avec le montage relié sur D0/D1.
kevo:
Un écho, c'est à dire ? Je dois aussi faire un Serial.read pour tester ?
Non tu envois un code bidon n'utilisant pas Serial comme "blink" par exemple puis tu envois du texte dans le serial monitor.
Avec D0 et D1 reliés tu devrais voir le texte s'afficher en retour dans le serial monitor.
J'ai bien pris soin de débrancher le cable USB après le transfert du programme.
Mais, as-tu débranché la liaison entre l'optocoupleur et l'Arduino, c'est à dire le Rx pendant le transfert du sketch ?
Si non, tu as peut-être bloqué ton entrée Rx
çà m'est arrivé, et j'ai bien galéré ! (merci Skywodd )
Amicalement
Papyduino
kevo:
Un écho, c'est à dire ? Je dois aussi faire un Serial.read pour tester ?
Non tu envois un code bidon n'utilisant pas Serial comme "blink" par exemple puis tu envois du texte dans le serial monitor.
Avec D0 et D1 reliés tu devrais voir le texte s'afficher en retour dans le serial monitor.
Je ne comprends toujours pas.. Si Rx et Tx sont reliés, comment c'est possible de s'assurer que ça fonctionne sans Serial.read ?
PapyDuino:
Bonjour
Tu dis:
J'ai bien pris soin de débrancher le cable USB après le transfert du programme.
Mais, as-tu débranché la liaison entre l'optocoupleur et l'Arduino, c'est à dire le Rx pendant le transfert du sketch ?
Si non, tu as peut-être bloqué ton entrée Rx
çà m'est arrivé, et j'ai bien galéré ! (merci Skywodd )
Amicalement
Papyduino
Oui j'ai bien pris soin de faire ça aussi, je l'ai découvert quand une erreur s'affichait à la fin du transfert, j'ai tout de suite compris que c'était ça. Merci
kevo:
Je ne comprends toujours pas.. Si Rx et Tx sont reliés, comment c'est possible de s'assurer que ça fonctionne sans Serial.read ?
En envoyant un sketch bidon sans Serial.begin() le port série de l'arduino reste muet.
Donc quand tu envois quelque chose sur le serial monitor ça te revient en echo via le fils entre Rx et Tx (sans être altéré par un possible problème du port série de l'ATmega).
Le but c'est de tester la partie usb/série marche, pour la partie série à proprement parlé de l'ATmega c'est une autre histoire.
Maintenant que tu sait que l'usb n'est pas en cause il te faut chercher plus loin du côté ATmega en lui même.