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 brossden

Bonjour fanfan_84

A la vue de ton code je suis pratiquement certain que tu as fais un copier/coller de ce programme sur Internet, le soucis c'est que tu as dû activer le traducteur en ligne et certaine ligne de code ont aussi été traduite en français. je suis étonné que tu ais pu compiler ce code et le télé verser dans un Arduino !

Dans un premier temps essaie de retourner sur le site dans sont langage d'origine et de récupérer le programme sans traductions parasites !

Bonne journée à tous

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 brossden

Tu te paye ma fiole !

" Temporisateur long non signé statique = millis ();  " dans ton code c'est une nouvelle commande Arduino ????

Faut pas prendre tout le monde pour des lapins de trois semaines !

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 brossden

Ok ce sera au moins le quatrième site sur lequel tu poses le même problème. Je peux savoir pourquoi certaines lignes de code sont traduite en "franglais " ?

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 brossden

Ahhh je préfère quand tu dis la vérité !

Les transistors tu peux les mettre à la benne (enfin dans un tiroir) les sorties de l'Arduino supportent la charge des LEDs

Le Résistances de limitations OK

Pour le programme je vais m'y pencher, mais pas trop le temps tout de suite !

A+

Bonne journée à tous

Portrait de fanfan_84

super merci du coup de main.

a bientôt