Bonjour à tous !
Je suis actuellement en train de travailler sur un petit contrôleur midi. Ce n'est pas le premier ni le plus complexe que j'ai fait, mais aujourd'hui je bute sur un problème que je n'arrive pas à comprendre... et donc à résoudre. Je sens que le problème est tout bête et se situe entre l'écran et le clavier, mais après 3 jours à faire des tests, je crois que j'ai besoin d'aide
Le projet :
Tout bêtement, un contrôleur midi qui envoie un message à l'ordinateur quand un bouton est appuyé / un potentiomètre tourné.
Je précise que j'utilise la bibliothèque Midi
Le montage actuel :
Deux interrupteurs (devant envoyer les notes on / note off Bb et B) et un potentiomètre (ControlChange 1). Une petite photo ici pour se rendre compte (on ne se moque pas c'est encore très moche, les boites seront refaite et le projet sans doutes en wireless)
Le problème :
Le premier bouton (broche n°5 de l'arduino devant envoyer la note Bb) ne fonctionne pas.
Les tests réalisés et les conclusions que j'en tire :
Si je branche le bouton fantôme sur la branche 6 (à la place de l'autre), ça fonctionne --> ce n'est donc pas un problème électrique sur le bouton (j'ai aussi vérifié la continuité du courant est c'est ok)
Si je supprime la vérification du potentiomètre, les deux boutons fonctionnent --> le problème viendrait donc du recours à cette fonction ?
Si je redescends le nombre de bouton (MAX_BOUTONS dans le code) à 1, il fonctionne à nouveau et je reçois ma note Bb --> moi ça ne m'aide pas mais si vous ça peut vous aider
Voilà de mon côté, je pense donc que le problème se situe dans ma fonction de potentiomètre, mais je ne vois pas vraiment où. Je vous post donc le code général puis celui du potar :
Le code général :
#include "TESTBOUTON.h"
#include "TESTPOT.h"
#define MAX_BOUTONS 2
#define MAX_POTS 1
int etatBouton[MAX_BOUTONS]; //Je crée le tableau de flags d'état de mes boutons
int pinBouton[MAX_BOUTONS]; //Je crée le Tableau des pin de branchement de mes boutons
int valPot[MAX_POTS];
int pinPot[MAX_POTS];
MIDI_CREATE_DEFAULT_INSTANCE();
void setup()
{
//Initialisation MIDI
MIDI.begin();
//Initialisation des boutons
for (int i = 0 ; i < MAX_BOUTONS ; i++)
{
etatBouton[i] = LOW; //J'initialise tous mes boutons en HIGH
pinBouton[i] = 5+i; //J'initialise toutes mes pin à partir de la broche 5
pinMode(pinBouton[i], INPUT); //J'initialise toutes mes pins de bouton comme des entrées
}
//Initialisation des Potentiometres
for (int i = 0 ; i < MAX_BOUTONS ; i++)
{
pinPot[i] = A0+i; //J'initialise toutes mes pins de potentiomètre à partir de la broche A0
pinMode(pinBouton[i], INPUT); //J'initialise toutes mes pins de potentiomètre comme des entrées
}
}
void loop()
{
MIDI_CREATE_DEFAULT_INSTANCE();
//je vérifie les boutons et j'envoie le message
for (int i = 0 ; i < MAX_BOUTONS ; i++)
{
etatBouton[i] = testbouton(etatBouton[i], pinBouton[i], pitchB0b+i);
}
//Je vérifie l'état des potentiomètres et j'envoie le message
for (int i = 0; i < MAX_POTS; i++)
{
valPot[i] = testpot(valPot[i], pinPot[i], 1+i);
}
delay(7);
}
La fonction "testpot" :
#include "TESTPOT.h"
int testpot(int valPrecedentPot, int pinPot, int numCC)
{
MIDI_CREATE_DEFAULT_INSTANCE();
int valActuelPot = analogRead(pinPot) / 8;
if (valPrecedentPot != valActuelPot)
{
MIDI.sendControlChange(numCC, valActuelPot, 5);
}
return valActuelPot;
}
J'ai bien lu tous les topics avant de poster mais comme c'est mon premier post depuis (hormis présentation), n'hésitez pas à me dire si j'ai fait une bêtise sur la forme (balise, topic, etc.), je modifierai ça au plus vite !