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

 C Discussion :

Arduino Explication d'une ligne de code


Sujet :

C

Vue hybride

chiquitoloco Arduino Explication d'une... 22/09/2016, 12h52
Obsidian Bonjour, a ? b : c est «... 22/09/2016, 13h09
sambia39 Bonjour, L'opérateur... 22/09/2016, 14h28
ternel Notons au passage que... 22/09/2016, 16h06
chiquitoloco Super clair, merci beaucoup.... 22/09/2016, 18h35
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 21
    Par défaut Arduino Explication d'une ligne de code
    Bonjour,

    je joue avec de l'arduino, mais il y a une ligne que je ne comprends pas, mais elle fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    digitalWrite(LED_PIN, (value > 0) ? HIGH : LOW);
    que signifie le ? et : ?

    J'ai cherché dans operator, mais je ne trouve rien.

    Je connais pour digitalWrite le 1er paramètre c'est le PIN et le second soit HIGH ou LOW. Mais là il y a pleins de truc.

    Merci

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 461
    Par défaut
    Bonjour,

    a ? b : c est « l'opérateur ternaire ». L'expression entière est évaluée comme un tout, et a en particulier est évalué comme un booléen. Puis :

    • Si a est vrai, alors l'expression entière prend la valeur de b ;
    • Sinon, elle prend la valeur de c.


    Voici par exemple un code réclamant 35 euros en cas de tarif réduit et 50 euros en temps normal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void AfficheTarif (bool eligible_au_tarif_reduit)
    {
        printf ("Reste à régler : %4.2f €\n", ( eligible_au_tarif_reduit ? 35.00 : 50.00 ));
    }

  3. #3
    Membre très actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 548
    Par défaut
    Bonjour,
    L'opérateur ternaire (très bien expliqué par Obsidian dans son dernier post) vous permet de changer l'état de la broche (sortie) numérique de votre carte Arduino selon la condition souhaitée. En clair, si la valeur de "value" est supérieure à zéro, l'état de LED_PIN change en HIGH, dans le cas contraire LOW.
    Cette façon d'écrire permet également de simplifier l’écriture du code source afin de ne pas écrire:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void loop() {
     if( 0 < value )
      digitalWrite( LED_PIN, HIGH ) // led allumée
     else
      digitalWrite( LED_PIN, LOW )  // led non allumée
    }

    à bientôt

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Notons au passage que l'opérateur ternaire possède une propriété intéressante: une seule des expressions "conséquence" est évaluée.
    Cela peut servir dans certaines circonstances, voire certains controle d'erreur.

    par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char const * valeur_lue = fonction_pouvant_ne_pas_retourner();
    int valeur = ( valeur_lue ? conversion(valeur_lue) : 0 );
    Si la fonction retourne un pointeur nul, la fonction conversion n'est pas appelée du tout.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 21
    Par défaut
    Super clair, merci beaucoup.

    Avec ca je vais pouvoir carrement raccourcir mes sketchs. Moi qui faisais du IF dans du IF

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

Discussions similaires

  1. explication d'une ligne de code
    Par shirya dans le forum C#
    Réponses: 4
    Dernier message: 18/04/2008, 19h17
  2. Besoin d'explication d'une ligne de codes
    Par cdevl32 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 16/10/2007, 22h53
  3. Explication d'une ligne de code
    Par Deejoh dans le forum Langage
    Réponses: 2
    Dernier message: 02/02/2007, 12h31
  4. [TAPI]Explication d'une ligne de code
    Par Pmatt dans le forum C
    Réponses: 7
    Dernier message: 15/01/2007, 19h57
  5. [Tableaux] Explication d'une ligne de code
    Par eXiaNazaire dans le forum Langage
    Réponses: 3
    Dernier message: 30/03/2006, 13h09

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