IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Arduino Discussion :

[STM32Duino] Inverser le signal (en soft) avec la librairie Servo


Sujet :

Arduino

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 11
    Points : 6
    Points
    6
    Par défaut [STM32Duino] Inverser le signal (en soft) avec la librairie Servo
    Bonjour,

    J'ai un circuit électronique sur lequel toutes les sorties d'un STM32F030C8T6 pilotent des mosfets. Le circuit est ce qu'il est et n'est pas modifiable. Si j'utilise la librairie servo, j'ai donc un signal inversé, avec des LOW pour des HIGH et inversement.

    Je souhaiterais donc inverser le signal.

    Sur la librairie Servo sur gitHub, il me semble que je puisse changer cela dans le fichier servo.cpp, dans la fonction "static void Servo_PeriodElapsedCallback()".

    Comment faire pour modifier cette fonction sans être obligé de modifier la librairie pour tous les autres projets ?

    (j'ai essayé de "copier" la librairie dans le répertoire, mais la compilation ne passe pas... sans raison évoquée... Et puis ça me semble pourrit comme option)

    En vous remerciant

  2. #2
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 330
    Points : 4 151
    Points
    4 151
    Par défaut
    Bonjour,

    Le plus simple pour conserver un usage standrad de la bibliothèque consiste à ajouter une directive conditionnelle qui modifie le code utilisé selon l'option :
    • #define ISINVERT en commentaire par défaut.
    • Puis modifier le code là où c'est nécessaire en le précédant de #ifdef ISINVERT et en le terminant par #endif.


    Il convient cependant de remarquer qu'à la première actualisation de la bibliothèque tout sera à refaire.

    La solution de déplacer la bibliothèque dans le répertoire de travail avec ses sous répertoires est meilleure. Il faut penser à indiquer son nouveau chemin par un #include "..."

    Salutation
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci pour cette réponse. En effet, je voulais une modification résistante aux mise à jour.

    Bêtement, je viens de me demander... Est-ce que je ne pourrais pas tout simplement faire une classe dérivée de Servo et ré-écrire cette fonction statique ?

    Remarquez, je ne crois pas que ça soit véritablement une méthode de la classe (c'est une fonction statique).

    Désolé pour ces questions un peu idiotes, je n'ai pas fait de C++ depuis 20 ans...

  4. #4
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 330
    Points : 4 151
    Points
    4 151
    Par défaut Inversion
    Bonjour,

    La classe n'est pas modifiée, c'est juste la fonction qui l'est.

    Apparemment la modification de servo.cpp se limite à seulement deux lignes (celles avec les digitalWrite)

    Code : 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
    ...
    /* >>> */ int isInvert = 0;                      // Dans servo.h    0 : direct, 1 : inversion
    ...
    static void Servo_PeriodElapsedCallback() {
       timer16_Sequence_t timer_id = _timer1;        // Only 1 timer used
       if(timerChannel[timer_id] < 0) 
          CumulativeCountSinceRefresh = 0;           // Restart from 1st servo
       else if(timerChannel[timer_id] < ServoCount && servos[timerChannel[timer_id]].Pin.isActive) 
          /* >>> */  digitalWrite(servos[timerChannel[timer_id]].Pin.nbr, LOW ^ isInvert); 
       timerChannel[timer_id]++;                     // increment to the next channel
       if (timerChannel[timer_id] < ServoCount && timerChannel[timer_id] < SERVOS_PER_TIMER) {
          TimerServo.setOverflow(servos[timerChannel[timer_id]].ticks);
          CumulativeCountSinceRefresh += servos[timerChannel[timer_id]].ticks;
          if(servos[timerChannel[timer_id]].Pin.isActive) // check if activated
          /* >>> */  digitalWrite(servos[timerChannel[timer_id]].Pin.nbr, HIGH ^ isInvert); // active channel
       } else { ...
    J'aurais tendance à privilégier cette approche simple quitte à, de temps à autres, devoir reporter la modification sur une nouvelle version. La variable isInvert permet au programme appelant d'activer ou non l'inversion.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    C'est bien les 2 lignes que j'avais identifié

    Très bien, je vais suivre le conseil et modifier la librairie !

    Merci pour votre aide !

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

Discussions similaires

  1. Signals et Slots avec QextSerialPort
    Par sardik dans le forum Qt
    Réponses: 1
    Dernier message: 05/05/2009, 17h30
  2. Soft avec droit admin
    Par bbor99 dans le forum VB.NET
    Réponses: 6
    Dernier message: 09/04/2008, 12h01
  3. [net CF2] fermer un soft avec la croix
    Par dodineau dans le forum Windows Mobile
    Réponses: 1
    Dernier message: 18/02/2007, 09h59
  4. [POSIX][SIGNAL] envoyer un signal a thread avec sigqueue
    Par Mokhtar BEN MESSAOUD dans le forum POSIX
    Réponses: 3
    Dernier message: 09/02/2006, 18h07
  5. Avenir de nos softs avec l'arrivée de Longhorn ?
    Par AnTaReS7364 dans le forum Windows
    Réponses: 5
    Dernier message: 01/06/2005, 20h07

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