inversion de valeur sur afficheur 7 segments

Bonjour

Dans le code 1 l'afficheur affiche bien 4896

#include "TM1636.h"

TM1636 tm1636(7,8);

int Nbre = 4896;

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

void display (int val) 
{
  int8_t disp[4];
  
  for (int i=4-1; i>=0 ; i--)
  {
    disp[i]=val%10;
    val/=10;
  }
  
  tm1636.display(disp);
  
  }

D'ailleurs pourquoi écrire for ( int i=4-1 ....... et non pas for ( int i=3 .....................

Par contre dans le code 2 l'afficheur affiche le nombre à l'envers soit 6984

#include "TM1636.h"

TM1636 tm1636(7,8);

int Nbre = 4896;

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

void display (int val) 
{
  int8_t disp[4];
  
  for (int i=0; i<=4 ; i++)
  {
    disp[i]=val%10;
    val/=10;
    
  }
  
  tm1636.display(disp);
  
  }

Merci pour votre aide

Cordialement Chris

Dans le code 1

#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;
    val/=10;
    Serial.println(i);
    Serial.println(val%10);
   }
   
   tm1636.display(disp);
   
   }

Sur le moniteur série je lis

Val: 4567
3
6
2
5
1
4
0
0
Val: 4567

Pourquoi n arrive je pas à lire le 7 ??? Il est passé ou ?

Pourquoi écrire 4-1: pour plus de clarté. On veut décrémenter i, et compter 4 valeurs. Si l'on Commençait à 4, on en aurait 5 (4, 3, 2, 1 et 0). Cela étant, il serait plus propre d'écrire, pour arriver au même résultat, ceci:

for(int i = 4; i > 0; i--){}

Dans le deuxième cas, puisque l'on compte de 1 à 4, il faudrait remplacer le <= par < :

for(int i = 0; i < 4; i++){}

Tel que tu l'as écris tu vas faire cinq boucles, puisque tu va compter 0, 1, 2, 3 et finalement 4, avant que la condition ne soit plus vérifiée.
Maintenant, pour la question de l'inversion: Dans le premier cas, tu stocke dans ton tableau à la position 4 ( disp[3] ) la valeur des unités (4896 % 10 = 6; 4896 /10 = 489, reste 6), puis à la position 3 la valeur des dizaines (puisque val a été divisée par 10 après avoir enregistré la valeur dans le tableau), ainsi de suite.
Dans le deuxième cas, tu stocke les unités à l'index 0, les dizaines à l'index 1, etc. Il est donc normal que le résultat soit en miroir, puisque l'ordre de défilement des index est inversé, alors que l'opération de stockage est la même.
Au passage, le tableau pourrait être des bytes ou des chars, puisque ce sera toujours un nombre entre 0 et 9.

Pour la question de ton dernier post (où est passé le 7), c'est très simple: il a disparu, puisque tu as divisé val par 10 avant de faire ton println(). Mets tes deux println() juste en dessous de l'affectation dans le tableau, et magie, ils réapparaît! :wink:

Un grand merci à toi troisiemetype

Encore une aide précieuse