Répondre à la discussion
Affichage des résultats 1 à 18 sur 18

Demande d'aide à la réalisation d'une manette 4 boutons pour port série




  1. #1
    bniamor2

    Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    Bonjour à tous,

    Je suis à la recherche d'un schéma qui me permette de réaliser une manette à 4 boutons.
    Il s'agit de fournir 4 informations Haut/Bas/Droite/Gauche à un logiciel qui travaille uniquement sur un port com (émulé ou non).

    Il s'agit bien entendu de la partie électronique et non mécanique.
    Malheureusement je n'ai pas la compétence en électronique pour m'en sortir seul.
    Elle doit impérativement se raccorder sur un port série de PC (en DB9).

    Toutes mes recherches sont à ce jour infructueuses, cette technologie devenant totalement désuète.

    Je remercie par avance celles et ceux qui liront ma demande et tenterons de m'apporter une réponse.

    -----


  2. Publicité
  3. #2
    Seb.26

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    il te faut un uCPU qui va lire les 4 entrées et envoyer sur son UART la commande correspondante.
    il te faut aussi un MAX232 pour faire la conversion UART_du_uCPU <--> RS232_port_COM_du_PC

    NB: tu sais ce qu'il faut envoyer pour que ton soft comprenne l'info ?
    NB": on parle bien de manette "contact-secs", pas d'analogique, hein ? ... sinon c'est possible aussi ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  4. #3
    Seb.26

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    PS: si ton logiciel sait utiliser un port COM émulé, tu peux aussi prendre un convertisseur "USB / UART"
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>


  5. #4
    bniamor2

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    Pour la première réponse:
    il s'agit bien de 4 boutons en mode binaire et non analogique.
    Mon soft semble proposer un apprentissage, cad qu'il attend 4 infos différentes qu'il associera au 4 boutons.
    Peur importe la valeur de ces infos je pense.
    Je vais approfondir les indications de réalisation fournies.

    Pour le convertisseur,
    je possède déjà un Prolific avec pilote qui précisément me permet d'émuler un port com sur un pc qui en est dépourvu.
    C'est pour cela que je souhaite réaliser une manette dont la sortie soit de type UART (c'est ce qu'impose le cordon Prolific)
    Mais dois-je comprendre qu'il existe aussi des accessoires qui permettent de convertir le signal USB d'un joystick normal en signal UART qui pourrait entrer sur mon cordon Prolific pour ensuite alimenter mon port com émulé ?
    Cela serait parfait.

    Encore merci et bonne soirée.

  6. #5
    bniamor2

    Question Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    Concernant le MAX232, ok je vois , pour le uCPU, là je ne pige plus.
    J'immagine que c'est l'élément qui va lire l'état de mes boutons.
    Mais n'étant pas du tout éléctronicien mais simplement ex informaticien développeur en retraite,
    je serai bien heureux d'obtenir le schéma de réalisation d'un tel circuit.

    Est-ce possible ??

  7. A voir en vidéo sur Futura
  8. #6
    paulfjujo

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    bonsoir,



    JADIS, tu aurais pu utiliser un composant 100% Hardware : ex: Uart TMS6011 8E/S sur port serie
    relié au PC via le cordon Prolidifc

    Aujourd'hui il te faut un petit PIC MCU , qu'il faudra programmer ! et
    qui se chargera de lire l'etat de tes boutons et l'envoyer , via son UART sur les pins de ton cordon Prolific..
    Apres comment veux-tu exploiter ce que tu va recevoir sur ton PC .. une autre histoire.
    Dernière modification par paulfjujo ; 12/02/2019 à 18h31.

  9. #7
    antek

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    Citation Envoyé par bniamor2 Voir le message
    Concernant le MAX232, ok je vois , pour le uCPU, là je ne pige plus.
    J'immagine que c'est l'élément qui va lire l'état de mes boutons.
    Oui, lire et envoyer une information au PC.
    Le µC (micro-contrôleur) s'achète tout fait (c'est un circuit intégré) seul ou implanté sur une carte.
    Il faudra bien sûr le programmer.

  10. Publicité
  11. #8
    bniamor2

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    Bonjour,
    Merci pour ces réponses éclairantes.
    Je commence à comprendre le chemin à suivre....
    Bonne journée.

  12. #9
    Seb.26

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    uCPU = micro-controleur

    OK, si tu es un dev retraité, alors tu prends une petite carte type Arduino et tu fais un bout de code qui scrute tes 4 entrées et qui envoie un octet ( "G D H B" au hasard ) selon l'état de tes entrées.

    Avec ça, tu caches toute la partie électronique : tu câbles tes 4 contact entre une pin de la carte et la masse et tu alimenta via USB, le reste c'est du soft ... donc simple ...


    1) si tu as un convertisseur USB / UART, pas besoin de max232 : prends un Arduino nano (https://store.arduino.cc/arduino-nano)

    2) si c'est un convertisseur USB / RS232 (avec une prise DB9 donc), prends un Arduino micro (https://store.arduino.cc/arduino-micro), il est directement USB, tu pourras faire directement un port COM depuis le uCPU

    Après, il existe d'autres marques & co, c'est juste une piste (faut pas froisser les anti-arduimachin )
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  13. #10
    freepicbasic

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    Code pour Arduino :
    Reste quelques inconnus ;

    La vitesse de la transmission ?, ici 9600 baud
    Le temps d'anti rebond ? , ici 100 ms
    Si on doit envoyer un cr/lf à la fin de l'envoie d'une touche ?
    Ici ,J'envoie A B C ou D seul, selon la pin mis au plus.
    Les pins de lecture sont 2,3,4,5.
    On envoie si on a un High soit un plus sur la pin.
    Les 4 pins doivent donc avoir un "pull down" (résistance à la masse, par exemple 10k)


    Code:
    /*
     4 boutons qui envoie A,B,C et/ou D
    */
    
    // constants won't change. They're used here to
    // set pin numbers:
    const int buttonAPin = 2;    // the number of the pushbutton pin
    const int buttonBPin = 3;    // the number of the pushbutton pin
    const int buttonCPin = 4;    // the number of the pushbutton pin
    const int buttonDPin = 5;    // the number of the pushbutton pin
    
    
    // the following variables are unsigned long's because the time, measured in miliseconds,
    // will quickly become a bigger number than can be stored in an int.
    unsigned long lastDebounceTimeA = 0;  // the last time the output pin was toggled
    unsigned long lastDebounceTimeB = 0;  // the last time the output pin was toggled
    unsigned long lastDebounceTimeC = 0;  // the last time the output pin was toggled
    unsigned long lastDebounceTimeD = 0;  // the last time the output pin was toggled
    unsigned long debounceDelay = 100;    // the debounce time; increase if the output flickers
    
    void setup() {
      pinMode(buttonAPin, INPUT);
      pinMode(buttonBPin, INPUT);
      pinMode(buttonCPin, INPUT);
      pinMode(buttonDPin, INPUT);
      Serial.begin(9600);
      Serial.print("Start\r\n");
    }
    
    void loop() {
      // read the state of the switch into a local variable:
      int reading;
    
      if (millis() > lastDebounceTimeA) {
        reading = digitalRead(buttonAPin);
        if (reading == HIGH) {
          // reset the debouncing timer
          lastDebounceTimeA = millis() + debounceDelay;
          Serial.print("A");
        }
      }
    
      if (millis() > lastDebounceTimeB) {
        reading = digitalRead(buttonBPin);
        if (reading == HIGH) {
          // reset the debouncing timer
          lastDebounceTimeB = millis() + debounceDelay;
          Serial.print("B");
        }
      }
      if (millis() > lastDebounceTimeC) {
        reading = digitalRead(buttonCPin);
        if (reading == HIGH) {
          // reset the debouncing timer
          lastDebounceTimeC = millis() + debounceDelay;
          Serial.print("C");
        }
      }
    
      if (millis() > lastDebounceTimeD) {
        reading = digitalRead(buttonDPin);
        if (reading == HIGH) {
          // reset the debouncing timer
          lastDebounceTimeD = millis() + debounceDelay;
          Serial.print("D");
        }
    
      }
    
    }
    A+, pat

  14. #11
    Seb.26

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    il y a des pull-up intégrées au CPU ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  15. #12
    antek

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    Citation Envoyé par Seb.26 Voir le message
    il y a des pull-up intégrées au CPU ...
    Oui, les modules d'entrée-sortie en sont généralement équipés . . .

  16. #13
    Seb.26

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    Dans le code ci-dessous ...
    Code:
    void loop() {
      // read the state of the switch into a local variable:
      int reading;
    
      if (millis() > lastDebounceTimeA) {
        reading = digitalRead(buttonAPin);
        if (reading == HIGH) {
          // reset the debouncing timer
          lastDebounceTimeA = millis() + debounceDelay;
          Serial.print("A");
        }
      }
    
      if (millis() > lastDebounceTimeB) {
        reading = digitalRead(buttonBPin);
        if (reading == HIGH) {
          // reset the debouncing timer
          lastDebounceTimeB = millis() + debounceDelay;
          Serial.print("B");
        }
      }
      if (millis() > lastDebounceTimeC) {
        reading = digitalRead(buttonCPin);
        if (reading == HIGH) {
          // reset the debouncing timer
          lastDebounceTimeC = millis() + debounceDelay;
          Serial.print("C");
        }
      }
    
      if (millis() > lastDebounceTimeD) {
        reading = digitalRead(buttonDPin);
        if (reading == HIGH) {
          // reset the debouncing timer
          lastDebounceTimeD = millis() + debounceDelay;
          Serial.print("D");
        }
    
      }
    }
    ... je ne vois pas comment fonctionne l'anti rebond, j'ai plus l’impression que ça limite la vitesse de répétition sur l'UART, non ??
    ( mais je peux me tromper oeuf-corse )
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  17. #14
    bniamor2

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    La solution arduino me plait bien, je n'ai jamais utilisé mais je crois que j'ai là une bonne occasion de découvrir.
    Concernant le code, j'ai l'impression que le test limite la répétition d'envoi mais non de lecture.
    Ce n'est pas forcement gênant , et puis il est peut-être possible de gérer le rebond en fin ou début de boucle.
    Aujourd'hui je ne peux pas approfondir, je fais journée patisserie (le four chauffe) donc c'est serieux
    Demain j'approfondi vos réponses qui me guident parfaitement vers la solution que je cherchais.
    Un grand merci.

  18. #15
    Seb.26

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    Citation Envoyé par bniamor2 Voir le message
    La solution arduino me plait bien, je n'ai jamais utilisé mais je crois que j'ai là une bonne occasion de découvrir.
    Concernant le code, j'ai l'impression que le test limite la répétition d'envoi mais non de lecture.
    Ce n'est pas forcement gênant , et puis il est peut-être possible de gérer le rebond en fin ou début de boucle.
    Aujourd'hui je ne peux pas approfondir, je fais journée patisserie (le four chauffe) donc c'est serieux
    Demain j'approfondi vos réponses qui me guident parfaitement vers la solution que je cherchais.
    Un grand merci.
    De toute façon, quand tu auras tout ça sous la main, tu seras vite à l'aise, c'est pas si compliqué que ça ... ... et puis le rebond ne gêne peut être pas ton soft ... ?!

    donc commence simple ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  19. #16
    freepicbasic

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    Oui il y a des pull up , mais pas de pull down. LOL
    Il suffit de mettre LOW à la place de HIGH pour inverser la logique.

    Pour l'anti rebond ;
    En fait on limite les saisies a HIGH et 1 seule toutes les 100ms.
    Si on change le sens de la logique il faudra aussi changer ce HIGH en LOW.
    Changez la valeur 100 en une valeur plus élevée , en laissant la touche appuyée sur le moniteur on verra que les lettres apparaissent moins vite (Attention aux limitations du aux types de variables ; char int long etc..)

    Les pull up généralement font environ 47k , c est relativement haut comme impédance, un doigt sur le fil peut déclencher, 10k c est déjà plus sur...
    Dans un milieu hyper pollué électriquement , 1k ou 300 ohms , peuvent être nécessaire.
    A+, pat

  20. #17
    PA5CAL

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    Citation Envoyé par Seb.26 Voir le message
    ... je ne vois pas comment fonctionne l'anti rebond, j'ai plus l’impression que ça limite la vitesse de répétition sur l'UART, non ??
    L'anti-rebonds consiste à ne plus reprendre en compte les changements d'état de l'entrée avant un certain délai après la détection d'un premier changement d'état.

    Le code proposé permet d'avoir un délai indépendant pour chaque entrée après détection d'un front montant.

    Toutefois, il est probable qu'il faille signaler au PC l'appui ET le relâchement des touches. Il faudra donc détecter les fronts montants ET descendants, avec un anti-rebonds dans chaque cas (les contacts pouvant présenter des rebonds à l'ouverture et à la fermeture).

    Quoi qu'il en soit, la vitesse d'émission de l'interface série est limitée par la méthode Serial.print(), qui est bloquante lorsque le tampon d'émission est plein.

  21. #18
    freepicbasic

    Re : Demande d'aide à la réalisation d'une manette 4 boutons pour port série

    Toutefois, il est probable qu'il faille signaler au PC l'appui ET le relâchement des touches. Il faudra donc détecter les fronts montants ET descendants, avec un anti-rebonds dans chaque cas (les contacts pouvant présenter des rebonds à l'ouverture et à la fermeture).
    Effectivement une très bonne remarque, le fonctionnement serait différent, pour un flipper par exemple, mais avec le peu d'infos données...

    Même dans ce cas de figure il faudrait surement un anti rebond minimum, sinon un switch défectueux enverrait une rafale de commande.
    A+, pat

Discussions similaires

  1. demande d'aide pour réalisation d'un testeur de pile 12V
    Par kwarisma7 dans le forum Électronique
    Réponses: 1
    Dernier message: 11/05/2014, 16h27
  2. demande aide pour realisation de capteur et alim
    Par topoch dans le forum Électronique
    Réponses: 6
    Dernier message: 25/11/2010, 15h54
  3. Demande aide pour réalisation montage LED
    Par seregon dans le forum Électronique
    Réponses: 7
    Dernier message: 21/06/2010, 06h58
  4. Réponses: 8
    Dernier message: 08/05/2009, 01h47
  5. Demande d'aide pour realisation electronique
    Par twisters dans le forum Électronique
    Réponses: 0
    Dernier message: 24/06/2007, 22h38