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 :

Arduino pas stable


Sujet :

Arduino

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    juin 2010
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juin 2010
    Messages : 1 302
    Points : 493
    Points
    493
    Par défaut Arduino pas stable
    Je débute et j'avoue que le comportement de l'arduino me réroute un peu et me décourage

    Par exemple ce code :
    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
    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
    //Librairies
    #include <Arduino.h>
    #include "decodeurDCF77.h"
     
    #include <Wire.h>//https://www.arduino.cc/en/reference/wire
    #include <DS3231.h>//https://github.com/NorthernWidget/DS3231
     
    //Variables
    const uint8_t PIN_DCF77 = 3;
    boolean DATE_DCF77 = false;
    byte ESSAI_DCF77 = 0;
    byte JOUR_DCF77 = 0;
     
    byte Year ;
    byte Month ;
    byte Date ;
    byte DoW ;
    byte Hour ;
    byte Minute ;
    byte Second ;
    bool Century  = false;
    bool h12 ;
    bool PM ;
     
    //Objets
    DS3231 Clock;
     
    //Initialisation
    void setup()
    {
      pinMode(PIN_DCF77, INPUT);
      Serial.begin(115200);
      DATE_DCF77 = false;
      Serial.print("Initialisation");
      //Wire.begin();
    }
     
    //Programme principal
    void loop() 
    {
      //Mise à jour de la date et de l'heure si 
      if (DATE_DCF77 = true)
      {
        Serial.println("Maj de la date");
        Maj_Date();
      }
    }
     
    //Fonctions
    void Maj_Date()
    {
      //Le booléen passe à faux
      DATE_DCF77 = false;
     
      //Boucle de x cycles avec sortie si DCF77 = true
      while (ESSAI_DCF77 < 10) 
      {
        static uint8_t longueur = 0;
        bool trame_decodee = decodeurDCF77.traiterSignal(digitalRead(PIN_DCF77), millis());
     
        if (trame_decodee) 
        {
          Serial.print(' ');
          //Serial_printDCF77();
          DATE_DCF77 = true;
          JOUR_DCF77 = decodeurDCF77.jour();
     
          Serial.print("Oui:");
          Serial.print(JOUR_DCF77);
          //break;
        }
     
        if (longueur > decodeurDCF77.longueur_trame_en_cours())
        {
          longueur = 0;
          Serial.println();
          //ESSAI_DCF77 = ESSAI_DCF77 + 1;
          Serial.print("Nombre d'essai :");
          Serial.print(ESSAI_DCF77);
          Serial.println();
        }
     
        while (longueur < decodeurDCF77.longueur_trame_en_cours()) 
        {
          Serial.print(decodeurDCF77.bit_trame(longueur++));
        }
      }
    }
     
    void setDate( ) { /* function setDate */
     ////Set Real Time Clock
     if (Serial.available()) {
       //int _start = millis();
       GetDateStuff(Year, Month, Date, DoW, Hour, Minute, Second);
       Clock.setClockMode(false);  // set to 24h
       Clock.setSecond(Second);
       Clock.setMinute(Minute);
       Clock.setHour(Hour);
       Clock.setDate(Date);
       Clock.setMonth(Month);
       Clock.setYear(Year);
       Clock.setDoW(DoW);
     }
    }
     
    void GetDateStuff(byte& Year, byte& Month, byte& Day, byte& DoW, byte& Hour, byte& Minute, byte& Second) { /* function GetDateStuff */
     ////Get date data
     // Call this if you notice something coming in on
     // the serial port. The stuff coming in should be in
     // the order YYMMDDwHHMMSS, with an 'x' at the end.
     boolean GotString = false;
     char InChar;
     byte Temp1, Temp2;
     char InString[20];
     byte j = 0;
     while (!GotString) {
       if (Serial.available()) {
         InChar = Serial.read();
         InString[j] = InChar;
         j += 1;
         if (InChar == 'x') {
           GotString = true;
         }
       }
     }
     Serial.println(InString);
     // Read Year first
     Temp1 = (byte)InString[0] - 48;
     Temp2 = (byte)InString[1] - 48;
     Year = Temp1 * 10 + Temp2;
     // now month
     Temp1 = (byte)InString[2] - 48;
     Temp2 = (byte)InString[3] - 48;
     Month = Temp1 * 10 + Temp2;
     // now date
     Temp1 = (byte)InString[4] - 48;
     Temp2 = (byte)InString[5] - 48;
     Day = Temp1 * 10 + Temp2;
     // now Day of Week
     DoW = (byte)InString[6] - 48;
     // now Hour
     Temp1 = (byte)InString[7] - 48;
     Temp2 = (byte)InString[8] - 48;
     Hour = Temp1 * 10 + Temp2;
     // now Minute
     Temp1 = (byte)InString[9] - 48;
     Temp2 = (byte)InString[10] - 48;
     Minute = Temp1 * 10 + Temp2;
     // now Second
     Temp1 = (byte)InString[11] - 48;
     Temp2 = (byte)InString[12] - 48;
     Second = Temp1 * 10 + Temp2;
    }
    Il fonctionnait bien et puis d'un seul coup, plus moyen.
    Et je découvre que le booléen que je test ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (DATE_DCF77 = true)
      {
        Serial.println("Maj de la date");
        Maj_Date();
      }
    Alors qu'il est initialisé à faux !
    Et bien il est à vrai
    A la première exécution du loop (donc le booléen devrait être = à faux compte tenu du code d'initialisation) le booléen est à vrai et je ne comprend absolument pas pourquoi.
    Ca n'a rien de logique

    J'ai téléverser un sketch vide histoire de m'assurer que la carte ne garde par de reliques dans ses mémoires
    Mais pas mieux
    Une autre carte, idem

    Je finis par me demander si Arduino c'est pas de la mer... en fait

    Si quelqu'un à une explication logique à cela, je serais bien curieux de comprendre pour un code aussi simple ne marche pas

    Merci de votre aide
    Les solutions les plus simples sont les plus efficaces

  2. #2
    Responsable Arduino et Systèmes Embarqués

    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    janvier 2009
    Messages
    11 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : janvier 2009
    Messages : 11 395
    Points : 49 429
    Points
    49 429
    Billets dans le blog
    18
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (DATE_DCF77 = true)
      {
        Serial.println("Maj de la date");
        Maj_Date();
      }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (DATE_DCF77 == true)
    Le test d'égalité se fait avec un double-égal

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    juin 2010
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juin 2010
    Messages : 1 302
    Points : 493
    Points
    493
    Par défaut
    Merci f-leb

    Mais pouquoi le = simple ne provoque pas d'erreur alors si c'est un == qu'il faut ?
    Il a une autre signification ?

    Question générale : C'est stable et solide un Arduino ?

    Merci de ton aide
    Les solutions les plus simples sont les plus efficaces

  4. #4
    Responsable Arduino et Systèmes Embarqués

    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    janvier 2009
    Messages
    11 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : janvier 2009
    Messages : 11 395
    Points : 49 429
    Points
    49 429
    Billets dans le blog
    18
    Par défaut
    Il n'y a pas d'erreur de syntaxe, on peut faire une affectation intégrée dans un test.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( (z = (x > y)) == true)  // équivalent à if ( z = (x > y) )
    est vrai si le calcul de z donne un résultat Vrai.

    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( (DATE_DCF77 = true) == true)
    test qui est donc toujours vrai puisque tu affectes Vrai à DATE_DCF77


    Dans des conditions d'utilisation normales, ces bestioles sont fiables. J'ai des Arduino toujours actifs après plusieurs années de fonctionnement.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance en conception mécanique et prototypage
    Inscrit en
    novembre 2006
    Messages
    20 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance en conception mécanique et prototypage

    Informations forums :
    Inscription : novembre 2006
    Messages : 20 129
    Points : 53 252
    Points
    53 252
    Par défaut
    Citation Envoyé par f-leb Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (DATE_DCF77 == true)
    Le test d'égalité se fait avec un double-égal
    C'est pourquoi on peut aussi écrire la condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (true == DATE_DCF77)
    Qui donnera une erreur de compilation si on utilise l'opérateur d'affectation =

    Ou encore se passer du test dans ce cas précis :
    Ou pour la condition inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (false == DATE_DCF77)
    Et :
    Il y a également des informations utiles dans la FAQ C

    Citation Envoyé par lololebricoleur Voir le message
    Question générale : C'est stable et solide un Arduino ?
    C'est quoi ta définition de stable et solide ?
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    juin 2010
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juin 2010
    Messages : 1 302
    Points : 493
    Points
    493
    Par défaut
    Merci Jérôme

    Pour moi, "Stable" est le contraire d'erratique.
    Tu vois, un système qui ne se comporte pas de manière "imprévisible" ou différemment d'une fois pour l'autre sans explication rationnelle. pas comme Windows par exemple.

    Pour "Solide" je dirais qu'un projet bâti sur un arduino peut tourner pendant des lustres sans broncher
    Les solutions les plus simples sont les plus efficaces

  7. #7
    Membre émérite

    Homme Profil pro
    mad scientist :)
    Inscrit en
    septembre 2019
    Messages
    1 501
    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 : 1 501
    Points : 2 727
    Points
    2 727
    Par défaut
    Oui j’ai aussi des projets déployés depuis plusieurs années qui fonctionnent sans soucis 24/24 dont certains en extérieur

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    juin 2010
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juin 2010
    Messages : 1 302
    Points : 493
    Points
    493
    Par défaut
    Ok, merci Jay ;-)
    Les solutions les plus simples sont les plus efficaces

Discussions similaires

  1. Application dont la connexion n'est pas stable
    Par nolll77 dans le forum Général Java
    Réponses: 2
    Dernier message: 13/06/2018, 14h27
  2. [SP-2007] Navigation site web SharePoint pas stable!
    Par ghaziabassi dans le forum SharePoint
    Réponses: 0
    Dernier message: 28/08/2009, 14h58
  3. dessin sur panel pas stable
    Par Dikoudogo dans le forum Graphisme
    Réponses: 1
    Dernier message: 26/10/2008, 22h27
  4. Slackware : Stable ou pas?
    Par Fractal LLG dans le forum Autres
    Réponses: 6
    Dernier message: 05/08/2008, 15h26
  5. Fenêtre pas stable lors lecture script
    Par maiore dans le forum Général Python
    Réponses: 3
    Dernier message: 07/03/2007, 11h31

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