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 :

Conditions if/else posent problème avec arduino


Sujet :

C

Vue hybride

Lucalo33 Conditions if/else posent... 11/12/2018, 11h47
Sve@r Bonjour Déjà le mot clef... 11/12/2018, 12h58
sambia39 Bonjour, (1) La définition... 11/12/2018, 16h15
Lucalo33 => Pour les pin analogiques... 11/12/2018, 16h40
Lucalo33 e.. 11/12/2018, 16h20
sambia39 Il faut comprendre qu’un... 11/12/2018, 16h41
Lucalo33 Oui je viens de voir ça et... 11/12/2018, 17h05
Kannagi Je rajouterai que ce n'est... 11/12/2018, 17h40
Bktero Mais il existe en C++ et... 12/12/2018, 09h29
Sve@r Argh cte mauvaise foi... 12/12/2018, 13h19
ternel D'après ma référence préférée... 12/12/2018, 16h03
sambia39 C’est tout à fait normal que... 13/12/2018, 19h23
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Par défaut Conditions if/else posent problème avec arduino
    Bonjour,

    J'ai un soucis avec mes conditions if/else dans ma carte arduino (est-ce le bon forum ?)

    Le but de mon programme est de détecter la variations de résistance d'un jauge de contrainte et à l'aide d'un pont de Wheatstone et d'amplis OP on est censé récupérer une tension de 0 a 3.5V dans la carte Arduino. On défini des limites et on allume une led verte,jaune ou rouge en fonction de cette tension.
    Mon problème est que pour une tension devant allumer la led verte c'est la led orange qui s'allume (oui j'ai vérifié les pins et les branchements...)

    Si quelqu'un peut m'aider se serait avec plaisir.

    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
    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
     
    // ON DEFINI LES PIN :
     
    int Tension = A5;
    int green = 2;
    int orange = 4;
    int red = 7;
     
    //#define Tension A5
    //#define green 2
    //#define orange 4
    //#define red 7
     
    // VALEUR SORTIE DU CAN EN BITS :
    int valeur;
     
    // VALEUR CALCULEE EN VOLT A L'ENTREE DU CAN :
    float volt;
     
    // VALEURS LIMITES /
    const int rpe = 0.615;
    const int re = 1.235;
     
    // ATTENTE :
    const int wait = 500;
     
     
    void setup() {
     
    //INITIALISATION DES PIN :
    Serial.begin(9600);
    pinMode (Tension, INPUT);
     
    pinMode (green, OUTPUT);
    pinMode (red, OUTPUT);
    pinMode (orange, OUTPUT);
    }
     
     
    void loop() {
                // on convertit en nombre binaire la tension lue
          valeur = analogRead(Tension);
     
                // on traduit la valeur brute en tension (produit en croix)
          volt = valeur * 5.0 / 1023;
     
    //Si volt plus grand que voulu, on allume une LED :
     
            //    LED VERTE :
     if(volt <= rpe){
      digitalWrite(green,HIGH);
    }
     else {
      digitalWrite(green,LOW);
    }
     
      //    LED JAUNE :
     if(volt >= rpe and volt <= re){
      digitalWrite(orange,HIGH);
    }
     else {
      digitalWrite(orange,LOW);
    }
     
      //    LED ROUGE :
     if(volt >= re){
       digitalWrite(red,HIGH);
    }
     else {
       digitalWrite(red,LOW);
    }
     
     
                // on affiche la tension calculée
          Serial.print("volt= ");
          Serial.print(volt,2);
          Serial.println(" V");
     
               // on saute une ligne entre deux affichages
          Serial.println();
          delay(wait);
     
                // on affiche la valeur lue sur la liaison série
     
          Serial.print("valeur en bits= ");
          Serial.print(valeur);
          Serial.println(" /1023");
     
      //          // on saute une ligne entre deux affichages
      //    Serial.println( );
      //    delay(wait);
    }

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Lucalo33 Voir le message
    Mon problème est que pour une tension devant allumer la led verte c'est la led orange qui s'allume (oui j'ai vérifié les pins et les branchements...)
    Déjà le mot clef "and" n'existe pas en C. La syntaxe c'est if (volt >= rpe && volt <= re).

    Sinon t'as un test if (volt <= rpe) allumer vert puis un test if (volt >= rpe) allumer orange. Donc le cas volt == rpe valide les deux tests ce qui allume alors le vert puis l'orange (ça aurait été bien que tu nous donne la valeur de "volt"...)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  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,
    (1) La définition des PIN est mal faites, il n'existe pas de sortie analogique A5 ayant pour valeurs A5 ou du moins pas de valeur A5 désignant l’entrée analogique 5.
    (2) Analogique 5 (A5) n'est pas non plus destinée a être utiliser plus bas pour la définition des PIN numériques pinMode (Tension, INPUT); normalement à ce stade le compilateur devrait déjà crier.

    (3)
    La formule de mesure du voltage est également fausse et je ne vois nulle part l'application du pont de Wheatstone sans compté l'absence des valeurs de vos résistances et de la formule. En revanche le code de la mesure du voltage, ressemble plus à un diviseur de tension (qui d'ailleurs, est utilisé pour mesurer le voltage en entrée de la broche analogique 5) sous cette forme.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    const float RESISTANCE_1 = 2000; //(R1)
    const float RESITSNACE_2 = 2000; //(R2)
    const float ret_volt = ( analogRead(5) / (1023.0 * (RESISTANCE_2/(RESISTANCE_1 + RESISTANCE_2))) );

    Bref, Je vous conseil de revoir l'implémentation du pont de Wheatstone.

    À bientôt,

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Par défaut
    Citation Envoyé par sambia39 Voir le message
    La définition des PIN est mal faites, il n'existe pas de sortie analogique A5 ayant pour valeurs A5 ou du moins pas de valeur A5 désignant l’entrée analogique 5.
    => Pour les pin analogiques j'ai essayé avec "#define" puis avec "int" et le résultat est le même dans le moniteur du logiciel arduino (il m'affiche volt=0.06 V).
    Je comprend pas trop le problème que vous m'annoncez..

    Citation Envoyé par sambia39 Voir le message
    (2) Analogique 5 (A5) n'est pas non plus destinée a être utiliser plus bas pour la définition des PIN numériquenormalement à ce stade le compilateur devrait déjà crier.
    => Le compilateur ne me dit rien et c'est d'après mes collègue la seule facon d'obtenir une valeur de tension (excepté les pins A0 A1 A2 A3 et A4)

    Citation Envoyé par sambia39 Voir le message
    La formule de mesure du voltage est également fausse et je ne vois nulle part l'application du pont de Wheatstone sans compté l'absence des valeurs de vos résistances et de la formule. En revanche le code de la mesure du voltage, ressemble plus à un diviseur de tension (qui d'ailleurs, est utilisé pour mesurer le voltage en entrée de la broche analogique 5) sous cette forme
    => Pour le pont de wheatstone je récupère la tension en sortie d'AOP et le calcul est déja fait sur excel, je ne rentre que mes valeurs limites.
    En gros pour simplifier le problème ma tension est censé varier de 0 à 3.5 et je veux une led allumée par intervale.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Par défaut e..
    Pour exclure plusieurs causes je rentre ma valeur à la main :
    Je met volt=0.06, ça devrait allumer la led verte mais c'est la jaune qui s'allume...

    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
    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
     
          // ON DEFINI LES PIN :
     
    //int Tension = A5;
    int green = 2;
    int orange = 4;
    int red = 7;
     
    //#define Tension A5
    //#define green 2
    //#define orange 4
    //#define red 7
     
    // VALEUR SORTIE DU CAN EN BITS :
    //int valeur;
     
    // VALEUR CALCULEE EN VOLT A L'ENTREE DU CAN :
    float volt=0.06;
     
    // VALEURS LIMITES /
    const int rpe = 0.615;
    const int re = 1.235;
     
    // ATTENTE :
    const int wait = 500;
     
     
    void setup() {
     
    //INITIALISATION DES PIN :
    Serial.begin(9600);
    //pinMode (Tension, INPUT);
     
    pinMode (green, OUTPUT);
    pinMode (red, OUTPUT);
    pinMode (orange, OUTPUT);
    }
     
     
    void loop() {
                // on convertit en nombre binaire la tension lue
     //     valeur = analogRead(A5);
     
                // on traduit la valeur brute en tension (produit en croix)
     //     volt = valeur * 5.0 / 1023;
     
    //Si volt plus grand que voulu, on allume une LED :
     
            //    LED VERTE :
     if(volt <= rpe){
      digitalWrite(green,HIGH);
    }
     else {
      digitalWrite(green,LOW);
    }
     
      //    LED JAUNE :
     if(volt > rpe && volt <= re){
      digitalWrite(orange,HIGH);
    }
     else {
      digitalWrite(orange,LOW);
    }
     
      //    LED ROUGE :
     if(volt > re){
       digitalWrite(red,HIGH);
    }
     else {
       digitalWrite(red,LOW);
    }
     
     
                // on affiche la tension calculée
          Serial.print("volt= ");
          Serial.print(volt);
          Serial.println(" V");
     
               // on saute une ligne entre deux affichages
          Serial.println();
          delay(wait);
     
                // on affiche la valeur lue sur la liaison série
     
     //     Serial.print("valeur en bits= ");
    //      Serial.print(valeur);
     //     Serial.println(" /1023");
     
      //          // on saute une ligne entre deux affichages
      //    Serial.println( );
      //    delay(wait);
    }

  6. #6
    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
    Citation Envoyé par Lucalo33 Voir le message
    Pour exclure plusieurs causes je rentre ma valeur à la main :
    Je met volt=0.06, ça devrait allumer la led verte mais c'est la jaune qui s'allume...

    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
    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
     
          // ON DEFINI LES PIN :
     
    //int Tension = A5;
    int green = 2;
    int orange = 4;
    int red = 7;
     
    //#define Tension A5
    //#define green 2
    //#define orange 4
    //#define red 7
     
    // VALEUR SORTIE DU CAN EN BITS :
    //int valeur;
     
    // VALEUR CALCULEE EN VOLT A L'ENTREE DU CAN :
    float volt=0.06;
     
    // VALEURS LIMITES /
    const int rpe = 0.615;
    const int re = 1.235;
     
    // ATTENTE :
    const int wait = 500;
     
     
    void setup() {
     
    //INITIALISATION DES PIN :
    Serial.begin(9600);
    //pinMode (Tension, INPUT);
     
    pinMode (green, OUTPUT);
    pinMode (red, OUTPUT);
    pinMode (orange, OUTPUT);
    }
     
     
    void loop() {
                // on convertit en nombre binaire la tension lue
     //     valeur = analogRead(A5);
     
                // on traduit la valeur brute en tension (produit en croix)
     //     volt = valeur * 5.0 / 1023;
     
    //Si volt plus grand que voulu, on allume une LED :
     
            //    LED VERTE :
     if(volt <= rpe){
      digitalWrite(green,HIGH);
    }
     else {
      digitalWrite(green,LOW);
    }
     
      //    LED JAUNE :
     if(volt > rpe && volt <= re){
      digitalWrite(orange,HIGH);
    }
     else {
      digitalWrite(orange,LOW);
    }
     
      //    LED ROUGE :
     if(volt > re){
       digitalWrite(red,HIGH);
    }
     else {
       digitalWrite(red,LOW);
    }
     
     
                // on affiche la tension calculée
          Serial.print("volt= ");
          Serial.print(volt);
          Serial.println(" V");
     
               // on saute une ligne entre deux affichages
          Serial.println();
          delay(wait);
     
                // on affiche la valeur lue sur la liaison série
     
     //     Serial.print("valeur en bits= ");
    //      Serial.print(valeur);
     //     Serial.println(" /1023");
     
      //          // on saute une ligne entre deux affichages
      //    Serial.println( );
      //    delay(wait);
    }
    Il faut comprendre qu’un programme fait exactement ce qui est écrit et non ce que vous pensez qu’il doit faire et c’est tout à fait normal que la LED jaune s’allume. Car il y a une différence entre un type entier int rpe = 0.615;et un type float float volt=0.06;
    Le type entier comprend 0 et non 0.615 et donc bien normale que 0.06 > 0.
    volt > rpe && volt <= re sachant que c'est "vraie" que 0.06 > 0 et 0.6 < 1 alors la led jaune s'allume.
    à bientôt


  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Par défaut
    Citation Envoyé par sambia39 Voir le message
    Le type entier comprend 0 et non 0.615 et donc bien normale que 0.06[COLOR=#3E3E3E] > 0.
    Oui je viens de voir ça et j'allais vous prévenir de cette erreur de débutant (un peu débile...)
    C'est bon j'ai plus de pb de plusieurs led en même temps...
    Je dois encore avoir un souci avec ma lecture analogique car la valeur de 0.06V est bien trop stable dans le temps (même quand je touche ma jauge de contrainte), c'est étonnant (surtout avec un coef d'amplification de 500 et des fils à l'air...)
    Vous sauriez pourquoi si c'est un problème de pin ou software ? C'est peut être ma jauge qui est morte aussi je m'en vais vérifier tout ça...




    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
    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
     
          // ON DEFINI LES PIN :
     
    //int Tension = A5;
    int green = 2;
    int orange = 4;
    int red = 7;
     
    #define Tension A5
    //#define green 2
    //#define orange 4
    //#define red 7
     
    // VALEUR SORTIE DU CAN EN BITS :
    int valeur;
     
    // VALEUR CALCULEE EN VOLT A L'ENTREE DU CAN :
    float volt;
     
    // VALEURS LIMITES /
    const float rpe = 0.615;
    const float re = 1.235;
     
    // ATTENTE :
    const int wait = 500;
     
     
    void setup() {
     
    //INITIALISATION DES PIN :
    Serial.begin(9600);
    pinMode (Tension, INPUT);
     
    pinMode (green, OUTPUT);
    pinMode (red, OUTPUT);
    pinMode (orange, OUTPUT);
    }
     
     
    void loop() {
                // on convertit en nombre binaire la tension lue
          valeur = analogRead(A5);
     
                // on traduit la valeur brute en tension (produit en croix)
          volt = valeur * 5.0 / 1023;
     
    //Si volt plus grand que voulu, on allume une LED :
     
            //    LED VERTE :
     if(volt <= rpe){
      digitalWrite(green,HIGH);
    }
     else {
      digitalWrite(green,LOW);
    }
     
      //    LED JAUNE :
     if(volt > rpe && volt <= re){
      digitalWrite(orange,HIGH);
    }
     else {
      digitalWrite(orange,LOW);
    }
     
      //    LED ROUGE :
     if(volt > re){
       digitalWrite(red,HIGH);
    }
     else {
       digitalWrite(red,LOW);
    }
     
     
                // on affiche la tension calculée
          Serial.print("volt= ");
          Serial.print(volt);
          Serial.println(" V");
     
               // on saute une ligne entre deux affichages
          Serial.println();
          delay(wait);
     
                // on affiche la valeur lue sur la liaison série
     
          Serial.print("valeur en bits= ");
          Serial.print(valeur);
          Serial.println(" /1023");
     
                // on saute une ligne entre deux affichages
          Serial.println( );
          delay(wait);
    }

  8. #8
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Je rajouterai que ce n'est pas du C aussi
    Sur arduino c'est du C++ par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    // on affiche la tension calculée
          Serial.print("volt= ");
          Serial.print(volt);
          Serial.println(" V");

  9. #9
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Déjà le mot clef "and" n'existe pas en C. La syntaxe c'est if (volt >= rpe && volt <= re).
    Mais il existe en C++ et comme Arduino utilise un hybride (comme le signale Kannagi), ce code est valable sur Arduino

  10. #10
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Argh cte mauvaise foi d'arracheur de dent
    On est sur un fofo C. Si je vois un topic qui montre une erreur de syntaxe C je suis obligé de le dire. C'est mon honneur de Cman qui est en jeu
    Trop facile de venir poster un code C++ sur un fofo C et dire ensuite "oui mais en C++ ça marche et justement j'étais en C++"

    Remarque je pensais quand-même à un truc de ce genre. Je sais que son code ne peut pas compiler mais il l'avait posté avec tellement de naturel, et sans se plaindre de quoi que ce soit question syntaxe, que je me suis dit en postant ma remarque "je suis sûr que chez-lui ça compile" mais sans trop savoir pourquoi (je m'imaginais un truc un peu "spécial arduino" et j'ai pas pensé au C++).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    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
    D'après ma référence préférée (cppreference), and, or et d'autres sont des "alternative operators", définis dans <iso646.h>
    alternative operators

  12. #12
    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
    Citation Envoyé par Lucalo33 Voir le message
    Je dois encore avoir un souci avec ma lecture analogique car la valeur de 0.06V est bien trop stable dans le temps (même quand je touche ma jauge de contrainte), c'est étonnant (surtout avec un coef d'amplification de 500 et des fils à l'air...)
    Vous sauriez pourquoi si c'est un problème de pin ou software ? C'est peut être ma jauge qui est morte aussi je m'en vais vérifier tout ça...
    C’est tout à fait normal que vous captiez la BBC . Le fil que vous laissez "en l'air" agit comme une antenne parce qu'il y a une différence de potentiel. Vérifiez donc votre montage pour voir si votre Arduino a la même référence de potentiel (la masse) que votre OP.



    Citation Envoyé par Lucalo33 Voir le message
    => Pour les pin analogiques j'ai essayé avec "#define" puis avec "int" et le résultat est le même dans le moniteur du logiciel arduino (il m'affiche volt=0.06 V).
    Je comprend pas trop le problème que vous m'annoncez..
    Pour les PIN analogiques, le plus simple est d'utiliser directement la fonction analogRead(..) avec la référence en question sous cette forme analogRead(A5) ou const uint8_t analog_3 = 3; analogRead(analog_3). Et si j'ai parlé du mauvais emploi des broches analogiques, c'est parce qu'A5 (static const uint8_t A5 = 19;) est utilisé comme une référence qui représente la broche Analogique 5. Je reconnais que je me suis un peu emballé en avançant que le compilateur allait signaler une erreur ; ce n'est pas le cas. Cependant, en faisant pinMode (Tension, INPUT);, la broche analogique A5 sera utilisée, comme si c'était une broche numérique; de toute façon, les broches analogiques sont en réalité des broches numériques. C’est en utilisant la fonction analogRead(A5) qu’elles deviennent analogiques grâce au CNA qu'embarque la carte. Faire pinMode(A2,OUTPUT) est valide, car A0 à A5 sont des broches numériques qui peuvent traiter de l’analogique "uniquement en entrée" si l’on utilise la fonction analogRead(..). Or, ce n'est pas ce que vous souhaitez faire. Ce genre d'approche (pinMode (Tension, INPUT);) peut être justifié parce que vous ne disposez plus de broches numériques de libre (par exemple). Mais attention tout de même, si vous utilisez A5 comme sortie et que plus bas dans votre code vous utilisez analogRead(A5) alors la fonction analogRead(..) ne pourra pas fonctionner correctement, il faut alors la redéfinir en entrée pour que cela re-fonctionne de manière correcte.


    Citation Envoyé par Lucalo33 Voir le message
    => Le compilateur ne me dit rien et c'est d'après mes collègue la seule facon d'obtenir une valeur de tension (excepté les pins A0 A1 A2 A3 et A4)
    A5 n'est pas la seule possibilité que vous devez utiliser pour mesurer le voltage. A0 à A4 vous donnent également les mêmes possibilités.


    Citation Envoyé par Lucalo33 Voir le message
    => Pour le pont de wheatstone je récupère la tension en sortie d'AOP et le calcul est déja fait sur excel, je ne rentre que mes valeurs limites. En gros pour simplifier le problème ma tension est censé varier de 0 à 3.5 et je veux une led allumée par intervale.
    Désolé, je n’avais pas compris ça comme ça au départ. Hypothétiquement, je ne peux que deviner qu'à l'entrée de l'OP, il y a un pont de Wheatstone et en sortie de votre OP il y a la carte Arduino qui mesure la tension et qui allume les LED en fonction du voltage qui oscille et effectivement, comme vous oscillez entre 0-3.5 normalement, il ne devrait pas y avoir de soucis sauf s'il y a des fil en l'air/ non connecté.

    À bientôt.

Discussions similaires

  1. Problème avec ARDUINO MEGA
    Par cip.maldonado dans le forum Arduino
    Réponses: 3
    Dernier message: 26/04/2016, 08h55
  2. Problème avec la condition "else" et Crash Idle avec la touche ^
    Par pancakesnutella dans le forum Général Python
    Réponses: 5
    Dernier message: 25/03/2014, 23h06
  3. [Batch] Problème syntaxe avec condition if ( ) else () pour NT
    Par carreau dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 14/10/2011, 18h45
  4. Réponses: 9
    Dernier message: 29/03/2011, 20h45

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