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 :

Teensy LC GPIO touch et LED


Sujet :

Arduino

  1. #21
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Salut,

    Tu ne peux pas lui reprocher la conversion (implicite) bool int. À la rigueur le postulat sur HIGH et LOW ok, ça, ça peut se comprendre, dans ce cas une simple compilation conditionnelle qui vérifie cette assertion réglera le problème.

  2. #22
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 725
    Points : 5 415
    Points
    5 415
    Par défaut
    —— Hors sujet - donc dernier post de ma part sur ce thème ——

    Salut kaitlyn

    Qu'on soit clair - je ne reprochais rien, chacun fait bien comme il veut.

    Je proposais (ou du moins j'essayais de proposer) une alternative avec
    pour le respect des types et des API documentées on préfèrera écrire
    que pour un code qui a vocation d'exemple, respecter les types me semble une bonne idée et passer un booléen en dépendant de la promotion implicite (tout à fait officielle) qui est sans doute une notion qui dépasse les connaissances de JPP n'était pas idéal (outre la dépendance aux valeurs des constantes HIGH et LOW).

    la doc dit
    Syntax
    digitalWrite(pin, value)

    Parameters
    pin: the Arduino pin number.
    value: HIGH or LOW.
    donc rien ne dit que value est de type entier.

    Comme expliqué par ailleurs sur la notion du respect des types, si d'aventure HIGH et LOW devenaient membre d'un bête enum comme proposé dans le Arduino Core

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     typedef enum {
      LOW     = 0,
      HIGH    = 1,
      CHANGE  = 2,
      FALLING = 3,
      RISING  = 4,
    } PinStatus;
    C++ n'accepterait plus la conversion implicite d'une constante littérale entière vers une des constantes énumérées (warning sur AVR, erreur de la compilation sur ESP/ARM). La conversion implicite à elle seule ne suffit donc pas toujours.

  3. #23
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 335
    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 335
    Points : 4 158
    Points
    4 158
    Par défaut Retour aux sources
    Bonjour,

    Dans Arduino.h on a : void digitalWrite(uint8_t pin, uint8_t val);

    Donc même si la doc laisse penser à tort que HIGH et LOW sont (ou appartiennent à) des types à part entière, ce ne sont que des alias qui seront remplacés par les caractères 1 ou 0 là où le préprocesseur les rencontrera dans le source. Dans le cas de digitalWrite ces valeurs sont de facto des uint_8 (bytes).

    Je sais que j'avais dit arrêter mais c'est dur de lutter contre les addictions

    Une remarque, je ne vois pas comment l'enum proposé pourrait fonctionner. En effet, une variable de ce type ne peut prendre que l'une des valeurs. Or en cas de FALLING ou RISING il y a également CHANGE ce qui ne paraît pas très cohérent.

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

  4. #24
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 725
    Points : 5 415
    Points
    5 415
    Par défaut
    Si vous regardez dans le code du core, ils changeraient aussi la signature et l'utiliseraient pour les interruptions aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void digitalWrite(pin_size_t pinNumber, PinStatus status);
     
    void attachInterrupt(pin_size_t interruptNumber, voidFuncPtr callback, PinStatus mode);
    certaines valeurs "légales" sont donc un peu incohérentes pour un digitalWrite() mais la doc dit HIGH ou LOW et de ne pas utiliser autre chose.


    Vous avez raison, si on met le nez dans le code on voit bien que ce que vous proposez fonctionnera. Mais l'idée c'est de dépendre plus de la documentation que du code à un instant T. (même si la doc Arduino laisse vraiment souvent à désirer, voire est erronée ou incomplète).


    Promis j'arrête demain ( pareil ici )

  5. #25
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Salut,

    Citation Envoyé par Guesset Voir le message
    Dans Arduino.h on a : void digitalWrite(uint8_t pin, uint8_t val);
    Ce n'est pas ça le problème. Ce qu'il y a, c'est que par rapport à la lib arduino, le code de @Jay se base sur son interface, telle que présentée par la documention, alors que toi tu te bases sur son implémentation. Si cette dernière venait à changer, ton code ne serait plus compatible. Ça veut dire que si demain Arduino change l'alias de LOW en (-1) histoire de faire simple, ton code source ne fonctionnera plus comme attendu, celui de @Jay si.
    C'est pour ça que dans mon précédent message je parle de la compilation conditionnelle. Elle consiste à dire au compilateur OK, je pars du principe que HIGH est un alias de 1 et LOW de 0, merci de le vérifier pour moi avant de compiler le code. Évidemment ça n'empêchera pas la nécessité de remanier le code en cas d'échec, mais ça évitera bien des surprises et surtout on saura pourquoi il faut le faire.

  6. #26
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 335
    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 335
    Points : 4 158
    Points
    4 158
    Par défaut Fin et suite
    Bonjour kaitlyn,

    Citation Envoyé par kaitlyn Voir le message
    Ce n'est pas ça le problème. Ce qu'il y a, c'est que par rapport à la lib arduino, le code de @Jay se base sur son interface, telle que présentée par la documention, alors que toi tu te bases sur son implémentation.
    Sur le principe, je suis d'accord mais comme cela les amènerait à reprendre également le code des divers fonctions les utilisant, les rendant moins efficaces car in fine c'est toujours un 0 ou un 1 qui va être modifié dans un registre, je suppose qu'il va se passer du temps avant. En fait je compte, peut être à tort, sur le pragmatisme. C'est vrai que quand je vois une énumération qui mélange états et transitions (ce qui implique deux états), je devrais peut être me méfier.

    La solution de la compilation conditionnelle est sympathique mais quitte à ajouter du code autant prendre la solution de Jay ou un casting explicite du booléen.

    Salut et merci
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  7. #27
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 725
    Points : 5 415
    Points
    5 415
    Par défaut
    Citation Envoyé par Guesset Voir le message
    les rendant moins efficaces
    En pratique l’optimiseur fait le job. Donc ce n’est pas moins efficace

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/05/2020, 18h47
  2. Simuler appui touche clavier sur GPIO
    Par molochlebanni dans le forum Raspberry Pi
    Réponses: 4
    Dernier message: 27/06/2018, 14h32
  3. [VB6] Touche impr écran
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 12/11/2002, 07h38
  4. Cherche Nom des touches du clavier
    Par juan64 dans le forum C++Builder
    Réponses: 8
    Dernier message: 23/07/2002, 19h11
  5. Shortcut avec plusieurs touches
    Par scorpiwolf dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/07/2002, 15h57

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