Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Chris

Pages: [1]
1
JMRI et Arduino / Re : Communication JMRI/ARduino
« le: décembre 15, 2020, 02:55:14 pm »
Je vais étudier ça  :)

Cordialement
Christian

2
JMRI et Arduino / Re : Communication JMRI/ARduino
« le: décembre 13, 2020, 10:11:23 pm »
Finalement j'ai essayé C/MRI et... l'essayer c'est l'adopter  :D

3
JMRI et Arduino / Re : Communication JMRI/ARduino
« le: décembre 12, 2020, 11:29:17 am »
Bonjour,
après avoir résolu mes problèmes précédents, je me pose une nouvelle question :

JMRI peut il gérer un port série en entré et sortie en même temps ?
Je m'explique :
je voudrais connecter JMRI à mon arduino pour lire les ILS et transmettre les infos à JMRI qui en retour modifiera la position des aiguillages.
Autrement dit, faire en un seul script ce que font de façon séparée les 2 scripts SensorScan et TurnOutScan...
Existe-t-il un script qui gérerait les 2?

Cordialement


4
JMRI et Arduino / Re : JMRI
« le: septembre 18, 2020, 04:25:10 pm »
Bonjour et merci pour vos tentatives de réponse,
j'ai fini par trouver la raison de mon problème dont je vous fais part... ça peut aider d'autres novices comme moi sur l'arduino, et JMRI.

Alors voilà :
 - J'ai bien configuré ma liaison série dans l'arduino en COM6 et 115200 bauds
 - même chose dans le script Sensor_Scan.py pour JMRI

Mais comme j'ai utilisé  PanelPro pour essayer de commander mes locos, j'avais configuré ce dernier en mode DCC++ sur le port série.
Du coup, en ajoutant mon tableau de capteurs en Internal comme précisé dans l'article de Dominique,
 le script Sensor_Scan.py trouvait toujours le port occupé pour le DCC

La solution est finalement évidente : On ne peut visiblement pas faire les 2 en même temps.
Et en désactivant la liaison DCC++, ça marche ! :D :D :D
(A une exception prêt cependant : le script s'attend à gérer des capteurs dénommés "AR:" et non "AR", mais cela a déjà été signalé par ailleurs me semble-t-il)
Voilà.
Donc moi qui voulais utilisé un arduino pour les entrées capteurs et un pour les commandes d'aiguilles+ train, je vais devoir revoir mon schéma.
Peut-être comme suit :
JMRI en gestionnaire sur 2 ports USB relié à 2 arduino :
L'un transmettant les détections, et autres E/S en internal et l'autre en DCC pour les sorties Trains et Aiguillages

Cordialement

5
JMRI et Arduino / Re : JMRI
« le: septembre 16, 2020, 09:33:05 pm »
Le script est le suivant : sensor_scan.py :

# Capture Sensor Data from an Arduino Serial Transmission
# In the form: Character "A" followed by
# 1 byte: bit 7 Sensor ON/OFF bit 6-0 sensor # 1-127
# Author: Geoff Bunza 2018 based in part on a script by
# Bob Jacobsen as part of the JMRI distribution
# Version 1.2
# An Automat object to create a separate thread
# that can sit there, waiting for each character to arrive

import jarray
import jmri
import purejavacomm

class SerialSensorMux(jmri.jmrit.automat.AbstractAutomaton) :
    # ctor starts up the serial port
    def __init__(self, portname) :
        global extport
        self.portID = purejavacomm.CommPortIdentifier.getPortIdentifier(portname)
   try:
            self.port = self.portID.open("JMRI", 50)
        except purejavacomm.PortInUseException:
            self.port = extport
        extport = self.port
        # set options on port
        baudrate = 115200
        self.port.setSerialPortParams(baudrate,
            purejavacomm.SerialPort.DATABITS_8,
            purejavacomm.SerialPort.STOPBITS_1,
            purejavacomm.SerialPort.PARITY_NONE)
        # Anticipate the Port Opening will restart the Arduino
        # Uncomment the following line for use on RPi You may need to fiddle with the 2000
        # msec delay this works on my RPi 3 B+
        #self.waitMsec(2000)
      # get I/O connections for later
        self.inputStream = self.port.getInputStream()
        self.outputStream = self.port.getOutputStream()
        return

    # init() is the place for your initialization
    def init(self) :
        return

    # handle() is called repeatedly until it returns false.
    def handle(self) :
        global ttest
        if ttest == 1 :
                self.outputStream.write('!')
                self.outputStream.write('!')
                self.outputStream.write('!')
                self.outputStream.write(0x0D)
                ttest = 0
        # get next character   
        if self.inputStream.read() != 65 :
                return 1
        sensor_num = self.inputStream.read()
        sensor_state = ( sensor_num>>7 ) & 1
        sensor_num = sensor_num & 0x7f
        mesg = "AR:%d" % (sensor_num)
        if sensor_num == 1 and sensor_state == 1 :
            print "Sensor Read Ends"
            self.inputStream.close()
            self.outputStream.close()
            self.port.close()
            return 0
        s = sensors.getByUserName( mesg )
        if s is None :
                print mesg, " Not Available"
                return 1
        if sensor_state == 1 :
                s.setKnownState(ACTIVE)
        if sensor_state == 0 :
                s.setKnownState(INACTIVE)

        return 1    # to continue 0 to Kill Script

    def write(self, data) :
        # now send
        self.outputStream.write(data)
        return

    def flush(self) :
        self.outputStream.flush()
        return
ttest=1
# create one of these; provide the name of the serial port
a = SerialSensorMux("COM6")

# set the thread name, so easy to cancel if needed
a.setName("SerialSensorMux script")

# start running
a.start();

# setup  complete
a.flush()


la ligne
 "self.portID = purejavacomm.CommPortIdentifier.getPortIdentifier(portname)"

récupère un identifiant du port série portname (ici COM6) pour ensuite ouvrir le port par un open, mais ne le trouve pas (enfin me semble-t-il) d'où le extport non défini.
Mais je ne comprends pas pourquoi... l'arduino communique bien avec mon ordi via ce port puisque je peux televerser le sketch.
Je fais le test de communication entre JMRI et Arduino en lecture de capteurs.
De l'article "Communications entre JMRI et Arduino"

6
JMRI et Arduino / Re : JMRI
« le: septembre 16, 2020, 04:16:57 pm »
C'est bien extport (port externe) qu'il y a dans le script .
Pourtant j'ai bien mis mon port "COM6" identifié par l'arduino dans la ligne voulue.

7
JMRI et Arduino / Re : Communication JMRI/ARduino
« le: septembre 15, 2020, 06:44:53 pm »
Bonjour,
impossible de faire fonctionner les scripts, tout le reste fonctionne, mais dans la console système de JMRI j'ai le message suivant :

2020-09-15 18:17:16,288 jython.RunJythonScript                ERROR - Unable to execute script. [AWT-EventQueue-0]
javax.script.ScriptException: NameError: global name 'extport' is not defined in <script> at line number 86
....
....
Caused by: Traceback (most recent call last):
  File "<script>", line 86, in <module>
  File "<script>", line 22, in __init__
NameError: global name 'extport' is not defined

Ne connaissant pas JavaScript, je suis incapable d'en déduire quelque chose.
j'ai bien mis mon port "COM6" partout,
la même vitesse, toutes les opérations dans l'ordre, rien n'y fait.
Merci d'avance pour vos lumières.

8
JMRI et Arduino / Re : JMRI
« le: septembre 15, 2020, 06:26:27 pm »
Bonjour,
impossible de daire fonctionner les scripts, tout le reste fonctionne, mais dans la console système de JMRI j'ai le message suivant :

2020-09-15 18:17:16,288 jython.RunJythonScript                ERROR - Unable to execute script. [AWT-EventQueue-0]
javax.script.ScriptException: NameError: global name 'extport' is not defined in <script> at line number 86
....
....
Caused by: Traceback (most recent call last):
  File "<script>", line 86, in <module>
  File "<script>", line 22, in __init__
NameError: global name 'extport' is not defined

Ne connaissant pas JavaScript, je suis incapable d'en déduire quelque chose.
j'ai bien mis mon port "COM6" partout,
la même vitesse, toutes les opérations dans l'ordre, rien n'y fait.
Merci d'avance pour vos lumières.

9
Un autre essai avec une carte Pololu MC33926 : Ça marche en programmation et sur voie principale :D
mais seulement avec la console de l'IDE.
Avec JMRI, ça fonctionne sur voie principale mais pas en programmation... Mais je ne sais pas ce que fait JMRI.
En tout cas, sur 4 MAX471 achetés, 3 sont défectueux. Ces circuits ne valent pas grand chose (au propre comme au figuré) et au moins la pololu a sa protection intégrée.
Quant à la L9110S je finis par la mettre en doute aussi...
Ces cartes qui viennent de Chine me semblent n'avoir aucune fiabilité, et si elle ne valent pas cher ça fini quand même par  avoir un certain coût.
Finalement, la fiabilité a un prix.
Donc je vais tester ce soir avec un ami qui a une config qui fonctionne en HO avec JMRI si il peut programmer ma loco. Je vous donnerai le résultat.
Cordialement

10
Bonjour msport,
Je pense que le problème n'est pas là.
Ma voie principale est pour le moment un tronçon de 1m de voie relié directement en sortie du booster et 20cm pour la voie secondaire.
Avec la Led branchée en sortie du booster j'ai une tension de base renvoyée (sur A0) de 143. sans la Led, j'ai bien 0 (pas de courant consommé).
Mais quand j"envoie un ordre vers le décodeur, la tension retournée (qui en principe correspond à la consommation de courant de la loco) est de 2 ou 3 par rapport au courant de base, soit quasiment rien....
Est-ce lié au N ???
Et pourtant ça fonctionne avec ma centrale Arnold d'il y a 30 ans !

11
Bonjour à tous,
Voici les résultats actuels de mes investigations :
Avec les modifications proposées par Jéjé ( Merci à toi), que j'ai légèrement modifiées de la façon suivante :
 - j'ai gardé les resetpacket et passé le bRead précédent à 6 au lieu de 5 (ce qui revient au même que de rajouter une ligne)
 - les init suivants dans le ".h" :
         #define  ACK_BASE_COUNT            100     
         #define  ACK_SAMPLE_COUNT          500       
         #define  ACK_SAMPLE_SMOOTHING      0.2     
         #define  ACK_SAMPLE_THRESHOLD       5     

Je peux lire et écrire des CVs dans mon vieux décodeur Arnold   ;D  depuis la console arduino avec de commandes R et W. Ça fonctionne aussi en programmation avec JMRI  :D, mais quand je passe sur le régulateur sur voie principale, rien ne se passe :'(
j'ai tracé le retour de courant et il tourne autour de 11 pour un seuil à 5.
Quant à mon décodeur LockPilot Micro V4.0 toujours pas de réponse.
Quelqu'un utilise t-il ces décodeurs ?
Par ailleurs je précise que je suis en N ; cela explique-t-il le niveau de courant ? est-ce que DCC++ est bien calibré pour du HO et du N ?

Pour ceux que ça intéresse,  le  ACK_SAMPLE_SMOOTHING est un paramètre de filtrage (filtre passe-bas de la forme Sn = a*En + (1-a)*Sn-1).
Le coefficient de 0,2 est un coefficient de filtrage important pour éliminer vraisemblablement les pics fr courant parasites.
Si vous avez des suggestions ou des expériences pour m'aider à m'en sortir...
Cordialement
Christian


12
Bonjour Jeje,
D'abord, merci pour ta proposition d'aide.
j'ai effectué les modifs que tu préconises, mais rien à faire ; pas de réponse du décodeur. :(
J'ai imprimé les retours ( variable "c") je n'ai que des 0, 1, 2 ou 3
y a t-'il autre chose que j'ai raté ?
Christian

Pages: [1]