Modérateur : darcmorcel
Tu as tout à fait raison. Si ton clavier à deux contacts par touche alors il peut gérer la vélocité.pfeuh a écrit :J'aimerais construire un clavier midi à base d'arduino et de récupération d'un synthé ou arrangeur Yamaha ou Casio que l'on trouve à 20 euros sur le bon coin. Je n'ai rien trouvé sur le net à part quelques expériences monophoniques.
Ce que je cherche en particulier, c'est le fonctionnement d'un clavier midi polyphonique, je pense qu'ils sont tous identiques dans le principe. J'ai cru comprendre qu'il y a deux bus, un pour le début d'appui et l'autre pour la fin d'appui, la vélocité étant calculée en fonction du temps mis de l'un à l'autre. Il y a encore apparement plein d'autre choses, donc les deux after touch qui ne sont pas en tout ou rien, bref... En fait un seul bus me suffirait, je ne désire pas gérer la vélocité.Sur comment est connecté le clavier lui même, j'ai une vague idée de lignes/colonnes, mais sans plus.
Et le portamento aussi ?Également, je vais bientôt mettre mon site à jour avec un clavier midi ayant des zones de split, des layers et molette, pitch, aftertouch, etc.
patroche a écrit :Et le portamento aussi ?
Le repérage ne va pas être trop dur je pense.Portamento a écrit :Si tu fais de la récupération, le plus dur sera de repérer correctement tous les points de contacts.
J'ai aussi l'animation d'un WaveTrigger dans mes projets à moyen/long terme. C'est comme cela que j'envisage la chose.Salmacis a écrit :Apres pourquoi se retaper tous le décodage du clavier si tu peux trouver un petit clavier midi a intégrer directement ? Du coup il te manquerais uniquement l'optocouplage pour l'entrée midi et c'est tout.
Les encodeurs qui incrémentent ou dérémentent le numéro du son nécessitent un affichage, le rotacteur est visuel, pas besoin d'affichage, à l'ancienne. J'aurai carément préféré un radiobouton comme sur les spinet Hammond ou les vieux autoradio, mais ne rêvons pas. Les entrées analogiques ont besoin d'une milliseconde pour la conversion, j'évite autant que possible.Salmacis a écrit :Effectivement tu peux commander directement les sons par la sélection du canal midi (avec un encoder donc 2 GPIO,peut être voir avec une entrée analogique donc 1 GPIO)
C'est juste pour m'occuper, le plaisir du DIY quoi, je suis codeur à la retraite et le chronophage ne me rebute pas. Tant que c'est que du soft et que mes deux mains gauches ne sont pas concernées...Salmacis a écrit :Apres pourquoi se retaper tous le décodage du clavier si tu peux trouver un petit clavier midi a intégrer directement ? Du coup il te manquerais uniquement l'optocouplage pour l'entrée midi et c'est tout.
Touts mes essais se sont soldés par des échecs. Je n'avais que des encodeurs chinois. J'ai même exceptionnellement essayé de rajouter des capas entre les 2 gpio et le 0V, rien à faire, des rebonds comme je n'en avais jamais vu.Salmacis a écrit :avec un encoder donc 2 GPIO
Ah, ben voilà du chronophage!Salmacis a écrit :la bibliothèque fournie chez sparkfun https://github.com/robertsonics/WAV-Tri ... al-Library...c'est un peu plus compliqué mais nettement plus flexible.
Revois ton code. Même avec des encodeurs pourris ça doit marcher, surtout si tu as mis des petites capas de 100nF avec la petite résistance de 10k qui va bien.Touts mes essais se sont soldés par des échecs. Je n'avais que des encodeurs chinois. J'ai même exceptionnellement essayé de rajouter des capas entre les 2 gpio et le 0V, rien à faire, des rebonds comme je n'en avais jamais vu.
Pour le code, j'ai appliqué le principe de base, une interruption sur front descendant d'une des 2 voies et on regarde l'état de l'autre pour savoir si on monte ou si on descend. Euh... Fallait mettre une résistance aussi? Pour l'anti rebond résistance-capa, je vais demander à google plutôt que te faire perdre ton temps. J'ai trouvé celui-là, c'est bon?ACX a écrit :Revois ton code. Même avec des encodeurs pourris ça doit marcher, surtout si tu as mis des petites capas de 100nF avec la petite résistance de 10k qui va bien.
C'est hors de ma portée. Sur une plaque d'essai à la limite, mais il faudra le faire en vrai plus tard avec de la soudure, j'en suis incapable.ACX a écrit :Tu n'as pas besoin de beaucoup de GPIO si tu utilises des multiplexeurs. Prend des analogiques commes les 74HC4067 qui sont plus rapides.
Effectivement, j'ai revu mon code à la faveur d'une visite à un fablab (d'ailleurs, je m'y suis inscrit). En fait ce que je croyais faire sur front descendant, je le faisais sur front... Très mauvaise idée, car du coup l'opération faite sur front descendant était immédiatement annulée par celle faite sur front montant.ACX a écrit :Revois ton code. Même avec des encodeurs pourris ça doit marcher
Code : Tout sélectionner
int Encoder(int MinEnc,int MaxEnc,int InitEnc,int Increment){
static boolean MemoEncA,MemoEncB;
int Valeur=constrain(InitEnc, MinEnc, MaxEnc);
boolean EncA=digitalRead(ENC_A);
boolean EncB=digitalRead(ENC_B);
int SensEnco = 0;
if(EncA != MemoEncA || EncB != MemoEncB) { // Ca a bougé
if (MemoEncA == EncB && MemoEncB != EncA) { SensEnco = 1;}
else if (MemoEncB == EncA && MemoEncA != EncB) { SensEnco = -1;}
MemoEncA = EncA;
MemoEncB = EncB;
if (EncA==EncB){Valeur+=SensEnco*Increment;}
}
return constrain(Valeur, MinEnc, MaxEnc);
}