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 :

Affichage LCD sans fonction Delay


Sujet :

Arduino

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2021
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Affichage LCD sans fonction Delay
    Bonjour,

    Je n'arrive pas à remplacer la fonction delay par la fonction millis dans l'affichage du LCD. Je cherche à me dédouaner de la fonction delay afin de traitrer en temps réel l'ADC. Je dois traiter par un changement d'état, et je ne pige pas purquoi.???

    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
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include "MCP_ADC.h"
     
    MCP3008 mcp1; // use HWSPI
     
    LiquidCrystal_I2C lcd(0x38, 16, 2);
    String text = "La tension sur le channel 0 est de : ";
    unsigned long long prevMillis = 0; //variable sur 32 bits
    unsigned long long tempo = 200;//fixe une tempo de 200 ms
     
    bool State = LOW;
     
    void setup()
    {
      Serial.begin(9600);
     
      mcp1.begin(10);
     
      lcd.init();
      lcd.cursor_on();
      // lcd.blink_on();
      lcd.backlight();
     
      lcd.setCursor(2, 0);
      lcd.home();
    }
     
    void loop()
    {
     
      float val = mcp1.analogRead(0);
      val = val * 5;
      val = val / 1000;
     
      if ((millis() - prevMillis) > tempo) {
        State = ! State;
     
     
        if (!State)
        {
          lcd.print("<<<");
          lcd.print(text);
          lcd.print(val);
          lcd.print(" volts");
          lcd.print(">>>");
     
     
          for (int a = 0; a < 55; a++)//permet de faire défiler le texte de droite à gauche
          {
            lcd.scrollDisplayLeft();
          }
        }
        prevMillis = millis();
      }
     
    }

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Bonjour,

    Qu'est-ce qui ne fonctionne pas ?
    Quel est le comportement attendu ?
    Quel est le comportement obtenu ?

    PS : avec un peu d'indentation le programme serait beaucoup plus lisible...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    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 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Bonjour Fred

    Ta transformation de delay en millis fonctionne très bien, toutes les 200 milliSecondes. Par contre le scroll du texte, c'est un peu le "fouilli"
    Je n'ai pas d'expérience de la chose, mais je ne crois pas que tu puisses faire comme ça, surtout que tu scroll le texte 55 fois toutes les 200 mS. et, en plus ce texte dépasse certainement la capacité de ton affichage (2x16).
    Je pense qu'il faille faire une String qui contient le texte à afficher, String sur la quelle on "promenerai" une fenêtre de 2x16, cette fenêtre serait décalée de 1 à chaque période (peut être y as-t-il une bibliothèque pour ça?) , fenêtre qui serait affichée par un lcd.home, suivi d'un lcd.print

    Dès que j'ai du temps, j'essayerai de te faire un exemple de comment je vois la chose.

    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Citation Envoyé par jpbbricole Voir le message
    tu scroll le texte 55 fois toutes les 200 mS.
    Toutes les 400 ms plutôt ; une fois sur deux State est à l'état HIGH et l'affichage n'est pas effectué.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    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 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Bonjour al1_24
    Citation Envoyé par al1_24 Voir le message
    Toutes les 400 ms plutôt ; une fois sur deux State est à l'état HIGH et l'affichage n'est pas effectué.
    Oupssss, bien sûre, j'avais supprimé ce "toggle" dans mon essai!

    Bon appétit
    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

Discussions similaires

  1. Que se passe t-il sans fonction exit?
    Par Poseidon13 dans le forum C
    Réponses: 7
    Dernier message: 21/10/2005, 18h47
  2. fonction delay?
    Par in tenebris dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/02/2005, 11h37
  3. affichage forme en fonction de la resolution de l'ecran
    Par shiners300 dans le forum C++Builder
    Réponses: 1
    Dernier message: 24/11/2004, 14h33
  4. affichage dynamique en fonction des données en base
    Par jengo dans le forum Bases de données
    Réponses: 1
    Dernier message: 28/10/2004, 10h22

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