/*
Créé par utpeca
https://wokwi.com/projects/367702639294732289
Ce shetch Wokwi montre comment commander un 74HC595 avec un ESP32 et
seulement 3 fils.
Une mise en pratique de ce montage sur le site Locoduino
https://www.locoduino.org/spip.php?article338
*/
/*--------------------------------------------------------------------------
* GESTION DU 74HC595
---------------------------------------------------------------------------*/
const byte verrou = 2; // 74HC595 : ST_CP (latch)
const byte donnee = 5; // 74HC595 : DS (data)
const byte horloge = 4; // 74HC595 : SH_CP (clock)
uint8_t u_Alim = 0b00000000; // Data pour le 74HC595
const uint8_t z_Msk = 0b10000000; // Masque
/*********************************************************************/
void AlimenteSection(String nomKod, char etaSek, int no_Rel)
/*********************************************************************/
{
uint8_t z_Msk1 = z_Msk >> no_Rel;
uint8_t w_Alim;
if (nomKod.indexOf("RAZ") < 0)
{
w_Alim = u_Alim | z_Msk1;
// w_Alim = z_Msk1; // remplacer la ligne précédente par celle-ci
// pour modifier l'affichage sur le bargraph
}
else
{
w_Alim = 0b00000000;
}
// Envoi données relais au 74HC595
//===================================================================
u_Alim = w_Alim;
digitalWrite(verrou, LOW); // mettre le verrou
shiftOut(donnee, horloge, LSBFIRST, u_Alim);
digitalWrite(verrou, HIGH); // oter le verrou
}
/*********************************************************************/
void setup()
/*********************************************************************/
{
// put your setup code here, to run once:
Serial.begin(115200);
// Préparation du 74HC595
//------------------------------------------------------------------
pinMode(horloge, OUTPUT);
pinMode(verrou, OUTPUT);
pinMode(donnee, OUTPUT);
}
/*********************************************************************/
void loop()
/*********************************************************************/
{
for (int i = 0; i < 8; i++)
{
AlimenteSection("C001", '1', i);
delay(500);
}
delay(500);
AlimenteSection("RAZ_", '0', 0);
delay(500);
}