[RESOLU]Valeur analogique sur afficheur Leds 7 segments x4 tm1637

Bonjour, j'ai cherché pendant pas mal de temps mais rien, alors je pose ma question :roll_eyes: Je veux afficher une valeur d'une broche analogique sur un afficheur 4x 7 segments Leds (Seedstudio grove qui utilise un tm1637). J'arrive à afficher des chiffres et caractères donnés mais le problème c'est que je ne sais pas comment faire pour "séparer" les unités, dizaines, centaines et milliers d'une valeur (pour pouvoir ensuite les afficher sur chaque afficheur 7 segments). Je ne sais pas si j'ai été très clair mais j'espère que vous pourrez m'aider :drooling_face:

Bonjour,

J’ai déjà utilisé des TM1640 / TM1638, je sait pas si c’est dans la même série de driver 7 segments m’enfin bon …
Pour séparer les digits de ton affichage tu peut faire comme moi, un bon vieux calcul à base de division et de modulo pour obtenir la valeur de chaque digits séparément.
Ensuite tu fait l’affichage comme tu le souhaite digits par digits.

skywodd:
Bonjour,

J’ai déjà utilisé des TM1640 / TM1638, je sait pas si c’est dans la même série de driver 7 segments m’enfin bon …

bonjour skywodd
c’est assez compliqué de trouver de la doc , mais on dirait bien le petit frere du TM1638

Merci skywodd et Artouste pour vote aide !

J'ai donc branché un potard en A0 et l'afficheur en D2/D3 sur un shield Seeedstudio grove. Voici ce que ça donne

avec le code qui va bien :

#include "TM1637.h"
#define CLK 2//pins definitions for TM1637 and can be changed to other ports       
#define DIO 3
TM1637 tm1637(CLK,DIO);
void setup()
{
  Serial.begin(9600);
  
  tm1637.init();
  tm1637.set(BRIGHT_TYPICAL);//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
}
void loop()
{  
  static unsigned long t = 0;//Refreshment of the display quite 250ms
  if(millis() - t > 250) 
  {   
    tm1637.display(0,(analogRead(A0) / 1000) % 10);  //Display of thousands
    tm1637.display(1,(analogRead(A0) / 100) % 10);   //Display of hundreds
    tm1637.display(2,(analogRead(A0) / 10) % 10);    //Display of tens
    tm1637.display(3,analogRead(A0) % 10);           //Display of units
    Serial.print( analogRead(A0) );                  // Show the value of A0 on the serial port     
    Serial.println("");
    
    t = millis();
  }
}

Par contre que signifie le "% 10" ??

willtynux: ... Par contre que signifie le "% 10" ??

C'est la fonction modulo (avec le facteur modulo 10 ici ) http://www.arduino.cc/en/Reference/Modulo http://arduino.cc/fr/Main/Modulo

:roll_eyes: désolé, je ne comprends pas trop l’explication de la fonction …
Si je prends une valeur, par exemple 832, pour avoir les unités je fais 832 % 10 mais ça me fait quoi exactement ?
Merci d’aider un vieux newbie 8)

Modulo 10 retourne le reste de la division par 10
832 = 83 x 10 + 2
832 % 10 → reste 2

Ok !!!!!!!!!!! facile quand on a compris ! :drooling_face: Encore un très grand merci à toi ! Je vais pouvoir créer un bloc pour ArduBlock maintenant :)

Ps: fait un seul analogRead() que tu stocke dans une variable avant de faire tes calculs :wink:
Si la valeur change entre deux analogRead() tu peut te retrouver avec une valeur complétement fausse sur ton afficheur (et sur le port série).