Bonjour à tous.
Comme évoqué dans dans ma présentation, je travaille sur une horloge à eau type Bernard Gitton.
Je souhaite allumer une (ou plusieurs) LED correspondant à chaque heure, dizaine de minutes et unités de minutes, soit une LED indiquant l'heure (et il y en a 12 possibles ) une indiquant la dizaine de minute (6 possibles) et une indiquant la minute paire (soient 6 possibles). Donc 12+6+6 = 24 LED à allumer potentiellement
Je compte utiliser trois 74HC595 en cascade.
J'utilise à ce stade une carte équivalent Uno chinoise, UN (pour travailler par étape) chips 74HC595, une breadbord avec les cables, leds et resitences qui vont bien. Ce montage est fonctionnel, j'arrive à reproduire les exemples simples trouvés par ci et par la sur ce forum.
Mon probléme, c'est que quand , dans mon code, j'utilise " shiftOut(ds_Pin, shcp_Pin, LSBFIRST, xxx)" les LEDs s'allument pas du tout comme escompté !!!
Voici le code utilisé :`
Mon raisonnement est de lire l'heure sur un module RTC3231 et de la traduire en une chaine de 0 ou 1 correspondants aux leds à allumer , idem pour la dizaine de minute puis les unités de minutes.
Je concaténe ensuite ces trois chaines de 0 et 1 pour l'envoyer dans le(s) registre à décalage.
(pour mon apprentissage j'utilise une heure fixe ( 1 heure) et une unité de minute fixe ( 6 minutes) mais pas de dizaine de minutes) fixées par variables)
```cpp
int stcp_Pin = 4;
int shcp_Pin = 5;
int ds_Pin = 6;
int Heure = 1; // designe les heures relevees sur RTC
int DizaineMinute = 0; // designe les dizaines de minutes relevees sur RTC
int Minute = 6; // designe les minutes relevees sur RTC
String AllumeLedHeure; // designe la partie de message concernant les heures
String AllumeLedDizaineMinute; // designe la partie de message concernant les dizaines de minute
String AllumeLedMinute; // designe la partie de message concernant les unites minutes
String AllumeLED; // designe le message transmis au 74HC595 qui est la concatenation des 3 parties de message
void setup() {
Serial.begin(9600); //Démarre le port communication
pinMode(stcp_Pin, OUTPUT);
pinMode(shcp_Pin, OUTPUT);
pinMode(ds_Pin, OUTPUT);
}
void loop() {
/////////////////////////////////////TRAITEMENT DES HEURES
switch (Heure) {
case 0:
case 12:
AllumeLedHeure = "0000";
Serial.print("AllumeLedHeure ");
Serial.print("\t");
Serial.print(AllumeLedHeure);
Serial.print("\t");
break;
case 1:
case 13:
AllumeLedHeure = "1111";
Serial.print("AllumeLedHeure ");
Serial.print("\t");
Serial.print(AllumeLedHeure);
Serial.print("\t");
break;
case 2:
case 14:
AllumeLedHeure = "0010";
Serial.print("AllumeLedHeure ");
Serial.print("\t");
Serial.print(AllumeLedHeure);
Serial.print("\t");
break;
case 3:
case 15:
AllumeLedHeure = "0001";
Serial.print("AllumeLedHeure ");
Serial.print("\t");
Serial.print(AllumeLedHeure);
Serial.print("\t");
break;
case 4:
case 16:
AllumeLedHeure = "0001";
Serial.print("AllumeLedHeure ");
Serial.print("\t");
Serial.print(AllumeLedHeure);
Serial.print("\t");
break;
case 5:
case 17:
AllumeLedHeure = "0001";
Serial.print("AllumeLedHeure ");
Serial.print("\t");
Serial.print(AllumeLedHeure);
Serial.print("\t");
break;
case 6:
case 18:
AllumeLedHeure = "0001";
Serial.print("AllumeLedHeure ");
Serial.print("\t");
Serial.print(AllumeLedHeure);
Serial.print("\t");
break;
case 7:
case 19:
AllumeLedHeure = "0001";
Serial.print("AllumeLedHeure ");
Serial.print("\t");
Serial.print(AllumeLedHeure);
Serial.print("\t");
break;
case 8:
case 20:
AllumeLedHeure = "0001";
Serial.print("AllumeLedHeure ");
Serial.print("\t");
Serial.print(AllumeLedHeure);
Serial.print("\t");
break;
case 9:
case 21:
AllumeLedHeure = "0001";
Serial.print("AllumeLedHeure ");
Serial.print("\t");
Serial.print(AllumeLedHeure);
Serial.print("\t");
break;
case 10:
case 22:
AllumeLedHeure = "0001";
Serial.print("AllumeLedHeure ");
Serial.print("\t");
Serial.print(AllumeLedHeure);
Serial.print("\t");
break;
case 11:
case 23:
AllumeLedHeure = "0001";
Serial.print("AllumeLedHeure ");
Serial.print("\t");
Serial.print(AllumeLedHeure);
Serial.print("\t");
break;
default:
Serial.print("PROBLEME HEURE ");
}
/////////////////////////////////////TRAITEMENT DES DIZAINES DE MINUTES
switch (DizaineMinute) {
case 0:
AllumeLedDizaineMinute = "0000";
Serial.print("AllumeLedDizaineMinute ");
Serial.print("\t");
Serial.print(AllumeLedDizaineMinute);
Serial.print("\t");
break;
case 1:
AllumeLedDizaineMinute = "0100";
Serial.print("AllumeLedDizaineMinute ");
Serial.print("\t");
Serial.print(AllumeLedDizaineMinute);
Serial.print("\t");
break;
case 2:
AllumeLedDizaineMinute = "0010";
Serial.print("AllumeLedDizaineMinute ");
Serial.print("\t");
Serial.print(AllumeLedDizaineMinute);
Serial.print("\t");
break;
case 3:
AllumeLedDizaineMinute = "0001";
Serial.print("AllumeLedDizaineMinute ");
Serial.print("\t");
Serial.print(AllumeLedDizaineMinute);
Serial.print("\t");
break;
case 4:
AllumeLedDizaineMinute = "0000";
Serial.print("AllumeLedDizaineMinute ");
Serial.print("\t");
Serial.print(AllumeLedDizaineMinute);
Serial.print("\t");
break;
case 5:
AllumeLedDizaineMinute = "0000";
Serial.print("AllumeLedDizaineMinute ");
Serial.print("\t");
Serial.print(AllumeLedDizaineMinute);
Serial.print("\t");
break;
default:
Serial.print("PROBLEME dizaine Minute ");
}
/////////////////////////////////////TRAITEMENT DES UNITES DE MINUTES
switch (Minute) {
case 0:
case 1:
AllumeLedMinute = "0000";
Serial.print("AllumeLedMinute ");
Serial.print("\t");
Serial.print(AllumeLedMinute);
Serial.print("\t");
break;
case 2:
case 3:
AllumeLedMinute = "0100";
Serial.print("AllumeLedMinute ");
Serial.print("\t");
Serial.print(AllumeLedMinute);
Serial.print("\t");
break;
case 4:
case 5:
AllumeLedMinute = "0010";
Serial.print("AllumeLedMinute ");
Serial.print("\t");
Serial.print(AllumeLedMinute);
Serial.print("\t");
break;
case 6:
case 7:
AllumeLedMinute = "0101";
Serial.print("AllumeLedMinute ");
Serial.print("\t");
Serial.print(AllumeLedMinute);
Serial.print("\t");
break;
case 8:
case 9:
AllumeLedMinute = "0000";
Serial.print("AllumeLedMinute ");
Serial.print("\t");
Serial.print(AllumeLedMinute);
Serial.print("\t");
break;
default:
Serial.print("PROBLEME Minute ");
}
//AllumeLED = "0B" + AllumeLedHeure + AllumeLedDizaineMinute + AllumeLedMinute; //Youpi ca marche !!!
AllumeLED = "0B" + AllumeLedHeure + AllumeLedMinute; //"0B" +
digitalWrite(stcp_Pin, LOW);
shiftOut(ds_Pin, shcp_Pin, LSBFIRST, "AllumeLED");
//shiftOut(ds_Pin, shcp_Pin, LSBFIRST, 0B11111111 );
digitalWrite(stcp_Pin, HIGH);
Serial.print("AllumeLED ");
Serial.print("\t");
Serial.println(AllumeLED);
delay(2000);
}
Cette variable "AllumeLed", bien que correspondant à ce que je veux, comme l'indique la lecture du port série, n'est probablement pas lue comme moi par le langage c++ ce qui provoque le bazar dans l'affichage des LEDs.
Pouvez vous SVP m'aider à comprendre et donc résoudre cette difficulté.
Merci d'avance.
Denis
