Viewing 18 reply threads
  • Author
    Posts
    • #5296
      anthony
      Moderator

      ** source : Calamity, post MRL **

      Il est possible de brancher en série plusieurs arduino , sans utiliser le port usb
      Pour ce faire vous pouvez utiliser les Pin dédiés de l’arduino :

      Serial Arduino

      Code :

      
      arduino = Runtime.createAndStart("arduino","Arduino")
      
      arduino.setBoardMega()
      
      arduino.connect("COM15")
      
      arduino1 = Runtime.createAndStart(\"arduino1","Arduino")
      
      arduino1.setBoardUno()
      
      #connecting arduino1 to arduino Serial1 instead to a COMX
      
      arduino1.connect(arduino,'Serial1') 
      
      servo = Runtime.createAndStart('servo','Servo')
      
      servo.attach(arduino1,5)
      
      #attaching procedure take a bit more time to do, wait a little before using it
      
      sleep(1)
      
      servo.moveTo(90)
      
      • This topic was modified 6 years, 3 months ago by anthony.
      • This topic was modified 6 years, 3 months ago by anthony.
      • This topic was modified 6 years, 3 months ago by anthony.
      • This topic was modified 6 years, 3 months ago by anthony.
      • This topic was modified 6 years, 3 months ago by anthony.
      Attachments:
      You must be logged in to view attached files.
    • #5304
      My’s Moov
      Moderator

      Kikou tony !! tu veux dire que pour deux USB tu en élimine un ? mais on en as tjrs au moins un a raccorder ?

      ps: ok : pour le code et les apostrophes (mets le en pièce jointe sinon) ?

    • #5306
      anthony
      Moderator

      Coucou ! Oui Alain il y aura toujours un maitre à brancher en usb.

    • #5374
      Christian
      Participant

      Salut Anthony

      je viens de voir ton post, juste quelque petite précision

      Pour que le tout puisse communiquer avec MRL, les connections de série ne peuvent se faire a partir d’un arduino Mega vers n’importe quel type d’arduino.

      La connection s’effectue toujours comme ceci

      MRL -> USB -> (Serial) MEGA (Serial1-3) -> (Serial) Arduino
      (le port Serial (tx/rx) est utilisé par la connection USB)

      plusieur niveau de connections peuvent etre ajouté

      MRL -> USB -> (Serial) MEGA1 (Serial1-3) -> (Serial) MEGA2 (Serial1-3) -> … -> (Serial) Arduino

    • #5379
      anthony
      Moderator

      Coucou ! merci pour ces précisions Christian

    • #5455
      Dominique
      Participant

      Bonjour,


      @Christian

      Serais t’il possible d’ajouter dans MrlComm la possibilité de gérer les ports de communications séries 1, 2 et 3.

      Apparemment d’après le post, c’est possible, mais rien dans le soft du mega me fait penser que cela est bien gérer.

      Je suppose aussi que cela dépens du type de carte car pour un UNO ou NANO il y a qu’un seul port.

      Sinon, ai je la possibilité de modifier le soft par moi même afin d’y intégrer la gestion de ces ports ? Mais alors comment se passerais les futurs update sans écrases les modifs ?

      Merci
      Dom.

    • #5476
      Dominique
      Participant

      Bonjour,

      J’ai reçu une partie de la réponse.

      Nous avons donc bien la possibilité de mettre un mega (gauche par exemple) sur USB et l’autre mega (droite par exemple) sur le port série 1 du mega connecté en USB.
      Ici le but est d’utiliser le moins possible de ports USB et même ne pas utiliser de hub pour tout le robot.

      L’autre demande était: A t’on la possibilité de connecter un arduino custom sur le port série 2 du mega USB ET utiliser un protocole custom avec MRL ?
      Si oui, auriez vous un exemple python ?

      Merci.
      Dom.

    • #5478
      anthony
      Moderator

      Pour scinder ces 2 fonctionnalités, d’après les travaux de Christian, je tenterais ça :

      Coté python : ( att j ai enlevé les guillemets, bug forom )

      arduinoMAITRE = Runtime.createAndStart(arduinoMAITRE,Arduino)
      arduinoMAITRE.setBoardMega()
      arduinoMAITRE.connect(COM3)
      arduinoESCLAVE = Runtime.createAndStart(arduinoESCLAVE,Arduino)
      arduinoESCLAVE.setBoardMega()
      arduinoESCLAVE.connect(arduinoMAITRE,Serial1)
      
      #recepetion
      def FonctionReceptionData(data):
        print J ai reçu des données les voici , data
      arduinoESCLAVE.addListener(publishCustomMsg,python,FonctionReceptionData)
      
      #emission
      arduinoESCLAVE.customMsg(55,44)
      

      Coté Arduino
      On flash MRLCOMM sur les 2
      Et dans l’esclave on ajoute notre code sur le modèle suivant :
      https://github.com/MyRobotLab/pyrobotlab/blob/develop/home/Calamity/customMsgMrlComm.ino

      • This reply was modified 6 years, 3 months ago by anthony.
    • #5500
      Christian
      Participant

      Salut Dominique

      Désolé pour la réponse tardive, je n’avais pas vu la question avant

      Le code example d’anthony me semble approprié

      La gestion des ports de série se fait dans la classe MrlIo de MRLComm. Afin de facilité la gestion et d’etre compatible avec la plupart des arduinos utilisé, la réception des messages de MRL -> Mrlcomm s’effectue toujours par le port Serial (USB ou par les pins). L’arduino Maitre envois les messages vers l’esclave a partir d’un des port Serial1, Serial2 ou Serial3 vers le port Serial.

      Afin d’éviter d’écraser ton code custom, tu copies tout les fichiers de MRLComm sauf MRLComm.ino (pour utiliser ton fichier.ino modifier) MRLComm.ino contient tres peu de code susceptible d’etre modifié.

      Une autre facon plus sure et l’utilisation de git pour récuperer la derniere version de MRLComm. Git fera a merge des fichers ou te d’avertira s’il y a un probleme

    • #5515
      Dominique
      Participant

      Bonjour,

      Après plusieurs essais, rien ne sort du port série demandé. Je précise que la led RX du nano qui est connecté sur le port série du mega maître ne s’allume pas.

      Voici mon code:

      activator = Runtime.createAndStart(“activator”,”Arduino”)
      activator.setBoardUno()
      activator.connect(right,”Serial1″)
      activator.digitalWrite(1,0)

      J’ai mis Serial1 entre guillemets sinon il y a erreur de syntaxe.

      Pouvez vous me dire où est l’erreur.

      Dom.

    • #5518
      Christian
      Participant

      pour le digitalWrite is faut faire un pinMode avant

      Sinon envoie un noWorky, ca me permettra de voir ton log file et comprendre ce qui ne marche pas pour toi

    • #5523
      anthony
      Moderator

      Alors pour résumer suite aux derniers test dans un script dédié :

      Les commandes fonctionnent parfaitement

      1/ Emmission
      L’arduino “autonome” reçoit bien le customMsg(55,44) et une fonction est exécutée en conséquence du message reçu. ( peu importe la fonction )
      Mais Dom tu veux utiliser autre chose que customMsg(55,44) , un digitalwrite depuis python avec une modification de mrlcomm autre que le .ino principal . Modifications non fusionnées sur le dépôt principal. d’après ce que j’ai compris. c’est ça?
      Juste pour comprendre que va apporter ces modifications de plus que le traitement d’info simple du customMsg. En faisant ça es tu sure que ça va suivre les évolutions de mrlcomm Je dis ça afin d’anticiper les évolutions du protocole / les changements de versions

      2/ Réception
      Test OK de mon coté, à valider chez toi.

      J’essaye de nettoyer le script principal ce soir

      @++

    • #5531
      Dominique
      Participant

      Bon Anthony, a voir tes remarques, je continue de croire que tu me comprends pas.

      Activator est un soft qui n’a rien à voir avec MrlComm et il ne sera mis à jour QUE par moi même suivant les demandes.

      Je ne touche pas du tout au MrlComm d’origine qui ce trouve dans les megas.

      J’ai inclus le protocoles MrlComm dans ACTIVATOR pour que celui ci soit reconnue comme un arduino UNO avec MrlComm et pour pouvoir utiliser les commandes pythons standards.

      J’espère enfin me faire comprendre.
      On va y arriver !!!

      Dom.

    • #5535
      anthony
      Moderator

      Oui on va y arriver, c’est le but. Tu dis que je ne comprend pas mais précise techniquement justement. On est la pour ça ! Que tout le monde parle le même language. Pour qu’on puisse s’entre aider mutuellement.

      Sans entrer dans les détails fonctionnels de ton code arduino, j’ai compris que tu souhaite envoyer et recevoir des commandes série depuis le mega principal ( pour les traiter dans ton programme et effectuer des actions diverses ) Si j’ai mal compris , explique nous pour ne pas que qu’il y ai de malentendus.

      En tous cas c est une fonctionnalité que je vais utiliser aussi autant qu’on aille dans le même sens.
      Je pense que ma question est pertinente sur mrlcomm ( le changement des fichiers autres que le .ino principal ) car en cas d’évolution du protocole, ton arduino risque de ne plus être reconnu par le mega. Enfin je ne suis pas du tout expert en mrlcomm ! Si Christian passe par la! Mais si ça marche comme ça c’est parfait! Il faut juste en être sure

      Le but de tout cet écosystème open source est justement que tout le monde puisse modifier et ( tenter de ) comprendre le travail de chacun.
      Et tu ne sera pas le seul a maintenir ton code . C’est le jeu de Github de mrl et plus généralement de l open source. enfin il faut prendre en compte que des gens vont l utiliser voir avoir envie de le modifier avec ta validation bien sure. Je l’utiliserais moi même certainement et apporterais des modifications !

    • #5536
      Dominique
      Participant

      En faite, j’utilise peu de commandes susceptibles d’être changés dans le futur. Maintenant si il y a une évolutions, alors il suffira de mettre à jour nous même.

      Autrement seules les fichiers MrlComm.cpp et MrlComm.h on été modifié.

      A+
      Dom.

    • #5688
      Dominique
      Participant

      Bonjour,

      J’ai toujours un problème lors de la réception de données: je m’explique:

      Si je branche mon Arduino sur port usb et que celui ci envoie un PublishCustomMsg cela fonctionne sans problème.
      Si je branche mon Arduino sur le port série du méga gauche, alors mon message PublishCustomMsg est bien reçu par le méga car on peut voir “Message Ack received: CUSTOM_MSG” MAIS ou sont les data ? Le listener python ne voit rien !!

      ex:

      
      def receiveActivatorData(data):
        print "J ai reçu des données que voici: ", data
       
      # Fonction d'écoute pour la réception des données Activator    
      ActivatorArduino.addListener("publishCustomMsg","python","receiveActivatorData")
      

      Voici un extrait du log:

      
      11:04:34.560 [python.input] INFO c.m.s.PortJSSC [PortJSSC.java:200] Sending Int Array: 170,5,28,2,7,1,1
      11:04:34.568 [COM8.portListener 1] INFO c.m.s.Arduino [Arduino.java:1927] Message Ack received: MSG_ROUTE
      11:04:34.569 [COM8.portListener 1] INFO c.m.s.Arduino [Arduino.java:1927] Message Ack received: CUSTOM_MSG
      11:04:39.561 [python.input] INFO c.m.s.PortJSSC [PortJSSC.java:200] Sending Int Array: 170,5,28,2,7,1,1
      11:04:39.566 [COM8.portListener 1] INFO c.m.s.Arduino [Arduino.java:1927] Message Ack received: MSG_ROUTE
      11:04:39.566 [COM8.portListener 1] INFO c.m.s.Arduino [Arduino.java:1927] Message Ack received: CUSTOM_MSG
      11:04:39.641 [python.input] WARN c.m.f.Service [WebkitSpeechRecognition.java:197] clear lock out grammar not supported on webkit, yet...
      11:04:39.642 [python.input] INFO c.m.f.Service [WebkitSpeechRecognition.java:105] Resume listening event seen.
      11:04:39.643 [python.input] INFO c.m.f.Service [Service.java:2134] LedWebkitListen info starting clock
      11:04:44.560 [python.input] INFO c.m.s.PortJSSC [PortJSSC.java:200] Sending Int Array: 170,5,28,2,7,1,1
      11:04:44.566 [COM8.portListener 1] INFO c.m.s.Arduino [Arduino.java:1927] Message Ack received: MSG_ROUTE
      11:04:44.567 [COM8.portListener 1] INFO c.m.s.Arduino [Arduino.java:1927] Message Ack received: CUSTOM_MSG
      

      Voici ce que j’obtiens dans myrobotlab.log.

      Pouvez vous m’aider ? Merci

      Dom
      A+

      • This reply was modified 6 years, 3 months ago by Dominique.
    • #5690
      anthony
      Moderator

      Ok la on parle bien de la communication dans l autre sens cad code arduino > python ? En effet vu le log tu as reçu qq chose. Regarde dans la fenetre python ( la ou les print s affichent ) tu va donc voir : j ai reçu des données les voici : . avec le contenu de data . enfin normalement

    • #5691
      Dominique
      Participant

      Bon non rien. En faite c’est plus compliqué que ça sinon je n’aurais pas appelé “a l’aide”.

      Il y a 2 onglets associés à Activator. Premier onglet activator, 2eme activator.serial
      Dans l’onglet activator, c’est bien mis connecté et on peux simuler des actions.
      Dans l’onglet activator.serial il ne se passe rien, pas de print. Si je connecte sur un port USB alors des print apparaît avec des erreurs de structure…

      En résumé, j’ai bien les acquis quand je fait des commandes Python->mega->activator sinon il y aurait pleins d’erreurs et rien ne fonctionnerais. ce n’est pas le cas.
      Par contre le sens activator->mega->python rien ne ce passe dans le listener.

      A+
      Dom

      • This reply was modified 6 years, 3 months ago by Dominique.
    • #5693
      anthony
      Moderator

      Ok juste pour être sure : dans ce bout de code ce sont des print console python pas des print serial arduino. Regarde la pj

      Attachments:
      You must be logged in to view attached files.
Viewing 18 reply threads
  • You must be logged in to reply to this topic.