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 :

Contrôleur MIDI pour ordinateur


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Août 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Août 2018
    Messages : 11
    Par défaut Contrôleur MIDI pour ordinateur
    bonjour, j'ai le projet de créer un contrôleur midi avec un arduino mega, plusieurs boutons, potentiomètre.
    pour les potentioètre aucun problème à les faire fonctionner mais pour les boutons c'est un enfer.

    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
    int bouton1 = LOW;
    int boutonALT1 = LOW;
    int bouton2 = LOW;
    int boutonALT2 = LOW;
     
    void setup(){
      Serial.begin(115200);
      pinMode(22, INPUT);
      pinMode(23, INPUT);
     
    }
     
    void loop(){
      bouton1 = digitalRead(22);
          if(bouton1 == HIGH &&boutonALT1 == LOW) {
            Serial.write(144);
            Serial.write(17);
            Serial.write(127);
            boutonALT1 = bouton1;
      }
        if(bouton1 == LOW && boutonALT1 == HIGH){
          Serial.write(144);
          Serial.write(17);
          Serial.write(0);
          boutonALT1 = bouton1;
      }
     
        bouton2 = digitalRead(23);
          if(bouton2 == HIGH &&boutonALT2 == LOW) {
            Serial.write(145);
            Serial.write(18);
            Serial.write(127);
            boutonALT2 = bouton2;
      }
        if(bouton2 == LOW && boutonALT2 == HIGH){
          Serial.write(145);
          Serial.write(18);
          Serial.write(0);
          boutonALT2 = bouton2;
      }
    }
    quand j'exécute le code a l'aide du logiciel hairless midi et que j'appuie sur le bouton rien ne se passe.

  2. #2
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour Jackie 753

    As-tu des résistances de polarisation sur tes entrées boutons?
    Si non, initialises tes boutons ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      pinMode(22, INPUT_PULLUP);
      pinMode(23, INPUT_PULLUP);
    Ainsi les boutons donnent LOW quand ils sont pressés.

    Cordialement
    jpbbricole

  3. #3
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Août 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Août 2018
    Messages : 11
    Par défaut
    merci de ta réponse jpbbricole.effectivement je n'i pas mi de resistence sur les boutons mais même si j'initialises les bouton en pullup rien ne se passe

    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
    int bouton1 = LOW;
    int boutonALT1 = LOW;
    int bouton2 = LOW;
    int boutonALT2 = LOW;
     
    void setup(){
      Serial.begin(115200);
      pinMode(22, INPUT_PULLUP);
      pinMode(23, INPUT_PULLUP);
     
    }
     
    void loop(){
      bouton1 = digitalRead(22);
          if(bouton1 == HIGH &&boutonALT1 == LOW) {
            Serial.write(144);
            Serial.write(17);
            Serial.write(127);
            boutonALT1 = bouton1;
      }
        if(bouton1 == LOW && boutonALT1 == HIGH){
          Serial.write(144);
          Serial.write(17);
          Serial.write(0);
          boutonALT1 = bouton1;
      }
     
        bouton2 = digitalRead(23);
          if(bouton2 == HIGH &&boutonALT2 == LOW) {
            Serial.write(145);
            Serial.write(18);
            Serial.write(127);
            boutonALT2 = bouton2;
      }
        if(bouton2 == LOW && boutonALT2 == HIGH){
          Serial.write(145);
          Serial.write(18);
          Serial.write(0);
          boutonALT2 = bouton2;
      }
    }

  4. #4
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Bonjour,

    tout d'abord, j'ajouterais des délais (fonction delay()) de 100ms pour prendre en compte les rebonds sur les boutons. Ensuite, que cherches-tu à envoyer à ton contrôleur ? Que représentent 144, 17, 127 ou encore 144, 17, 0 etc. ? Des codes ASCII ? Des entiers ?

  5. #5
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Août 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Août 2018
    Messages : 11
    Par défaut
    pour le 144, 17, 127 permet de dire au logiciel que le bouton 17 est activé a une valeur de 127 et pour 144, 17, 0 permet de dire que le bouton 17 a une valeur de 0. même avec le delay rien de fonctionne.

  6. #6
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour jackie 753

    J'ai essayé ton programme, la "mécanique" fonctionne très bien, à mon avis, ton problème est "plus loin", réception MIDI, essaies de changer la vitesse du port.
    Par défaut, le port série est 8 bits sans parité et 1 stop (8N1), contrôle avec le récepteur.

    Comme je n'ai pas d'installation MIDI, je l'ai légèrement modifié pour l'essai.
    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
    #define bouton1Pin 22
    int bouton1 = LOW;
    int boutonALT1 = LOW;
     
    #define bouton2Pin 23
    int bouton2 = LOW;
    int boutonALT2 = LOW;
     
    void setup(){
    	Serial.begin(115200);
    	pinMode(bouton1Pin, INPUT_PULLUP);
    	pinMode(bouton2Pin, INPUT_PULLUP);
     
    }
     
    void loop(){
    	bouton1 = digitalRead(bouton1Pin);
    	if(bouton1 == HIGH && boutonALT1 == LOW) {
    		Serial.println("Bouton1 HIGH");
    		//Serial.write(144);
    		//Serial.write(17);
    		//Serial.write(127);
    		boutonALT1 = bouton1;
    	}
    	if(bouton1 == LOW && boutonALT1 == HIGH){
    		Serial.println("Bouton1 LOW");
    		//Serial.write(144);
    		//Serial.write(17);
    		//Serial.write(0);
    		boutonALT1 = bouton1;
    	}
     
    	bouton2 = digitalRead(bouton2Pin);
    	if(bouton2 == HIGH && boutonALT2 == LOW) {
    		Serial.println("Bouton2 HIGH");
    		//Serial.write(145);
    		//Serial.write(18);
    		//Serial.write(127);
    		boutonALT2 = bouton2;
    	}
    	if(bouton2 == LOW && boutonALT2 == HIGH){
    		Serial.println("Bouton2 LOW");
    		//Serial.write(145);
    		//Serial.write(18);
    		//Serial.write(0);
    		boutonALT2 = bouton2;
    	}
    }
    Cordialement
    jpbbricole

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/03/2025, 09h32
  2. Avis pour ordinateur portable
    Par Azharis dans le forum Ordinateurs
    Réponses: 1
    Dernier message: 20/10/2009, 15h32
  3. HP propose un service de suivi à la trace pour ordinateurs portables
    Par Gordon Fowler dans le forum Actualités
    Réponses: 7
    Dernier message: 01/09/2009, 16h47
  4. Conseil d'achat pour ordinateur portable
    Par Senaku-seishin dans le forum Ordinateurs
    Réponses: 2
    Dernier message: 18/08/2008, 20h27
  5. [FreeBSD] Installation pour ordinateur de bureau
    Par tonton fred dans le forum BSD
    Réponses: 2
    Dernier message: 22/08/2007, 09h13

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