Afficheur 7 segments 4 digits SH5461AS

Portrait de fanfan_84

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

Portrait de fanfan_84

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

Portrait de fanfan_84

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
}

Portrait de fanfan_84

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.

Portrait de fanfan_84

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;

case 1:

  digitalWrite(pinA, LOW);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, LOW);
  digitalWrite(pinE, LOW);
  digitalWrite(pinF, LOW);
  digitalWrite(pinG, LOW);
  break;


case 2:
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, LOW);
  digitalWrite(pinD, HIGH);
  digitalWrite(pinE, HIGH);
  digitalWrite(pinF, LOW);
  digitalWrite(pinG, HIGH);
 break;

case 3:
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, HIGH);
  digitalWrite(pinE, LOW);
  digitalWrite(pinF, LOW);
  digitalWrite(pinG, HIGH);
  break;

case 4:
  digitalWrite(pinA, LOW);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, LOW);
  digitalWrite(pinE, LOW);
  digitalWrite(pinF, HIGH);
  digitalWrite(pinG, HIGH);
  break;

case 5:
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, LOW);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, HIGH);
  digitalWrite(pinE, LOW);
  digitalWrite(pinF, HIGH);
  digitalWrite(pinG, HIGH);
  break;

case 6:
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, LOW);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, HIGH);
  digitalWrite(pinE, HIGH);
  digitalWrite(pinF, HIGH);
  digitalWrite(pinG, HIGH);
  break;

case 7:
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, LOW);
  digitalWrite(pinE, LOW);
  digitalWrite(pinF, LOW);
  digitalWrite(pinG, LOW);
 break;

case 8:
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, HIGH);
  digitalWrite(pinE, HIGH);
  digitalWrite(pinF, HIGH);
  digitalWrite(pinG, HIGH);
  break;

case 9:
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, LOW);
  digitalWrite(pinE, LOW);
  digitalWrite(pinF, HIGH);
  digitalWrite(pinG, HIGH);
  break;

case 0:
  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

Portrait de fanfan_84

super merci du coup de main.

a bientôt