Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Passionné
    Inscrit en
    janvier 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Passionné
    Secteur : Santé

    Informations forums :
    Inscription : janvier 2018
    Messages : 11
    Points : 9
    Points
    9

    Par défaut Arduino piloté par Raspberry pi

    Bonjour,

    Je travaille actuellement sur un projet de pilote automatique de bateau à base de Raspberry et Arduino J'ai installé sur le Raspberry la distribution OpenPlotter qui me fournit entre autre la dernière version de l'incontournable logiciel de navigation OpenCpn. Sur lequel, je peux tracer au port la route que je compte suivre lors de la navigation. Lorsque j'active cette route, Opencpn me donne entre autres le cap vers le prochain waypoint. Mon idée est de récupérer ce cap, de l'envoyer à un Arduino qui le transformerait en impulsions à destination du pilote automatique (un ancien autohelm 4000 dont on peut faire varier le cap par impulsions sur des boutons +10 ,-10,+1 et -1.
    L'Arduino reçoit donc par le port usb connecté au Raspberry une indication de cap qui sera convertie en impulsions à destination des boutons du pilote.
    Le programme du Raspberry est entièrement compris dans OpenCpn qui m'envoie une trame $ECAPB comprenant entre autres le cap à suivre, dès qu'il est en mode 'suivi de route'
    Du côté de l'Arduino, j'ai imaginé le programme suivant qui récupère les infos du Raspberry par la trame ECAPB, effectue des calculs pour définir l'angle de correction à apporter ainsi que sa direction (Babord ou Tribord)*. Pour l'instant en phase d'essais à terre, j'ai associé les impulsions destinées au pilote à des leds pour pouvoir les contrôler visuellement*; par la suite, ces leds seront remplacées par des triacs montés en interrupteurs*!. Ce programme est le suivant*:

    Code 'compas_pilote_nokia' :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    #include <LCD5110_Basic.h>
    String sen;
     
    LCD5110 myGLCD(
        13, 11, 9, 8,
        10); /*  (CLK,DIN,DC,RST,CE)  initialisation d'un écran lcd 5110 Nokia*/
    extern uint8_t SmallFont[];
    extern uint8_t MediumNumbers[];
     
    #include <TinyGPS++.h> //pour parser le phrase nmea reçue.
    TinyGPSPlus gps;
    TinyGPSCustom ang(gps, "ECAPB", 11);
    // TinyGPSCustom dir(gps, "ECAPB",4);
    int temp = 0;
    int val = 0;
    int comp = 0;
    bool flag = true;
    bool tempo = false;
    const int red = 2;
    const int green = 3;
    const int plusdix = A2;
    const int moinsdix = 5;
    const int plusun = 6;
    const int moinsun = 7;
    const int pin = A0;
    int dif;
    int res;
    unsigned long depart = millis();
     
    void setup() {
        pinMode(red, OUTPUT);
        pinMode(green, OUTPUT);
        pinMode(plusdix, OUTPUT);
        pinMode(moinsdix, OUTPUT);
        pinMode(plusun, OUTPUT);
        pinMode(moinsun, OUTPUT);
        pinMode(pin, INPUT_PULLUP);
        myGLCD.InitLCD();
        myGLCD.setFont(SmallFont);
        Serial.begin(4800);
        myGLCD.print("Pilote", CENTER, 0);
        myGLCD.print("en attente", CENTER, 16);
     
        myGLCD.print("d\'ordres!", CENTER, 32);
    }
    void loop() {
        bool lu = digitalRead(pin);
        char sens;
        digitalWrite(red, LOW); //-Initialisation des impulsions à 0--------->
        digitalWrite(green, LOW);
        digitalWrite(plusdix, LOW);
        digitalWrite(moinsdix, LOW);
        digitalWrite(moinsdix, LOW);
        digitalWrite(moinsun, LOW);
        comp = gps.course.deg(); //-----------reception du cap-------------->
        // if (strcmp(dir.value(),"R")==0)
        // sens='T';
        // if (strcmp(dir.value(),"L")==0)
        // sens='B';
        if (ang.isUpdated()) {
            // myGLCD.clrScr();
            int val = atoi(ang.value());
     
            //--------------------------------------Calcul de la direction de la
            // correction----------------->
     
            int c = val - comp;
            if (c >= 0 && c <= 180) // cap > waypoint
                dif = c;
            sens = 'T';
            if (c > 0 && c > 180) {
                sens = 'B';
                c = 360 - c;
                dif = c;
            }
     
            if (c < 0) { // cap < waypoint
                res = c + 360;
                if (res > 180) {
                    dif = 360 - res;
                    sens = 'B';
                } else {
                    dif = res;
                    sens = 'T';
                }
            }
            //-------------------------------------AFFICHAGE---------------------------------------->
            if (val != temp) {
                myGLCD.clrScr(); //----------On attend 3 secondes, le temps que le
                                 //nouveau
                // wpt soit établi----->
                bool tempo = HIGH;
                depart = millis();
            } else {
                affichage(comp, val, sens);
                if (flag == true) {
     
                    cmd(dif, sens);
                }
            }
     
            if (tempo == HIGH && ((millis() - depart) > 3000)) {
                affichage(comp, val, sens);
                // if (flag==true){
     
                cmd(dif, sens);
                //}
                tempo = LOW;
            }
     
            temp = val; // Variable temp pour pouvoir comparer si le waypoint a changé
        }
        if (lu == LOW) { /*si j'appuie sur le bouton, je force le flag à true par la
                            mise à 0 de la valeur de la dif, ce qui d’éclenche la
                            commande moteur!*/
            dif = 0;
        }
     
        if (dif == 0) {
            flag = true;
        }
        delay(50);
        while (Serial.available() > 0)
            gps.encode(Serial.read());
    }
     
    //-----------------FONCTION AFFICHAGE------------------------------------>
     
    void affichage(int comp, int val, char sens) {
        myGLCD.setFont(SmallFont);
        myGLCD.print("Cap =", LEFT, 8);
        myGLCD.setFont(MediumNumbers);
        myGLCD.printNumI(comp, 35, 0);
        // myGLCD.print("Cap = ");myGLCD.print(comp);
        myGLCD.setFont(SmallFont);
        myGLCD.print("Wpt =", LEFT, 24);
        myGLCD.setFont(MediumNumbers);
        myGLCD.printNumI(val, 35, 16);
        if (sens == 'T') {
            digitalWrite(green, HIGH);
            String sen = "Tri";
            myGLCD.setFont(SmallFont);
            myGLCD.print(sen, RIGHT, 40);
        }
     
        if (sens == 'B') {
            digitalWrite(red, HIGH);
            String sen = "Bab";
            myGLCD.setFont(SmallFont);
            myGLCD.print(sen, RIGHT, 40);
        }
     
        myGLCD.setFont(SmallFont);
        myGLCD.print("Dif =", LEFT, 40);
        myGLCD.setFont(MediumNumbers);
        myGLCD.printNumI(dif, 30, 35);
    }
     
    //----------------------------FONCTION CMD (impulsions vers boutons
    // pilote)------------>
     
    void cmd(int x, char y) {
        flag = false;
        int c = x / 10;
        if (y == 'T') {
            for (int i = 0; i < c; i++) {
                digitalWrite(plusdix, HIGH);
                delay(100);
                digitalWrite(plusdix, LOW);
                delay(100);
                // flag=false;
            }
            int d = x - (c * 10);
            for (int i = 0; i < d; i++) {
                digitalWrite(plusun, HIGH);
                delay(100);
                digitalWrite(plusun, LOW);
                delay(100);
                // flag=false;
            }
        }
        if (y == 'B') {
            for (int i = 0; i < c; i++) {
                digitalWrite(moinsdix, HIGH);
                delay(100);
                digitalWrite(moinsdix, LOW);
                delay(100);
            }
            int d = x - (c * 10);
            for (int i = 0; i < d; i++) {
                digitalWrite(moinsun, HIGH);
                delay(100);
                digitalWrite(moinsun, LOW);
                delay(100);
            }
        }
    }
    Mon problème est le suivant :
    Ce code fonctionne comme souhaité sur PC en branchant l'Arduino sur un port usb, aussi bien avec windows qu'avec linux.
    Par contre, avec le Raspberry Pi3, l'Arduino semble marcher mais reboot de façon intempestive, ce qui re-déclenche les correction déjà effectuées par le programme et on tourne en rond!!!
    Pensant à une problème d'alimentation (surcharge du port usb du Raspberry), j'ai tenté sans succès de rajouter un hub alimenté entre les 2 appareils, mais il reboot toujours*!!!
    Mon plan de secours serait d'embarquer un PC, mais l'économie d'énergie est fondamentale sur un voilier et le Raspberry devrait pouvoir suffire!!
    Merci de me permettre de conserver mon petit précieux!

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Passionné
    Inscrit en
    janvier 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Passionné
    Secteur : Santé

    Informations forums :
    Inscription : janvier 2018
    Messages : 11
    Points : 9
    Points
    9

    Par défaut en progrès!

    Re bonjour,

    Suite à mon précédent post, en attendant une réponse éventuelle, j'ai entrepris de revoir ma connexion entre les 2 appareils, abandonnant l'usb pour me tourner vers l'UART et là, pas de problème, tout marche à souhait.
    Je reste toujours sur ma faim au niveau de l'usb, et si quelqu'un pouvait m'expliquer à quel niveau je me suis trompé, ça me ferait faire un pas de plus dans ce monde fabuleux de l'embarqué!!
    A +

  3. #3
    Expert éminent
    Avatar de Auteur
    Profil pro
    Inscrit en
    avril 2004
    Messages
    6 991
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 6 991
    Points : 9 663
    Points
    9 663

    Par défaut

    Bonjour,

    est-ce que tu as accès au port USB du Raspberry ?
    https://www.developpez.net/forums/d1.../#post10312057

    Ensuite, est-ce bien judicieux d'utiliser un Arduino avec un Raspberrry ? Le Pi possède des ports GPIO, I2C, UART, etc. donc, on peut logiquement se passer l' Arduino.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Passionné
    Inscrit en
    janvier 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Passionné
    Secteur : Santé

    Informations forums :
    Inscription : janvier 2018
    Messages : 11
    Points : 9
    Points
    9

    Par défaut

    Merci auteur pour cette réponse rapide;
    j'ai effectivement accès aux ports usb, étant donné que le transfert se passe bien et l'affichage également. le seul problème est ce reboot intempestif de l'arduino, mais qui ne se manifeste pas lorsque les 2 appareils sont reliés en uart.
    Pour mon choix de passer par l'arduino, il est motivé par 2 impondérables:
    Le premier, le plus important, est ma méconnaissance de la structure et des nombreuses astuces incorporées dans openplotter de façon native. Cette distribution est un travail de pros et y toucher relève d'une connaissance approfondie de ses mécanismes encore trop complexes à mon niveau. De plus, cette distri est mises à jour fréquemment avec des changements profonds et je n'ai pas le temps de reprogrammer mes modifications à chaque fois! Le fait de passer par un arduino m'assure d'une certaine pérennité tant qu'il n'y a pas de modifications sur les ports du raspberry.
    Ensuite, le programme pourrait tourner sur le raspberry, mais il est déjà très sollicité par les nombreuses fonctions présentes dans cette distrib (point d'accès, serveur web, serveur mqtt, alarmes, répétiteur en temps réel, base de données etc..) et je préfère attribuer mes customisations à un appareil indépendant, disponible à la demande et relativement simple.
    Merci encore de ton intérêt et de ta réactivité.

  5. #5
    Expert éminent
    Avatar de Auteur
    Profil pro
    Inscrit en
    avril 2004
    Messages
    6 991
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 6 991
    Points : 9 663
    Points
    9 663

    Par défaut

    Peux-tu vérifier, quand tu utilises le port USB à quelle vitesse ton logiciel essaye de parler à ton Arduino ? Dans ton programme Arduino tu as fixé la vitesse à 4800 bauds, vérifie si c'est la même valeur du côté du logiciel (également 8 bits de données, 1 bit de stop).

    Ces redémarrages me font penser à un petit bout de code (assez discret) en bas de cette page : http://playground.arduino.cc/Main/Di...rialConnection
    Paragraphe : "USB, Serial and Reset with the Leonardo under Linux (RPi)"
    Reset_arduino:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/usr/bin/python
    # usage: reset_arduino <DEVICE>
    # where <DEVICE> is typically some /dev/ttyfoobar
    import sys
    import serial
    ser = serial.Serial()
    ser.port=sys.argv[1]
    ser.baudrate=1200
    ser.open(); ser.close()
    Donc si tu essayes de parler à ton Arduino avec une vitesse de 1200 bauds, ça sera impossible, chaque fois que tu vas ouvrir ton port, l'Arduino va rebooter.


    Tu ne l'as pas précisé, mais quel modèle Arduino (Uno, Mini, Micro, Leonardo....) utilises-tu ?

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Passionné
    Inscrit en
    janvier 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Passionné
    Secteur : Santé

    Informations forums :
    Inscription : janvier 2018
    Messages : 11
    Points : 9
    Points
    9

    Par défaut

    Bonjour,

    Merci de tes recherches que tu partages généreusement! Et où j'apprends par la même occasion comment rebooter un arduino à distance:Cool!!
    Mais pour mon problème, j'ai vérifié le logiciel sur lequel tourne le raspberry (OpenCpn) et il envoie bien en 4800 Bps sur le port com de l'arduino.
    Je précise que ce logiciel de navigation tourne aussi bien sous Linux que sous Windows ainsi donc que sur Raspberry. De Pc à l'arduino que ce soit de Linux Mint ou de Windows 7, je ne rencontre aucun problème.
    Ce n'est qu'avec le Raspberry que ce reboot se manifeste au bout de quelques secondes après avoir rempli sa tâche (réception de la trame, calculs, affichage de la correction et impulsions pour le pilote)!
    J'ai testé avec un arduino nano et avec un mega.
    Reste l'UART, mais qui m'oblige à me passer du Bluetooth interne, inconvénient que je peux contourner grâce à une clef BT externe!

  7. #7
    Expert éminent
    Avatar de Auteur
    Profil pro
    Inscrit en
    avril 2004
    Messages
    6 991
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 6 991
    Points : 9 663
    Points
    9 663

    Par défaut

    A essayer mais sans garantie :
    Est-ce que dans OpenCpn tu peux vérifier les attributs DSR et DTR du port série ? S'ils sont à true (enable ou on), bascule les à false (disable ou false). Même chose pour RTS et CTS.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Passionné
    Inscrit en
    janvier 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Passionné
    Secteur : Santé

    Informations forums :
    Inscription : janvier 2018
    Messages : 11
    Points : 9
    Points
    9

    Par défaut

    Bonsoir,

    Merci pour tes suggestions, mais dans OpenCpn, je ne trouve aucune référence aux paramètres de contrôle de flux des ports com.Ils sont juste mentionnés par leur N° , leur vitesse (bauds) et leur direction (entrant/sortant). Aucune référence à DSR,DTR,RTS ,CTS
    Peut être un spécialiste de la programmation de OpenCpn aurait il la réponse? Il y en a qui sévissent sur le site 'Hisse et Ho' sur lequel je pourrais peut être me renseigner!!
    Ou alors, le Raspberry gèrerait il autrement ses ports usb que les PC, ce qui me parait surprenant!!
    Je cherche toujours à titre d'information, mais je pense opter pour la solution UART qui fonctionne sans problème.
    Merci encore de ta générosité et de ta bonne volonté.

  9. #9
    Expert éminent
    Avatar de Auteur
    Profil pro
    Inscrit en
    avril 2004
    Messages
    6 991
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 6 991
    Points : 9 663
    Points
    9 663

    Par défaut

    J'ai utilisé un Arduino UNO et un Leonardo avec une application particulière sous Windows. Les premiers temps avec DSR et DTR désactivé , si l'application s'arrêtait brutalement je ne pouvais plus parler à l'Arduino. En activant DSR et DTR je pouvais parler à l'Arduino normalement avec un petit détail : au moment où j'ouvrais la communication avec l'Arduino ce dernier se réinitialisait. Je devais donc ajouter une petite pause (1 à 5 secondes selon l'Arduino) au début de mon programme pour attendre la fin de l'initialisation.

    Je pense qu'il doit t'arriver la même chose : je pense qu'il faut soit activer soit désactiver DSR et DTR. Pour CTS et RTS, je pense que ce n'est pas la peine d'y toucher.


    Essaye d'accéder à ces contrôles en utilisant des fonctions Linux; Voici un début :
    https://raspberrypi.stackexchange.co...dtr-on-ttyusb0
    mais renseigne toi bien sur les attributs avant de changer leur état.

  10. #10
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Ancien développeur matériel électronique (Hard/Soft)
    Inscrit en
    avril 2002
    Messages
    2 182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ancien développeur matériel électronique (Hard/Soft)
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 2 182
    Points : 7 004
    Points
    7 004

    Par défaut

    Salut
    Citation Envoyé par Auteur Voir le message
    Je devais donc ajouter une petite pause (1 à 5 secondes selon l'Arduino) au début de mon programme pour attendre la fin de l'initialisation.
    Tiens c'est curieux ça.
    Tu as du ajouter une tempo sur le Arduino pour pas qu'il plante ? Le temps que l'UART de l'Arduino s'initialise ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  11. #11
    Expert éminent
    Avatar de Auteur
    Profil pro
    Inscrit en
    avril 2004
    Messages
    6 991
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 6 991
    Points : 9 663
    Points
    9 663

    Par défaut

    Citation Envoyé par Vincent PETIT Voir le message
    Tu as du ajouter une tempo sur le Arduino pour pas qu'il plante ? Le temps que l'UART de l'Arduino s'initialise ?
    non, pas dans le code de l'Arduino, dans le code du programme qui est sur le PC (celui de mon application). C'est vrai ma phrase prête à confusion.
    Quel que chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ouverture du port COM
    pause(2 secondes)
    écriture sur le port COM
    //.... suite du code
    fermeture du port COM

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Passionné
    Inscrit en
    janvier 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Passionné
    Secteur : Santé

    Informations forums :
    Inscription : janvier 2018
    Messages : 11
    Points : 9
    Points
    9

    Par défaut EUREKAA!!!!

    Bravo à toi Auteur pour avoir déniché une aussi inattendue et improbable astuce que celle dont tu m'as donné le lien sur StackExchange!!
    J'ai désactivé le DTR par un 'stty -F /dev/ttyUSB0 -hupcl' et le résultat est parfaitement concluant. Il ne me reste plus qu'à faire un petit script qui me lance cette commande au démarrage et tout baigne!!
    Merci pour ta perspicacité, ta compétence et ton dévouement.
    J'espère un jour pouvoir te rendre la pareille, mais il me faudra encore beaucoup de boulot!!

  13. #13
    Expert éminent
    Avatar de Auteur
    Profil pro
    Inscrit en
    avril 2004
    Messages
    6 991
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 6 991
    Points : 9 663
    Points
    9 663

    Par défaut

    Citation Envoyé par sohio Voir le message
    Bravo à toi Auteur pour avoir déniché une aussi inattendue et improbable astuce que celle dont tu m'as donné le lien sur StackExchange!!
    J'ai désactivé le DTR par un 'stty -F /dev/ttyUSB0 -hupcl' et le résultat est parfaitement concluant. Il ne me reste plus qu'à faire un petit script qui me lance cette commande au démarrage et tout baigne!!
    De rien, mais, logiquement, si tu as désactivé le DTR sur USB0, il doit resté désactivé.

    Citation Envoyé par sohio Voir le message
    Merci pour ta perspicacité, ta compétence et ton dévouement.
    de rien


    Citation Envoyé par sohio Voir le message
    J'espère un jour pouvoir te rendre la pareille, mais il me faudra encore beaucoup de boulot!!
    j'accepte aussi les chèques

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Passionné
    Inscrit en
    janvier 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Passionné
    Secteur : Santé

    Informations forums :
    Inscription : janvier 2018
    Messages : 11
    Points : 9
    Points
    9

    Par défaut petite precision

    Au fait, après avoir marqué le sujet comme résolu et suite à ta remarque ' logiquement, si tu as désactivé le DTR sur USB0, il doit resté désactivé', je constate lors du reboot du raspberry qu'il me faut relancer la commande stty pour que ça fonctionne:
    Je conserve donc le script 'stty -F /dev/ttyUSB0 -hupcl' dans le lancement automatique.
    Merci encore.

  15. #15
    Expert éminent
    Avatar de Auteur
    Profil pro
    Inscrit en
    avril 2004
    Messages
    6 991
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 6 991
    Points : 9 663
    Points
    9 663

    Par défaut

    Je me demande s'il n'y a pas quelque part (dans le dossier /etc/ ?)un fichier de configuration qui mémorise les paramètres de USB0. Il faudrait creuser.

  16. #16
    Expert éminent
    Avatar de Auteur
    Profil pro
    Inscrit en
    avril 2004
    Messages
    6 991
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 6 991
    Points : 9 663
    Points
    9 663

    Par défaut

    Je viens de voir le manuel de stty
    NAME
    stty - change and print terminal line settings

    SYNOPSIS
    stty [-F DEVICE | --file=DEVICE] [SETTING]...
    stty [-F DEVICE | --file=DEVICE] [-a|--all]
    stty [-F DEVICE | --file=DEVICE] [-g|--save]

    DESCRIPTION
    Print or change terminal characteristics.

    Mandatory arguments to long options are mandatory for short options
    too.

    -a, --all
    print all current settings in human-readable form

    -g, --save
    print all current settings in a stty-readable form
    si je ne dis pas de bêtise, si tu fais un
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    stty -F /dev/ttyUSB0 -hupcl
    puis
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    stty --save /dev/ttyUSB0
    tu sauvegardes la configuration de USB0 et donc tu ne devrais plus avoir besoin de taper la commande à chaque démarrage

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Passionné
    Inscrit en
    janvier 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Passionné
    Secteur : Santé

    Informations forums :
    Inscription : janvier 2018
    Messages : 11
    Points : 9
    Points
    9

    Par défaut

    Merci Auteur pour cette astuce (j'avoue que mon emploi du temps ne m'a pas permis de faire le recommandé 'RTFM'), mais là encore, je me heurte au problème suivant:
    réponse du terminal après le commande --save:
    stty: les mode ne peuvent pas être initialisés quand le style de sortie est indiqué.

    Ce qui me parait un peu paradoxal!!!
    De toute façon, je ne pense pas vouloir sauvegarder la configuration, vu que le port usb pour l'arduino peut changer selon que je le connecte au démarrage, ou après l'initialisation du GPS ou autre capteur.
    En pratique, je peux vérifier dans OpenPlotter le port qui a été assigné à la sortie vers l'arduino; il me suffit alors de faire la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stty -F /dev/'port assigné' -hupcl
    .
    Tant que je n'aurai pas trouvé de méthode pour que le port assigné soit toujours le même, je pense que c'est plus lourd, mais moins hasardeux que de modifier les caractéristiques du port de façon fixe: A noter que les autres capteurs (GPS, Vent), ne marchent pas avec l'option -hupcl et se retrouvent plantés en cas de changement d'assignement.
    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/02/2018, 19h47
  2. Roue à filtre photo motorisée et pilotée par Arduino
    Par seriousmath dans le forum Arduino
    Réponses: 70
    Dernier message: 08/01/2017, 04h51
  3. [C#]Propriétés Excel pilotées par C#
    Par Mictou dans le forum C#
    Réponses: 7
    Dernier message: 22/07/2008, 13h29
  4. [Excel] - QueryTable dans Excel Piloté par Access
    Par Philippe JOCHMANS dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 23/02/2007, 14h28
  5. Réponses: 1
    Dernier message: 23/08/2005, 15h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo