Topic "Faire une barre de progression avec Arduino et LiquidCrystal"

Flux RSS des posts récents dans ce topic ( Flux Atom)


Photo de profil de skywodd

skywodd

Membre

Membre du staff

#33 | Signaler ce message


Dans ce tutoriel, nous allons réaliser une barre de progression à l'aide de la bibliothèque LiquidCrystal, d'un écran LCD alphanumérique et d'une carte Arduino / Genuino. Nous commencerons d'abord par faire une barre de progression extrêmement simple. Nous ferons ensuite deux autres itérations du code, un peu plus complexe cette fois, afin d'accéder au Saint Graal de la barre de progression.

Lire la suite de l'article sur le site

Derniére modification le par skywodd


Pas de photo de profil

weetoz

Membre

#42 | Signaler ce message


Salut Skywodd!!

Super tuto, je me suis bien amusé!!

J' essais maintenant de faire une barre de progression verticale, c' est pas la même approch dans la fonction " draw_progressbar(byte percent) ", mais je trouverais bien comment faire.

Un grand merci!


Photo de profil de skywodd

skywodd

Membre

Membre du staff

#44 | Signaler ce message


J' essais maintenant de faire une barre de progression verticale, c' est pas la même approche dans la fonction " draw_progressbar(byte percent) ", mais je trouverais bien comment faire.

par weetoz

Une barre verticale ? Sur un caractère de haut ?

Derniére modification le par skywodd


Pas de photo de profil

weetoz

Membre

#47 | Signaler ce message


Une barre verticale ? Sur un caractère de haut ?

Sur deux et quatre caractères, ( je commence par quatre, j' ai câblé un LCD 20x4 pour le tuto ).

La fonction LCD.write() donne des résultats inattendu pour le moment, et comme je ne suis pas à mon aise avec le fonctionnement des variables static, je vais revoir la fonction "progressBar" a ma sauce.

Je vous tiens au jus!


Photo de profil de skywodd

skywodd

Membre

Membre du staff

#52 | Signaler ce message


La fonction LCD.write() donne des résultats inattendu pour le moment, et comme je ne suis pas à mon aise avec le fonctionnement des variables static, je vais revoir la fonction "progressBar" a ma sauce.

par weetoz

Attention, après chaque utilisation de createChar() (ou après une série de createChar()), il faut faire une clear() ou setCursor(). Si ce n'est pas fait, les caractères personnalisés ne vont pas s'afficher ou vont afficher des caractères bizarres.

C'est un bug "à la con" dans LiquidCrystal dû à une mauvaise gestion des adresses mémoires.


Photo de profil de Ecua

Ecua

Membre

#80 | Signaler ce message


"à Maker vaillant rien d’impossible" juste mort de rire !

Je n'ai pas encore tout bien saisi de l'article (pour ne pas dire pas grand chose…) mais merci pour le fou rire ^^

Derniére modification le par Ecua


Pas de photo de profil

rospclan

Membre

#289 | Signaler ce message


Salut,

pas certain d'avoir une réponse mais je tente ma chance. Comment dois je faire pour ralentir la vitesse de progression?

Merci d'avance et bravo pour cet article très bien expliqué.


Photo de profil de skywodd

skywodd

Membre

Membre du staff

#290 | Signaler ce message


Comment dois je faire pour ralentir la vitesse de progression?

par rospclan

La vitesse de progression est liée à la vitesse de l'appel à draw_progressbar().

Dans mon exemple, il suffit de modifier la ligne :

1
2
/* Petit temps d'attente */
delay(100);

Un délai de 500 millisecondes sera 5 fois plus lent par exemple.


Pas de photo de profil

rospclan

Membre

#291 | Signaler ce message


Merci pour cette réponse rapide. Une dernière question, je voudrais que la barre de progression puisse également diminuer lorsqu'une condition est présente, une piste à me donner ?


Pas de photo de profil

weetoz

Membre

#292 | Signaler ce message


Bonsoir rospclan,

c'est dans cette partie de code que cela va ce passer:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
 for (byte i = 0; i < LCD_NB_COLUMNS; ++i) {

    /* En fonction du nombre de colonnes restant à afficher */
    if (nb_columns == 0) { // Case vide
      lcd.write((byte) 0);

    } else if (nb_columns >= 5) { // Case pleine
      lcd.write(5);
      nb_columns -= 5;

    } else { // Derniére case non vide
      lcd.write(nb_columns);
      nb_columns = 0;
    }
  }

Tu peux par exemple créer ta condition en dessous de la boucle for qui aiguillera vers ta boucle for .

1
2
3
4
5
6
    
     if(macondition){
        for (intj=LCD_NB_COLUMNS;i=0;i--){
             // réadapter ici les conditions d'écriture et de changement de case
         }
     }   

Pas de photo de profil

rospclan

Membre

#293 | Signaler ce message


J'essaye de faire fonctionner ça, un très grand merci pour cette aide précieuse.


Photo de profil de skywodd

skywodd

Membre

Membre du staff

#296 | Signaler ce message


La fonction draw_progressbar() prend en argument le pourcentage à afficher.

Il suffit de faire diminuer le pourcentage (voir boucle for dans la fonction loop() du code d'exemple) pour faire diminuer la barre de progression. Pas besoin de modifier le code de la fonction draw_progressbar().

Bouton appuyé == augmentation du pourcentage :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
void loop(){
 
  /* Valeur en pourcentage de la barre de progression */
  static byte percent = 0;
 
  /* Affiche la valeur */
  draw_progressbar(percent);

  /* Incrémente le pourcentage */
  if (++percent == 101) {
    // Revient à zéro si le pourcentage dépasse 100%
    percent = 0;
    delay(1000);
  }

  /* Petit temps d'attente */
  delay(100);
}

Bouton appuyé == diminution du pourcentage :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
void loop(){
 
  /* Valeur en pourcentage de la barre de progression */
  static int percent = 100;
 
  /* Affiche la valeur */
  draw_progressbar(percent);

  /* Décrémente le pourcentage */
  if (--percent == -1) {
    // Revient à 100% si le pourcentage dépasse 0%
    percent = 100;
    delay(1000);
  }

  /* Petit temps d'attente */
  delay(100);
}

Bouton appuyé == augmentation puis diminution du pourcentage :

 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
void loop(){
 
  /* Valeur en pourcentage de la barre de progression */
  static int percent = 0;
  static byte augmente_valeur = true;
 
  /* Affiche la valeur */
  draw_progressbar(percent);

  /* Incrémente le pourcentage */
  if (augmente_valeur) {
    if (++percent == 101) {
      percent = 100;
      augmente_valeur = false;
      delay(1000);
    }

  /* Décrémente le pourcentage */
  } else {
    if (--percent == -1) {
      percent = 0;
      augmente_valeur = true;
      delay(1000);
    }
  }

  /* Petit temps d'attente */
  delay(100);
}