Afficheur 7 segments 4 digits SH5461AS

fanfan_84
lun, 07/17/2017 - 19:02
Bonjour tout le monde,
je suis novice avec arduino et je bute sur un truc.
Je souhaite faire un compteur avec 4 chiffres.
Le câblage est bon à propos de l'exécution du code les 4 chiffres restent allumés.
Je vois ce que cela implique bien plus les chiffres se voient à peine.
Je m'explique: les chiffres s'allume complètement, on voit un 8 avec point décimal.
Ensuite, le chiffre change plus je vois toujours le 8 affiché. Un faible scintillement apparaît.
J'ai essayé de changer la valeur de "setBrightness" mais cela change rien.
Quelqu'un pourrait me donner une idée ???
je joint une photo en fichier zip
mon code :
#include "SevSeg.h"
SevSeg sevseg;
Int pinA = 9;
Int pinB = 8;
Int pinC = 7;
Int pinD = 6;
Int pinE = 5;
Int pinF = 4;
Int pinG = 3;
Int pinDP = 2;
Int DIG1 = 13;
Int DIG2 = 12;
Int DIG3 = 11;
Int DIG4 = 10;
Void setup ()
{
byte numDigits = 4; // Nombre de chiffres
byte digitPins [] = {13,12,11,10}; // chiffre de 1 à
segment de segment de 4 octets [] = {2, 3, 4, 5, 6, 7, 8, 9}; // Branchements des Pins
Sevseg.begin (COMMON_ANODE, numDigits, digitPins, segmentPins);
Sevseg.setBrightness (20);
PinMode (DIG1, OUTPUT); // pin 13
pinMode (DIG2, OUTPUT); // broche 12
pinMode (DIG3, OUTPUT); // broche 11
pinMode (DIG4, OUTPUT); // broche 10
PinMode (pinA, OUTPUT); // pin 9
pinMode (pinB, OUTPUT); // pin 8
pinMode (pinC, OUTPUT); // pin 7
pinMode (pinD, OUTPUT); // pin 6
pinMode (pinE, OUTPUT); // pin 5
pinMode (pinF, OUTPUT); // pin 4
pinMode (pinG, OUTPUT); // pin 3
pinMode (pinDP, OUTPUT); // broche 2
}
Void loop ()
{
// digitalWrite (DIG1, 0);
// digitalWrite (DIG2, 0);
// digitalWrite (DIG3, 0);
// digitalWrite (DIG4, 0);
Temporisateur long non signé statique = millis ();
Static int deciSeconds = 0;
If (millis ()> = timer) {
deciSeconds ++; // 100 milliSeconds = 1 seconde
timer + = 100;
If (deciSeconds == 1000) {// Réinitialiser apres 1000 secondes
deciSeconds = 0;
}
Sevseg.setNumber (deciSeconds, 1);
}
Sevseg.refreshDisplay ();
}
merci d'avance
fanfan_84
dim, 07/23/2017 - 08:39
les commentaires en français sont les miens.
j'essaye de comprendre pourquoi mon code ne marche pas, je regarde un peu partout mais rien n'y fait.
j'arrive toujours au même résultat.
j'ai également rajouté des transistors comme indiqué dans http://www.datasheetcafe.com/sh5461as-datasheet-pdf/
toujours pareil
fanfan_84
dim, 07/23/2017 - 09:21
voila la version non française :
#include "SevSeg.h"
SevSeg sevseg;
int pinA = 2;
int pinB = 3;
int pinC = 4;
int pinD = 5;
int pinE = 6;
int pinF = 7;
int pinG = 8;
//int pinDP = 2;
int DIG1 = 12;
int DIG2 = 11;
int DIG3 = 10;
int DIG4 = 9;
void setup()
{
Serial.begin(9600);
byte numDigits = 4; // Nombre de digits
byte digitPins[] = {12,11,10,9}; // digit de 1 a 4
byte segmentPins[] = {2,3,4,5,6,7,8}; // Branchements des Pins
sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins);
sevseg.setBrightness(60);
pinMode(DIG1, OUTPUT); // pin 12
pinMode(DIG2, OUTPUT); // pin 11
pinMode(DIG3, OUTPUT); // pin 10
pinMode(DIG4, OUTPUT); // pin 9
pinMode(pinA, OUTPUT); // pin 2
pinMode(pinB, OUTPUT); // pin 3
pinMode(pinC, OUTPUT); // pin 4
pinMode(pinD, OUTPUT); // pin 5
pinMode(pinE, OUTPUT); // pin 6
pinMode(pinF, OUTPUT); // pin 7
pinMode(pinG, OUTPUT); // pin 8
//pinMode(pinDP, OUTPUT); // pin 2
}
void loop()
{
// digitalWrite(DIG1, 0);
// digitalWrite(DIG2, 0);
// digitalWrite(DIG3, 0);
// digitalWrite(DIG4, 0);
static unsigned long timer = millis();
static int deciSeconds = 0;
If (millis()>= timer) {
DeciSeconds ++; // 100 milliSecondes est égal à 1 décipe seconde
timer + = 100;
If (deciSeconds == 10000) {// Réinitialiser à 0 après avoir compté pendant 1000 secondes.
DeciSeconds = 0;
}
Sevseg.setNumber (deciSeconds, 1);
}
Sevseg.refreshDisplay (); // doit être exécuté à plusieurs reprises
}
fanfan_84
dim, 07/23/2017 - 17:35
merci de respecter un minimum de courtoisie et gentillesse, ce qui n'est pas ton fort je pense.
quand je parle de français, je parlais de commentaires, c'est ce que j'ai précisé dans mon dernier message.
je ne parlais pas de code de programmation. j'ai rectifié mon code avec les phrases françaises que je n'avait pas remarqué.j'ai renvoyé le message tout de suite après mon deuxième message d'aujourdh'hui.
comme je l'avais dit je débute dans le language arduino, si cela t'agace tu n'est pas obligé d'y répondre.
je me débrouillerai ailleurs.
fanfan_84
lun, 07/24/2017 - 11:39
c'est effectivement parce que j'utilise un traducteur google, cela mélange le français et l'anglais.
j'ai fait des demandes sur plusieurs sites au cas ou je n'aurai pas de réponses ici
le vrai code version anglais :
#include "SevSeg.h"
SevSeg sevseg;
int pinA = 2;
int pinB = 3;
int pinC = 4;
int pinD = 5;
int pinE = 6;
int pinF = 7;
int pinG = 8;
//int pinDP = 2;
int DIG1 = 12;
int DIG2 = 11;
int DIG3 = 10;
int DIG4 = 9;
void choix_numero(char number)
{
switch (number)
{
default:
// par défaut le 0 s'affiche
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, LOW);
break;
}
}
void setup()
{
Serial.begin(9600);
byte numDigits = 4; // Nombre de digits
byte digitPins[] = {12,11,10,9}; // digit de 1 a 4
byte segmentPins[] = {2,3,4,5,6,7,8}; // Branchements des Pins
sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins);
sevseg.setBrightness(90);
pinMode(DIG1, OUTPUT); // pin 12
pinMode(DIG2, OUTPUT); // pin 11
pinMode(DIG3, OUTPUT); // pin 10
pinMode(DIG4, OUTPUT); // pin 9
pinMode(pinA, OUTPUT); // pin 2
pinMode(pinB, OUTPUT); // pin 3
pinMode(pinC, OUTPUT); // pin 4
pinMode(pinD, OUTPUT); // pin 5
pinMode(pinE, OUTPUT); // pin 6
pinMode(pinF, OUTPUT); // pin 7
pinMode(pinG, OUTPUT); // pin 8
//pinMode(pinDP, OUTPUT); // pin 2
}
void loop()
{
digitalWrite(DIG1, 1);
digitalWrite(DIG2, 1);
digitalWrite(DIG3, 1);
digitalWrite(DIG4, 1);
choix_numero(4);
//digitalWrite(9,1);
//digitalWrite(8,0);
//digitalWrite(7,0);
//digitalWrite(6,0);
//digitalWrite(5,0);
//digitalWrite(4,0);
//digitalWrite(3,0);
//digitalWrite(2,0);
static unsigned long timer = millis();
static int deciSeconds = 0;
if (millis() >= timer) {
deciSeconds++; // 100 milliSeconds is equal to 1 deciSecond
timer += 100;
if (deciSeconds == 10000) { // Reset to 0 after counting for 1000 seconds.
deciSeconds=0;
}
sevseg.setNumber(deciSeconds, 1);
}
sevseg.refreshDisplay();
}
j'ai fait une fonction pour définir chaque chiffre ( de 0 à 9) la fonction affiche bien le chiffre (4) dans mon code.
quand je compile le programme avec le compteur je ne vois que des 8 qui scintillent. on dirait que les chiffres du compteurs s'affichent par dessus les 8.
j'ai utilisé ça pour mon câblage. j'ai fait exactement le même
http://www.datasheetcafe.com/sh5461as-datasheet-pdf/
c'est un grand mystère
fanfan_84
lun, 07/24/2017 - 17:25
super merci du coup de main.
a bientôt