Affichage 4 chiffres 7 segments

Bonjour

Je souhaite afficher un nombre ( 4567 ) sur mon afficheur

Le code fonctionne

Je ne comprends pas très bien

  1. display ( Nbre) --> que fait exactement cette instruction ?

  2. void display ( int val) --> pourquoi un (int val )

#include "TM1636.h"

TM1636 tm1636(7,8);

int Nbre = 4567;

void setup()
{
  Serial.begin(9600);
  tm1636.init();
}
  
void loop()
{
  display (Nbre);
}

void display (int val) 
{
  Serial.print("val:");
  Serial.println(val);
  
   int8_t disp[4];
  
  for (int i=3; i>=0 ; i--)
  {
    disp[i]=val%10;
    
    Serial.println(i);
    Serial.println(val%10);
    val/=10;
   }
   
   tm1636.display(disp);
   
   }
  1. Comment devrais je procéder si je voulais afficher 12,3 ?

Merci

Cordialement chris62

la fonction display prend en paramètre un nombre (idéalement de 4 chiffres ou moins) genre 1234 et dans la première boucle for le décompose en ces chiffres élémentaires et les range dans le tableau disp

la boucle fait cela en utilisant le modulo et la division:

1234 % 10 ==> c'est le reste de la division par 10 de 1234. comme 1234 = 123*10 + 4, le modulo c'est 4, donc bien le dernier élément de notre nombre. on range ça dans disp[ 0 ]

ensuite ils font val/=10; --> c'est à dire qu'ils mettent dans val (valeur entière) le résultat de val divisé par 10.

1234 / 10 en nombre entier c'est 123.

et on recommence

123 % 10 ==> c'est le reste de la division par 10 de 123. comme 123 = 12*10 + 3, le modulo c'est 3, donc bien le dernier élément de notre nombre. on range ça dans disp[ 1 ]

ensuite ils font val/=10; --> c'est à dire qu'ils mettent dans val (valeur entière) le résultat de val divisé par 10.

123 / 10 en nombre entier c'est 12.

12 % 10 ==> c'est le reste de la division par 10 de 12. comme 12 = 1*10 + 2, le modulo c'est 2, donc bien le dernier élément de notre nombre. on range ça dans disp[ 2 ]

ensuite ils font val/=10; --> c'est à dire qu'ils mettent dans val (valeur entière) le résultat de val divisé par 10.

12 / 10 en nombre entier c'est 1.

1 % 10 ==> c'est le reste de la division par 10 de 1. comme 1 = 0*10 + 1, le modulo c'est 1, donc bien le dernier élément de notre nombre. on range ça dans disp[ 3 ]

Là on a finit la boucle et le tableau disp contient {4,3,2,1} et il se trouve que c'est ce qu'attend la fonction tm1636.display() pour afficher cela sur votre afficheur (càd les chiffres individuels qui composaient votre nombre).

Merci J.M.L

Et pour afficher 12,3 ou 12.3 comment procède t on ?

Cordialement

est-ce que vos afficheurs disposent d'un point décimal addressable?

si oui il faut allumer ce point. regardez si votre librairie propose cela

je recommande de commencer par lire ceci, ça vous permettra de mieux comprendre comment ça fonctionne

et cf les post de @pepe aussi ci dessus à lire

J utilise l afficheur qui est sur le tick tock Shield

Merci JML

je m y attelle demain
Mais le bp c est le temps

Cordialement

Bonjour,

Effectivement comme le dit pepe le modèle d'afficheur du tick toc shield ne peut pas afficher les points décimaux.
J'ai testé l'afficheur et seul les ':' du digit 2 peuvent être allumés. Les points décimaux ne sont pas reliés.

Bonjour et merci pour ces très précieux renseignements.

Cordialement