vileroi:
Toujours faire confiance au premier post
Il manque le schéma du montage. Plus on met de digits, plus on demande du courant. Mais il faut que l'alimentation suive. Cela à l'air de ne pas être le cas.
Si, il multiplexe, il y a seulement un digit allumé à chaque instant.
Puisque vous avez déclaré un tableau, vous devez savoir vous en servir. Essayez donc de réduire votre code à :
/* multiplexage.ino
fonctionnement de 5 afficheurs 7 segments Cathodes communes
*/
const int analogInPin = A1; // Analog input pin that the potentiometer is attached to
int sensorValue = 0; // value read from the pot
int outputValue = 0; // value output to the PWM (analog out)
int i, toto, recu[20];
boolean code7segments [10][7] = {
{LOW, LOW, LOW, LOW, LOW, LOW, HIGH}, // code 0
{HIGH, LOW, LOW, HIGH, HIGH, HIGH, HIGH}, // code 1
{LOW, LOW, HIGH, LOW, LOW, LOW, HIGH} // code 3
// Je suis fainéant, je ne code que les digits entre 0 et 3
} ;
int pinsSegments [7] = {8, 2, 3, 4, 5, 6, 7} ;
int pinsDigits [5] = {12, 11, 10, 9, A0} ;
void setup() {
for (byte pin = 0 ; pin < 7 ; pin++) pinMode(pin, OUTPUT);
for (byte digit = 0 ; digit < 5 ; digit++) pinMode(pinsDigits[digit], OUTPUT);
Serial.begin(9600);
Serial.println("Bonjour");
}
void loop() {
i = 0 ;
//Serial.write('45');
do {
Serial.println("Entrez un nombre de 1 à 5 chiffres.");
while ( Serial.available() > 0 ) {
toto = Serial.read();
if ((toto >= 48) && (toto <= 58)) { // si on a un chiffre
recu[i] = toto - 48 ;
Serial.print(recu[i]);
i++;
}
}
if (i > 5) Serial.println(" 5 chiffres seulement, abruti !");
else Serial.println () ;
} while (i > 5) ;
while (i < 5) recu [i++] = 0 ;
while (!Serial.available()) { // arrêt en tapant n'importe quoi sur le clavier
for (i = 0 ; i < 5 ; i++) afficher (pinsDigits[i], recu[i]);
}
}
void afficher (int quelDigit, int chiffre ) {
// ce sous-programme reçoit 2 paramètres :
// - le N° de l'afficheur et
// - le chiffre à afficher
// on éteins les segments
for (int segment = 0 ; segment < 6 ; segment++)
digitalWrite (pinsSegments [segment], LOW) ;
digitalWrite(pinsSegments [6], HIGH); // zarbi
digitalWrite(quelDigit, HIGH);
for (int segment = 0 ; segment < 7 ; segment++)
digitalWrite (pinsSegments [segment], code7segments [chiffre][segment]) ;
delay(5); // 5 ou 10 ms après la mise au point
digitalWrite(quelDigit, LOW);
}
Sinon, effectivement vous avez un rapport cyclique d'allumage de chaque digit qui dépend du nombre de digits, et ça fait effectivement varier la luminosité perçue par l'oeil. Par contre si vous affichez 88888 ça consomme bien plus que si vous affichez 11111.