Go Down

Topic: [RESOLU]Valeur analogique sur afficheur Leds 7 segments x4 tm1637 (Read 4747 times) previous topic - next topic

willtynux

Dec 25, 2012, 06:30 pm Last Edit: Dec 27, 2012, 02:44 pm by willtynux Reason: 1
Bonjour,
j'ai cherché pendant pas mal de temps mais rien, alors je pose ma question  :smiley-roll-blue:
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  :smiley-fat:

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 ...
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.

http://skyduino.wordpress.com/2012/05/16/arduino-afficheur-7-segments-16-digits-base-tm1640/
http://skyduino.wordpress.com/2012/07/31/arduino-carte-tm1638-7-segments-leds-boutons/
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Artouste


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

willtynux

#3
Dec 27, 2012, 02:44 pm Last Edit: Dec 27, 2012, 02:47 pm by willtynux Reason: 1
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 :

Code: [Select]
#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" ??

Artouste

#4
Dec 27, 2012, 03:00 pm Last Edit: Dec 27, 2012, 03:02 pm by Artouste Reason: 1

...
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

willtynux

:smiley-roll: 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)

Christian_R

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

willtynux

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

skywodd

Ps: fait un seul analogRead() que tu stocke dans une variable avant de faire tes calculs ;)
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).
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up