Problème avec l'affichage de la température sur afficheur 7 segments 4 chiffres

Bonjour à tous,

Je suis en cours de réalisation d'un projet assez simple pour upgrade mon imprimante 3D : Un capteur DHT11, relié à ma carte Arduino R3, déclenchant l'allumage d'une LED Verte lorsque la température est inférieure à 50°C dans l'enceinte de l'imprimante, et faisant clignoter une LED rouge, accompagnée d'un Buzzer, et un moteur permettant une ventilation, lorsque la température est supérieure à 50°C. De ce côté, pas de problèmes.

Maintenant, je souhaite afficher la valeur de cette température sur un afficher 7 segments, 4 chiffres (lien du produit ici). Mon afficheur est relié à une puce 74HC595N, qui me permet de limiter le nombre de sorties de l'Arduino à utiliser.

Du côté du câblage, tout est correct, puisque j'arrive à faire fonctionner des programmes classiques, comme le défilement de chiffres.

Mon problème est le suivant : comment faire en sorte que ma température, relevée par mon capteur DHT11, soit affichée sur les 4 caractères à 7 segments ?

Je vous joins le code dans son intégralité, avec toute la partie concernant les LED, le buzzer, et le moteur, même si sur ce point, il fonctionne. J'ai déjà assigné des broches de ma carte aux 3 paramètres de l'afficheur, qui sont "latch", "clock", et "data". Je les ai également assignés en tant que sorties.

// Partie Capteur Température
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

// Partie Moteur
#define ALLUMER 9
#define DIRA 10
#define DIRB 11

// Partie LED
int LEDR = 3;
int LEDV = 4;

// Partie Buzzer
int BUZZER = 5;

// Partie écran
int latch=7;
int clock=8;
int data =6;

void setup()
{
dht.begin();
pinMode(LEDR,OUTPUT);
pinMode(LEDV,OUTPUT);
pinMode(BUZZER,OUTPUT);
pinMode(ALLUMER,OUTPUT);
pinMode(DIRA,OUTPUT);
pinMode(DIRB,OUTPUT);
pinMode(latch,OUTPUT);
pinMode(clock,OUTPUT);
pinMode(data,OUTPUT);
}

void loop()
{
float t = dht.readTemperature();   // Lecture de la température

if(t>=50)                          // Si la température est supérieure à 50°C
{
  digitalWrite(LEDV,LOW);          // Extinction de la LED Verte
  digitalWrite(LEDR,HIGH);         // Clignotement de la LED Rouge (10 ms/10 ms)
  delay(10);
  digitalWrite(LEDR,LOW);
  delay(10);
  digitalWrite(BUZZER,HIGH);       // Activation et Extinction du Buzzer (10 ms/10 ms)
  delay(10);
  digitalWrite(BUZZER,LOW);
  delay(10);
  delay(1000);
  digitalWrite(ALLUMER,HIGH);       // Déclenchement de la ventilation
  digitalWrite(DIRA,HIGH);
  digitalWrite(DIRB,LOW);
  digitalWrite(ALLUMER,LOW);
  digitalWrite(ALLUMER,HIGH);
  digitalWrite(DIRA,LOW);
  digitalWrite(DIRB,HIGH);
}

else                               // Si la température n'est pas supérieure à 50°C
{
 digitalWrite(LEDV,HIGH);          // Allumage de la LED Verte
 delay(1000);
}
}

Ceci étant mon premier post sur ce forum, et n'ayant pas l'habitude de demander de l'aide, je vous prie de m'excuser si des données sont manquantes, et je me tiens à votre disposition pour vous fournir des informations supplémentaires nécessaires à la résolution de mon problème.

En vous remerciant d'avance et en vous souhaitant bon courage dans vos projets.

Clément

Bonjour,

Si tu as un seul 74HC595 il faut multiplexer tes chiffres.
Comment sont connectées les cathodes (ou anodes ?) communes?

Bonsoir,

Merci pour votre réponse.
J'ai réalisé ce montage à partir d'un kit ELEGOO Arduino, et sur le mode d'emploi il est annoncé que l'anode commune, ou broche cathodique commune est utilisée pour contrôler le chiffre affiché, j'en déduis donc que cette broche est connectée à ma broche "DATA" sur ma carte Arduino.
N'étant pas (du tout) expert en matière d'affichage sur 7 segments (en LCD ça va un peu mieux ...), je vous joins le diagramme de câblage que j'ai rigoureusement suivi.

En espérant que le peu d'informations que je suis en mesure de vous donner vous aide.

Avec ça on ne peut afficher que 4 fois la même chose. C'est un premier exercice avant d'aller au suivant?

Non c'est un exercice isolé, il n'y a pas de suite. Le précédent consistait en l'utilisation d'un module 7 segments mais avec un seul caractère, c'est d'ailleurs assez dommage que rien de plus ne soit proposé.

Existe-t-il une solution pour faire en sorte d'afficher des caractères différents ?

Oui, il faut piloter les anodes et sélectionner cycliquement les afficheur -> voir multiplexage.

Oui, il faut piloter les anodes et sélectionner cycliquement les afficheur -> voir multiplexage.

Bonjour,

Merci pour votre aide, je vais me renseigner à ce sujet.
Bonne continuation à vous.