Jump to content

comment configurer ses boutons/leds


djahan
 Share

Recommended Posts

bonjour a tous

Je suis sur la fabrication d'un midibox lc.

apres un problemes avec mes boutons,sur les conseils de certaines personnes du forum(merci encore),je suis donc reparti de zero et j'ai acheté les Multimec - 3FTL6 (bien mieux que bouses que j'avais avant)

je procede etapes par etapes afin d'eviter les mauvaises surprises,donc pour le momment,il n'y a que le core 

1 din avec les boutons reccord mute solo et select relies dessus,1dout avec les led correspondantes a ces boutons.

le tout fonctionne tres bien sauf un petit detail ....

quand j'appuie sur un bouton,la led corrspondante s'allume mais des que je relache la pression,celle ci s'eteind.

J'ai lu sur le forum qu'il fallait configurer mes boutons pour qu'a la premiere pression ils soient "on" et a la seconde ils soient "off"

Mon probleme est donc le suivant,je n'arrive pas a comprendre dans quel fichier je dois aller pour apporter ces modifs,et pire encore quelles modifs je dois apporter.

Les membres du fofo ont deja fait beaucoup pour moi avec toujours des conseils supers (je n'y serai jamais arrivé sans vous).

j'espere que quelqu'un pourra eclairer un peu ma lanterne

j'espere aussi que ma question n'est pas trop stupide.......  :-[

merci d'avance

Link to comment
Share on other sites

J'ai lu sur le forum qu'il fallait configurer mes boutons pour qu'a la premiere pression ils soient "on" et a la seconde ils soient "off"

Avec l'utilitaire vmidibox64.exe tu peux configurer tes boutons pour qu'il agissent en mode : on/off - on only - toggle

Bon maintenant tu utilise l'application midibox lc alors je sais pas trop si cet utilitaire fonctionne. (essaye :) ?)

Link to comment
Share on other sites

Je suis dans LC input output table for buttons and leds et la,je pige 0.......que modifier? ou?

Bon je ne comprend pas non plus comment il faut y modifier si c'est bien le bon endroit...

A tu poser la question dans le forum http://www.midibox.org/forum/index.php/board,29.0.html Midibox HUI ?

Sa doit surement pas être compliquer, ont doit tourner autour du truc  ??? ;)

Link to comment
Share on other sites

Je ne sais pas si quelque chose a déjà été implémenté pour le faire automatiquement, mais voici ma solution.

En utilisant la fonction MIOS_DIN_NotifyToggle(), le contrôleur réagira à chaque changement d'état du bouton, c'est-à-dire aussi bien à l'appui qu'au relachement. Dans ce cas, il n'y a pas besoin de mémoriser la valeur (on ou off) envoyée par le bouton, puisqu'elle correspond à l'état du bouton.

Ce que tu cherches, au contraire, nécessite de se creuser un peu plus la tête car il faut mémoriser quelque part cette valeur. Que tu veuilles allumer ou éteindre ta LED, l'action sera la même : appui - relâchement d'un bouton. Donc, physiquement, rien ne distingue l'action "éteindre la LED" de l'action "allumer" : il faut une information supplémentaire.

La solution que j'ai trouvée est (pour simplifier) de stocker les états des LEDs dans un tableau, que j'initialise à zéro. Dans DIN_NotifyToggle(), je ne traite l'appui sur le bouton QUE lorsqu'il est enfoncé, pas relâché. J'inverse alors en mémoire l'état de la diode correspondante, puis je mets le flag d'affichage à un, pour pouvoir traiter ce changement d'état lors de l'appel de DISPLAY_Tick().

Et c'est dans DISPLAY_Tick que je colle la routine qui gère l'allumage/extinction des LEDs, via la fonction MIOS_DOUT_PinSet(...).

Ce qui donne en gros (dans main.c) :

....
//exemple pour traiter 8 boutons devant se comporter de cette façon
#define NB_LEDS  8
....
unsigned char led_status[NB_LEDS] ;
....

void Init() {
....
unsigned char i ;
for(i=0;i<NB_LEDS;i++) led_status[i]=0 ; //toutes les LEDs éteintes au début. Bien sûr tu peux aussi en avoir certaines allumées
                                                       //au début de l'application
app_flags.DISPLAY_UPDATE_REQ=1 ; //voir la fonction DISPLAY_Tick. Flag de requête de rafraîchissement d'affichage.
.....
}

void DISPLAY_Tick()
{
if(!app_flags.DISPLAY_UPDATE_REQ) return ; //signifie : ne rien faire et immédiatement quitter la fonction si le flag de réaffichage est à 0 .
app_flags.DISPLAY_UPDATE_REQ=0 ; // on réinitialise le drapeau
.......
unsigned char i ;
for(i=0;i<NB_LEDS;i++) MIOS_DOUT_PinSet(i,led_status[i]) ; //ici est l'instruction qui allume ou éteint directement les diodes
......
}

void DIN_NotifyToggle(unsigned char pin,unsigned char pin_value)
{
   switch(pin)
   {
      case 0 : ....
                  break ;
      case 1 : ....
                  break ;
      case 2 : ....
                  break ;
                            //tout ça dépend de quels numéros sont attribués aux boutons qui nous intéressent ici.
                            // par exemple, admettons que le pin n° 23 soit le bouton qui commande la LED branchée sur le pin n° 4 :
      case 23 : if(pin_value) break ; /*traduction : si le changement d'état qui a amené à l'appel de cette fonction vient du pin 23
                                               et que sa valeur actuelle est non-nulle, ça signifie qu'il y a 5V sur ce pin, donc qu'il n'est pas connecté
                                               à la masse, donc que l'interrupteur est ouvert, donc qu'il vient d'être relâché. Donc : break
                                                (ne pas traiter les instructions suivantes du case). Ou même return à la rigueur, comme ça
                                               on ne perd même pas de temps à traiter inutilement le reste de la fonction.
                                               Note bien au passage que pin_value vaut 0 quand le bouton est enfoncé, 1 sinon. 0=ON, 1=OFF (!) */
                   led_status[4] = !led_status[4] ; //dans le cas contraire, inversion de l'état de la LED 4 ;
                   flags.DISPLAY_UPDATE_REQ=1 ;
                   break ;
    ......
}

Voiloù. Bon ce code n'est pas parfait (notamment dans le fait d'utiliser un unsigned char d'un octet pour stocker une valeur qui ne peut valoir que 0 ou 1) mais c'est juste pour avoir l'idée.

J'insiste sur le fait qu'ici on traite uniquement de l'affichage au niveau des diodes, concernant la véritable action du bouton, il faut ajouter le code correspondant (le tableau led_status peut être recyclé pour d'autres usages).

En espérant avoir été utile et pas trop lourd à lire ....

Dubs.

Link to comment
Share on other sites

merci pour ces precieux conseils dubstructor.

je m'excuse de ne pas t'avoir repondu plus tot,mais je taff de nuit. :o

je vais essayer tout ça des que possible et je te tiendrai au jus.

j'ai posté aussi ce sujet sur le forum anglais,alors rassure toi,tes explications sont limpides en comparaison....

merci encore d'avoir pris du temps pour m'aider :)

Link to comment
Share on other sites

Ouais. Et achète quelques écrans supplémentaires pour en mettre dans tes chiottes, ta salle de bain et ta cuisine.

Bon plus sérieusement je me suis un peu penché sur la question, et bien que ce que je t'ai dit n'était pas faux, l'application lc est malheureusement entièrement codée en assembleur, pas même un petit main.c pour y fourrer son grain de sel  :(

Pour des raisons personnelles (et parce que nom de dieu, j'aime bien comprendre ce que je fais) j'apprends actuellement l'assembleur, si t'as le temps et le courage, google les cours de bigonoff.

Bon après j'ai vu le fofo anglais, alors c'est clair que ton anglais est pour le moins .... euh ..... hésitant  :P , mais franchement y'avait pas la moitié des réponses qu'étaient pertinentes (après, peut-être qu'ils n'ont pas pigé la question). lc_io_tables machin truc ou je sais plus quoi, faut oublier. Basiquement c'est pas là-dedans qu'on gère le comportement "toggle" d'un bouton (ce que tu cherches à faire). Un bouton est perçu par le contrôleur suivant son état, enfoncé, relâché, point c'est tout. Il faut nécessairement créer une routine dont le fonctionnement est ce que je t'ai expliqué, c'est pas juste un paramètre du contrôleur.

Mais de toute façon y'a pas vraiment de question à se poser : d'après ce que j'ai compris (l'app lc ne faisant pas partie de mes projets) c'est le logiciel hôte qui allume/éteint les LEDs. Apparemment tous les voyants dépendent de ce que le logiciel renvoie comme midi in. Donc..... c'est au niveau du paramétrage de ton logiciel que ça se passe. Et en tout premier lieu : est-ce que le logiciel que tu utilises renvoie bien des données midi à ton contrôleur ?

Link to comment
Share on other sites

from what i can gather he is saying that when he presses the button for mute say on the down press the led lights up "on state" then when he lets go it turns off and the mute doesnt stay on. so im guessing hes asking if he should use a latching button for this so that when the button is pressed and released the mute stays in an "on state" then when pressed again goes into the "off state" similar to having a latched button.

im guessing thats what he means from his pigeon english.

"De ce que j'ai pu comprendre, il dit que quand il presse le bouton de mute, la led s'allume temporairement et qu'elle s'éteint quand il le relache, et le mute se désactive également. Donc je suppose qu'il nous demande si il devrait utiliser un bouton à bascule, ainsi le mute deviendrait actif et le resterait après une pression-relâchement du bouton, et redeviendrait inactif lors d'une nouvelle pression."

(oui tiens y'a aussi cette solution, j'y avais pas pensé : y'a des boutons, t'appuies une fois, hop c'est on, une autre fois, hop c'est off, et tout ça de manière mécanique sans avoir à le gérer en soft)

"Je suppose à travers son 'englais de pigeon' que c'est ce qu'il veut dire" (pas très gentil tout ça).

I think, the problem lies in the host's command handling. I'm not shure anymore but I think the LC sends an "off"-command, when the button is released again. He probably just has to configure the host to ignore the "off"-message, so the mute function toggles with each on command.

I can configure this stuff in Sequoia... don't know how it's handled in other applications, neither I know, which app "djahan" is using.

Greets, Roger

"Je pense que le problème vient de la façon dont le logiciel hôte traite la commande. Je n'en suis plus certain, mais je crois que le LC envoie un signal "OFF" quand le bouton est relâché. Il a probablement juste à configurer l'hôte pour ignorer ces messages "off", ainsi la fonction mute bascule à chaque signal "on".

Je sais comment configurer ceci dans Sequoia.... j'ignore comment c'est pris en charge dans d'autres application, ni quelle application djahan utilise."

Donc :

1 - est-ce juste un problème de LED ou est-ce que le problème concerne aussi l'action, à savoir le muting effectif d'une piste ?

2 - quel logiciel ?

3 - y'a-t-il une option pour ignorer les messages midi off ?

4 - si non, investis dans des boutons à bascule (latch en anglais).

Link to comment
Share on other sites

j'admire ton acharnement  :o

merci par la meme occasion d'avoir traduit ce qu'ils postaient sur le fofo anglais (je crois pouvoir dire sans foutre en l'air un secret,qu'en anglais,je suis une quiche,le taducteur automatique n'aide pas non plus.......)

sinon,je dois bien reconnaitre que le peu que j'avais pigé s'avere etre exact:

a soir qu'en trifouillant un peu dans cubase sx,(gestionnaire de peripheriques) la midibox lc et  le log interagissent entre eux.

un essai rapide hier avant d'aller bosser m'a permis de faire fonctionner les boutons mute solo reccord et select

en gros ça commence vraiment a sentir bon .

allez ,un ptit dodo et on remet ça cet aprem....,je te tiendrai au jus

en tout cas,merci encore d'avoir pris la peine de m'aider ça fait plaisir.(j'espere qu'un jour aussi je serai en mesure d'aider quelqu'un)

a plus

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...