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 :

Wemos - Erreur de compilation


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 967
    Par défaut Wemos - Erreur de compilation
    Bonjour à tous,

    j'essaie de compiler un programme trouvé sur le net
    https://www.instructables.com/MQTT-S...ature-Monitor/

    j'ai une erreur à la compilation dont je ne connais pas la signification
    ( le terme 'return' semble pourtant bien noté )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    control reaches end of non-void function [-Werror=return-type]
    dans ce sous-programme :
    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
     
    byte Check_AP_Switch() // returns value depending on how long the AP button is pressed  
    {
      unsigned long Switch_Pressed_Time; 
      if(digitalRead(AP_Switch) == AP_SwitchOff )   // read & test the button status
      {       // if not pressed
          Time_Start = millis();   // get time marker in readiness for switch being pressed
          return 0;
      }
      else // switch is ON
      {
        while (digitalRead(AP_Switch) == AP_SwitchOn)  // wait until button is released
        {
          delay(10);
          Switch_Pressed_Time = millis() - Time_Start;  // calculate the time since button was pressed(mS)
        }
              // button released
        //if (EnableMessages) Serial.println(Switch_Pressed_Time);     // Diagnostic - button duration time (mS) 
        if(Switch_Pressed_Time >= 1000) return 1;   // Wake up Access point
        if(Switch_Pressed_Time <  1000)  return 0;   // button not pressed long enough
      }  // end of else // switch is ON
    }     // end of byte Check_AP_Switch()
    Vos conseils me seraient précieux
    Mille mercis

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 908
    Par défaut
    Ça veut dire que le compilateur a détecté un chemin qui emmène à la fin de la fonction et qu’il n’y a pas de return d’une valeur du type attendu ou pas de return du tout

    Dans votre cas c’est si vous rentrez dans le else le compilateur ne voit pas que les 2 if couvrent toutes les possibilités, le second if ne sert à rien il suffit de l’enlever

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    else // switch is ON
      {
        while (digitalRead(AP_Switch) == AP_SwitchOn)  // wait until button is released
        {
          delay(10);
          Switch_Pressed_Time = millis() - Time_Start;  // calculate the time since button was pressed(mS)
        }
              // button released
        //if (EnableMessages) Serial.println(Switch_Pressed_Time);     // Diagnostic - button duration time (mS) 
        if(Switch_Pressed_Time >= 1000) return 1;   // Wake up Access point
        return 0;   // button not pressed long enough
      }  // end of else // switch is ON
    }     // end of byte Check_AP_Switch()

  3. #3
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 346
    Par défaut
    tu es censé retourner un byte dans ta fonction mais si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(digitalRead(AP_Switch) == AP_SwitchOff )
    cette condition n'est pas satisfaite que retourne tu?

  4. #4
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 967
    Par défaut
    Merci à tous

    Effectivement , la suppression de la ligne concernée résout le problème

    Par contre, il faut que je change de lunettes

    Merci encore et mille pardons pour le dérangement


    Bonne Journée
    pascal

  5. #5
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 785
    Par défaut
    Hello,

    Une autre manière de faire: return Switch_Pressed_Time >= 1000 ? 1 : 0;

  6. #6
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 967
    Par défaut
    Merci edgarjacobs
    c'est bien noté et plus simple visiblement

  7. #7
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 908
    Par défaut
    Citation Envoyé par licardentaistor Voir le message
    tu es censé retourner un byte dans ta fonction mais si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(digitalRead(AP_Switch) == AP_SwitchOff )
    cette condition n'est pas satisfaite que retourne tu?
    Si cette condition n'est pas satisfaite, le code rentrait dans le else où on trouvait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        if(Switch_Pressed_Time >= 1000) return 1;   // Wake up Access point
        if(Switch_Pressed_Time <  1000)  return 0;   // button not pressed long enough
    donc dans tous les cas il y avait un return et le code était réellement fonctionnel

    cependant le compilateur n'a pas été assez malin pour voir que >= 1000 et < 1000 étaient complémentaires et donc que dans tous les cas il y avait bien un return, d'où le message.

    en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        if(Switch_Pressed_Time >= 1000) return 1;   // Wake up Access point
        return 0;   // button not pressed long enough
    ou comme proposé par @edgarjacobs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     return Switch_Pressed_Time >= 1000 ? 1 : 0;
    ou encore juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     return Switch_Pressed_Time >= 1000; // le bool sera promu en entier 0 ou 1, et la fonction serait mieux si elle retournait un bool
    le compilateur "retrouvait ses petits" et ne met plus l'erreur

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

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. Erreur de compilation du noyau
    Par pierreg dans le forum Administration système
    Réponses: 12
    Dernier message: 31/01/2007, 18h53
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

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