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 MEGA: commander une sortie +5V sans relais ?


Sujet :

Arduino

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Par défaut
    Bon, programme modifié, et malheureusement erreur de compilation, il semble que "color" ne soit pas reconnu dans la boucle For. voici le message:
    exit status 1
    'color' was not declared in this scope
    purée 2 jours pour éteindre un LCD et ça ne veut toujours pas...

  2. #22
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 019
    Par défaut
    C'était juste pour la fonction pwm, essaies l'exemple complet ici.

    Cordialement
    jpbbricole

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Par défaut
    C'est ce que je viens d'essayer, mais je dois commencer à fatiguer...
    Comme mon besoin est d'éteindre puis de rallumer (ultérieurement à un moment de mon choix), j'ai besoin de deux fonctions, alors que "breath" allumes puis éteint dans la continuité.

    Puis-je couper "breath" en deux parties "BreathUP" et "BreathDown" (?), dans le genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void breathUp(unsigned char color){
        for(int i=0; i<255; i++){
            lcd.setPWM(color, i);
            delay(5);
        }
    puis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void breathDown(unsigned char color){
        for(int i=254; i>=0; i--){
            lcd.setPWM(color, i);
            delay(5);
        }
    Il faudrait que je déclare ces 2 fonctions dans le Setup, mais alors comment je les appelle dans mes boucles if ??

  4. #24
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 935
    Par défaut
    @JP "dans un cadre Arduino" Sincèrement on dirait vraiment que c'est un principe à géométrie variable pour justifier une certaine complaisance à rester dans une médiocrité et un manque d'ambition dans l'apprentissage. Tout le monde n'est pas dans votre cas, ne faites pas de la généralisation abusive.

    D'une part, et pour reprendre votre argument, pour faire de l'Arduino, on utilise l'IDE proposé par Arduino et les bibliothèques fournies par Arduino. Dès que l'on va chercher un autre IDE ou que l'on prend des bibliothèques non estampillées Arduino, on est déjà rentré dans un autre monde. Et donc quand ça ne marche pas, ça ne marche pas... Il faut se débrouiller: les solutions existent: il faut lire la doc, quand il n'y a pas de doc, on lit ce que l'on a, soit des exemples, soit le code source. et il y a des forum pour aider.

    @Nounours18200

    Citation Envoyé par Nounours18200 Voir le message
    J'avais beaucoup d'espoir avec les méthodes "void on();" et "void off();", mais elles n'ont absolument aucun effet sur l'affichage.
    Comme je le disais ci dessous, elles sont déclarées mais l'auteur a mis en commentaire que ce n'était pas implémenté. Regardez dans le code et vous verrez qu'elles ne font absolument rien, il n'y a pas une seule ligne de code entre es deux accolades de la fonction (méthode)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /************************unsupported API functions***************************/
    void DFRobot_LCD::off(){}
    void DFRobot_LCD::on(){}

    essayez pour éteindre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lcd.setPWM(REG_ONLY, 0); // extinction de l'écran
    et pour allumer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lcd.setPWM(REG_ONLY, 255);  // allumage de l'écran

  5. #25
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 019
    Par défaut
    Bonjour Nounours18200
    Citation Envoyé par Nounours18200 Voir le message
    Il faudrait que je déclare ces 2 fonctions dans le Setup, mais alors comment je les appelle dans mes boucles if ??
    Il n'y a rien à déclarer dans Setup
    Quand la condition pour éteindre est vraie tu fais void breathDown(unsigned char color)
    Quand la condition pour allumer est vraie tu fais void breathUp(unsigned char color)

    A+
    Cordialement
    jpbbricole

  6. #26
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Par défaut
    Bravissimo Jay M : ça fonctionne nickel ! (juste besoin d'une temporisation).

    Bon maintenant j'aimerais comprendre: où as-tu trouvé les arguments à utiliser pour la fonction lcd.setPWM ?

    Tu as utilisé (REG_ONLY, 0) et (REG_ONLY, 255), mais comment doit-on les interpréter ?

  7. #27
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 935
    Par défaut
    Citation Envoyé par Nounours18200 Voir le message
    Bravissimo Jay M : ça fonctionne nickel ! (juste besoin d'une temporisation).

    Bon maintenant j'aimerais comprendre: où as-tu trouvé les arguments à utiliser pour la fonction lcd.setPWM ?

    Tu as utilisé (REG_ONLY, 0) et (REG_ONLY, 255), mais comment doit-on les interpréter ?
    j'ai regardé comment était écrit la fonction breath()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void breath(unsigned char color){
        for(int i=0; i<255; i++){
            lcd.setPWM(color, i);
            delay(5);
        }
     
        delay(500);
        for(int i=254; i>=0; i--){
            lcd.setPWM(color, i);
            delay(5);
        }
     
        delay(500);
    }
    on voit qu'il y a deux boucles avec un i qui varie entre 0 et 254. Ce i sert de second paramètre à la méthode setPWM() alors que le premier est constant (color). Donc on peut se dire que c'est sans doute ce qui définit la luminosité de l'écran: plus i augmente et plus l'écran est rétro-éclairé.
    Ensuite il fallait trouver quoi passer comme premier paramètre (color). Pour cela il suffisait de regarder comment était appelée la fonction breath(). Dans la loop() ils avaient certains appels commentés, je suppose que c'est pour les écrans qui ont un rétro-éclairage en RGB. le dernier était celui que vous utilisiez et donc on passait le paramètre REG_ONLY à la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     void loop() {
       //breath(REG_RED);
       //breath(REG_GREEN);
       //breath(REG_BLUE);
         breath(REG_ONLY);
    }
    et donc on avait la valeur à fournir pour color.

    ça aide?

    et si vous vouliez un allumage ou extinction progressive et pas d'un coup, les fonctions que vous aviez essayé d'écrire ne sont pas mal du tout!! (vous y étiez presque) Vous déclarez deux nouvelles fonctions (allumer() et éteindre()) avant le setup()

    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
    void allumer()
    {
      for (int i=0; i<=255; i++){
            lcd.setPWM(REG_ONLY, i);
            delay(4);
        }
    }
    
    void eteindre()
    {
      for (int i=255; i >=0; i--){
            lcd.setPWM(REG_ONLY, i);
            delay(4);
        }
    }
    
    void setup() 
    {
     ....
    et vous pouvez appeler partout où vous en avez besoin dans le sketch les fonction allumer(); ou eteindre(); qui vont mettre 256*4=1024 millisecondes environ à s'exécuter (environ 1 seconde).

  8. #28
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Par défaut
    Je vais t'appeler "Maître Jay M" !

    Effectivement j'ai tout compris de ton explication, mais c'était le paramètre FREG_ONLY que je n'avais pas identifié....
    C'est là qu'on voit que j'ai pris quelques années depuis le temps où je programmais...

    Je ferai une prochaine version du programme avec extinction et allumage progressifs : maintenant que l'on sait que le 1er paramètre est REG_ONLY...

    Pour info, l'autre idée qui consistait à piloter un relais pour couper l'alimentation du LCD puis la remettre ne fonctionnerait pas: j'ai testé et si on coupe l'alim 5V du LCD, lorsqu'on la remet celui-ci ne redémarre pas (j'ai déjà eu le cas avec beaucoup de LCD d'appareils commerciaux...)

    Mille mercis Jay M: je passe le sujet en résolu.

  9. #29
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 935
    Par défaut
    Citation Envoyé par Nounours18200 Voir le message
    Je vais t'appeler "Maître Jay M" !
    LOL - ravi d’avoir pu aider

  10. #30
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Par défaut
    @Jay-M:

    Juste pour info, je viens d'implanter les fonctions "allumer();" et "eteindre();" telles que décrites plus haut, et ça marche nickel: c'est quand même plus agréable à l'oeil qu'une extinction brutale..

    Merci et @+

  11. #31
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 935
    Par défaut
    cool !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 7
    Dernier message: 28/07/2013, 20h08
  2. Commander une carte relais à partir de VB
    Par boboch dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 27/01/2012, 09h51
  3. Redirection d'une commande dans sortie
    Par fabou3377 dans le forum Linux
    Réponses: 3
    Dernier message: 05/01/2009, 14h52
  4. Réponses: 3
    Dernier message: 01/09/2008, 12h17
  5. Réponses: 5
    Dernier message: 16/03/2007, 13h16

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