IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Probleme de comunication MIDI-Serial


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2016
    Messages : 2
    Par défaut Probleme de comunication MIDI-Serial
    Tout d'abord Salut tout le monde

    J ai un projet asser ambitieux (je bloque déja au stade embryonnaire).Un controleur USB comprenant 3 module, Une boite a rythme, Une parti mixage 8 voie, Une batterie de codeur rotatif.Le tout piloté par un arduino pour le protypage et ensuite par des micro controleur ARM

    Je débute au temps en programmation qu'en électronique donc je compte vraiment faire pas a pas.

    J'ai donc commencer basiquement a essayer de faire communiquer un codeur rotatif via arduino au port serie grace au logiciel Hairless-midiserial.

    Le problème est que le programme m indique 1 byte manquant a mon signale midi.

    J ai potasser sur le web (la magie d internet) J ai crue comprendre q un signal midi comprenais 4 byte. J ai essayer pas mal de bidouille en prenant des ligne par ci par la mais je n ai pas compris réellement le principe (de plus ça marche pas).

    Si joint le code



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    #include <MIDI.h>
    #include <midi_Defs.h>
    #include <midi_Message.h>
    #include <midi_Namespace.h>
    #include <midi_Settings.h>
     
    /**********************************************************
     
    Definition des pins des codeur
     
     *********************************************************/
    #define PinA 2    //  1ere sortie du codeur
    #define PinB 3    //  2e sortie du codeur
    #define Pinbouton 12   //  entrée du bouton
    /**********************************************************
     
    Definition des variables
     
     *********************************************************/
    int arrondi (float nombre){ return nombre + 0.5;};
     
    /**********************************************************
     
    Definition des variable et fonctions codeur
     
     *********************************************************/
     
     //encodeur1
    int encoder1 = 0;
    int encoder1Last = LOW;
    int encoder1n = 0;
     
    void encodeur1(){
      if ((encoder1Last == LOW) && (digitalRead(2) == HIGH)) {
         if (digitalRead(3) == LOW) {
           encoder1n --;
           encoder1n --;
           encoder1n --;
           encoder1n --;
           encoder1n --;
           encoder1n --;
           encoder1n --;
           encoder1n --;
           encoder1n --;
     
       } 
     
         else {
           encoder1n ++;
           encoder1n ++;
           encoder1n ++;
           encoder1n ++;
           encoder1n ++;
           encoder1n ++;
           encoder1n ++;
           encoder1n ++;
           encoder1n ++;
    }} 
     
      encoder1Last = digitalRead(2);
      encoder1     = arrondi(encoder1n * 2.55);
     
     
       if (encoder1n < 0)   {encoder1n = 0;}
       if (encoder1n > 100) {encoder1n = 100;}
       if (encoder1 < 0)    {encoder1 = 0;}
       if (encoder1 > 255)  {encoder1 = 100;}
     
       }
     
     
     
    /**********************************************************
     
    Déclaration des fonctions
     
     *********************************************************/
     
     
    void MIDI_TX(unsigned char MESSAGE, unsigned char DONNEE1, unsigned char DONNEE2) //fonction d'envoi du message MIDI
    {
     Serial.write(MESSAGE); //envoi de l'octet de message sur le port série
     Serial.write(DONNEE1); //envoi de l'octet de donnée 1 sur le port série
     Serial.write(DONNEE2); //envoi de l'octet de donnée 2 sur le port série
    }
     
    void setup() {
    MIDI_CREATE_DEFAULT_INSTANCE();
    Serial.begin(9600);
    encoder1 = 0;
    }
     
     
    void loop() {
     
      // Lecture potentiometre
      encodeur1();
     
      Serial.println(encoder1);
      MIDI_TX(176,77, encoder1);
    }

    Je fais apelle a vous au grand gourou des chiffres

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Mes premières remarques :
    1. Si tu utilises la bibliothèque MIDI, tu n'as pas besoin d'inclure autre chose que MIDI.h ; les autres fichiers seront incorporés automatiquement.
    2. Inutile de répéter 9 fois encoder1n --; : encoder1n -= 9; sera à la fois plus efficace et plus lisible.
    3. La déclaration MIDI_CREATE_DEFAULT_INSTANCE; doit être effectuée en dehors de la fonction Setup() pour que l'instance créée soit visible à l'intérieur de la fonction Loop().
    4. La bibliothèque MIDI propose tout un tas de méthodes pour envoyer un message MIDI correctement mis en forme en fonction de l'action demandée. Envoyer une série d'octets directement au port série permet uniquement de se dispenser des contrôles effectués dans la bibliothèque et augmenter les risques d'avoir un message mal formé.
    5. Pour utiliser le port USB comme un port MIDI, il faut modifier d'autres paramètres et il me semble aussi le bootloader. Si tu utilises le port série comme un port MIDI standard, c'est à la vitesse de 31250 bauds qu'il faudrait l'initialiser, ce que fait d'ailleurs l'instanciation de la classe MIDI.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2016
    Messages : 2
    Par défaut
    Je te remercie de ta réponse

    et de la simplification des incrémentation

    Je n ai pas le temps tout suite pour réécrire un code décent

    Mais je te tiens au courent

Discussions similaires

  1. Probleme avec le XML serializer.
    Par FadeOut dans le forum C#
    Réponses: 4
    Dernier message: 26/01/2009, 13h19
  2. Probleme de comunication pere fils
    Par Flash_Over dans le forum Linux
    Réponses: 1
    Dernier message: 12/11/2007, 18h48
  3. [vb.net] Probleme de serialization
    Par Balbo dans le forum VB.NET
    Réponses: 17
    Dernier message: 03/10/2006, 11h58
  4. probleme avec type serial
    Par donny dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 21/07/2005, 08h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo