Afficher "mois"."jour" sur afficheur 7 segments

Bonjour à tous,
je débute et franchement je galère pour faire un truc qui je pense doit être tout simple.

j'ai un triple afficheur 7 segments 4 digits du type 8.8.:8.8.

sur celui de droite (green3), j'affiche l'heure => OK (format "hh:mm" )
sur celui du centre (green2), j'affiche l'année => OK (format "nnnn" )
sur celui de gauche (green1), je voudrais afficher le mois et le jour dans le style mm.jj

je récupère les valeurs sur une horloge RTC DS3231 (now.month) et (now.day) et jusque là tout va bien. Seulement je n'arrive pas à mettre en "forme" les 2 valeurs.

j'ai cherché 2 solutions:
** - la première avec la bibliothèque SevenSegmentExtended

green1.printTime(now.month(),now.day(), false);  

cela m'affiche mm:jj mais je n'arrive pas a enlever les ":" pour les remplacer par un simple "."

** - la seconde avec la bibliothèque SevenSegmentTM1637
int Moisjourvert = (now.month()*100) + now.day();  
green1.println (Moisjourvert(), false); 

Mais là il m'affiche 703_ (on est le 3 juillet aujourd'hui et donc : 07*100 + 03 = 703 CQFD)
seulement j'ai perdu le 0 devant le 7 et j'ai du coup un digit a droite non utilisé (je m'attendais a avoir 0703 perdu lol).

j'ai tenté de faire une fonction SI avec if (Moisjourvert() < 1000 alors je rajoute un 0 devant mais je ne dois pas avoir la bonne syntaxe... (oui je débute vraiment :stuck_out_tongue: )

Bref, si l'un d'entre vous a une idée pour me remettre sur les rails, je suis preneur :wink:

d'avance merci !

Bonjour,

Mets nous un lien vers tes afficheurs. C'est rare d'avoir un afficheur 8.8.:8.8., on trouve plutôt des afficheurs 8.8.8.8. ou 8 8:8 8

Si tu nous mettais ton programme ça nous éviterai d'essayer d'imaginer ce que tu fais exactement.

Merci de ta reponse,

Les afficheurs sont:

et mon code est :

#include <SevenSegmentExtended.h>
#include <SevenSegmentFun.h>
#include <SevenSegmentTM1637.h>
#include <TM1637Display.h>
#include "SevenSegmentTM1637.h"
#include "SevenSegmentExtended.h"
#include "RTClib.h"

// Sortie horloge Rouge
const byte PIN_CLK_Red = A0;   // define CLK pin  
// Sortie horloge Verte
const byte PIN_CLK_Green = A1;   // define CLK pin 
// Sortie horloge Orange
const byte PIN_CLK_Orange = A2;   // define CLK pin 

//RED Displays
const byte PIN_DIO_R1 = 3;
SevenSegmentTM1637     red1(PIN_CLK_Red, PIN_DIO_R1); //SegmentTM1637 pour utiliser la methode "print" permet d'enlever les ":" entre les chiffres
const byte PIN_DIO_R2 = 4;
SevenSegmentTM1637       red2(PIN_CLK_Red, PIN_DIO_R2); //SegmentTM1637 pour utiliser la methode "print" permet d'enlever les ":" entre les chiffres
const byte PIN_DIO_R3 = 5;
SevenSegmentExtended     red3(PIN_CLK_Red, PIN_DIO_R3); // SegmentExtended pour utiliser la methode "PrintTime"

//GREEN Displays
const byte PIN_DIO_G1 = 6;
SevenSegmentExtended green1(PIN_CLK_Green, PIN_DIO_G1); 
const byte PIN_DIO_G2 = 7;
SevenSegmentTM1637       green2(PIN_CLK_Green, PIN_DIO_G2); //SegmentTM1637 pour utiliser la methode "print" permet d'enlever les ":" entre les chiffres
const byte PIN_DIO_G3 = 8;
SevenSegmentExtended     green3(PIN_CLK_Green, PIN_DIO_G3); // SegmentExtended pour utiliser la methode "PrintTime"
int greenAM = 12;
int greenPM = 13;

// ORANGE Displays
const byte PIN_DIO_O1 = 9;
SevenSegmentTM1637       orange1(PIN_CLK_Orange, PIN_DIO_O1); //SegmentTM1637 pour utiliser la methode "print" permet d'enlever les ":" entre les chiffres
const byte PIN_DIO_O2 = 10;   
SevenSegmentTM1637        orange2(PIN_CLK_Orange, PIN_DIO_O2); //SegmentTM1637 pour utiliser la methode "print" permet d'enlever les ":" entre les chiffres
const byte PIN_DIO_O3 = 11;   
SevenSegmentExtended       orange3(PIN_CLK_Orange, PIN_DIO_O3); // SegmentExtended pour utiliser la methode "PrintTime"

bool parse=false;
bool config=false;
int Hour=0;
RTC_DS3231 rtc;
int backlightred = 25; //backlight level on the red display
int backlightgreen = 100; //backlight level on the green display
int backlightorange = 50; //backlight level on the orange display
int year_red = 1985; //"Year" on the red display
int date_red = 1105; //"Month" & "Day" on the red display
int date_orange = 1112; //"Month" & "Day" on the orange display
int year_orange = 1955; //"Year" on the orange display


void setup() {

  pinMode(PIN_CLK_Red, OUTPUT);
  pinMode(PIN_CLK_Green, OUTPUT);
  pinMode(PIN_CLK_Orange, OUTPUT);
  pinMode(PIN_DIO_O1, OUTPUT);
  pinMode(PIN_DIO_O2, OUTPUT);
  pinMode(PIN_DIO_O3, OUTPUT);
  pinMode(PIN_DIO_G1, OUTPUT); 
  pinMode(PIN_DIO_G2, OUTPUT);
  pinMode(PIN_DIO_G3, OUTPUT); 
  pinMode(PIN_DIO_R1, OUTPUT);
  pinMode(PIN_DIO_R2, OUTPUT);
  pinMode(PIN_DIO_R3, OUTPUT);
  pinMode(greenAM, OUTPUT);
  pinMode(greenPM, OUTPUT);

  Serial.begin(9600);       // initializes the Serial connection @ 9600 baud
  orange1.begin();            // initializes the display
  orange2.begin();
  orange3.begin();              
  green1.begin();
  green2.begin();
  green3.begin();            
  red1.begin();
  red2.begin();
  red3.begin();            
 
 
  orange1.setBacklight(backlightorange);  // set the brightness to the level defind in variable "Backlightorange"
  orange2.setBacklight(backlightorange);// set the brightness to the level defind in variable "Backlightorange"
 // orange2.setColonOn(0); // Switch off ":" for orange "year"
  orange3.setBacklight(backlightorange);  // set the brightness to the level defind in variable "Backlightorange"
 
  green1.setBacklight(backlightgreen); // set the brightness to the level defind in variable "Backlightgreen"
  green2.setBacklight(backlightgreen); // set the brightness to the level defind in variable "Backlightgreen"
  green3.setBacklight(backlightgreen); // set the brightness to the level defind in variable "Backlightgreen"
 
  red1.setBacklight(backlightred);// set the brightness to the level defind in variable "Backlightred"
  red2.setBacklight(backlightred);// set the brightness to the level defind in variable "Backlightred"
 // red2.setColonOn(0); // Switch off ":" for red "year"
  red3.setBacklight(backlightred);  // set the brightness to the level defind in variable "Backlightred"
  
#ifndef ESP8266
  while (!Serial); // for Leonardo/Micro/Zero
#endif

  Serial.begin(9600);

  delay(3000); // wait for console opening

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

 // if (rtc.lostPower()) {
   // Serial.println("RTC lost power, lets set the time!");
    // following line sets the RTC to the date & time this sketch was compiled
   // rtc.adjust(DateTime(2021,6,22,16,19,0));
  }



void loop() {
  
    DateTime now = rtc.now();
    Serial.print(now.year(), DEC);
    //Serial.print('.');
    Serial.print(now.month(), DEC);
    //Serial.print('.');
    Serial.print(now.day(), DEC);
    //Serial.print(" ");
    Serial.print(now.hour(), DEC);
   // Serial.print(':');
    Serial.print(now.minute(), DEC);
   // Serial.print(':');
    Serial.print(now.second(), DEC);
  //  Serial.println();

if(now.hour()>=13){
   Hour=now.hour();
  digitalWrite(greenAM,0);
  digitalWrite(greenPM,1);}
  
else if(now.hour()==12)
  {Hour=now.hour();
   digitalWrite(greenAM,0);
  digitalWrite(greenPM,1);}

else{
  Hour=now.hour();
  digitalWrite(greenAM,1);
  digitalWrite(greenPM,0);
  }
  
//Red displays -  Destination TIME 11.05 1985 01:24
red1.print(date_red, true);
red2.print(year_red, true);
red3.printTime(01, 24, false); 

//Green Displays - Present TIME - Heure actuelle
green1.printTime(now.month(),now.day(), false);
green2.print(now.year());
green3.printTime(Hour, now.minute(), false);

// Orange Displays - Last time departed 11.12 1955 12:46                      
orange1.print(date_orange, true);                     
orange2.print(year_orange, true);
orange3.printTime(12, 46, false);
                     
}

Tu es sur que sur ton afficheur les points décimaux sont bien connectés?

Le plus simple est de passer par une chaine de caractères

  char str[5];
  sprintf(str,"%02d%02d",now.month(),now.day());  
  green1.print (str);
1 Like

Bonsoir Ludo

Il n'est pas possible de n'afficher qu'un point, ils sont connectés ensemble.
Il faut jouer avec le point décimal.

Cordialement
jpbbricole

Bonsoir,
quand je disais que je ne voulais qu' un "." a la place des ":", je pensai évidemment au "." decimal (à la virgule en somme) et non pas à simplement 1 des 2 points du ":" car je me doutais qu'ils étaient commun.
Mais merci de cette précision jppbricole, je n'étais pas clair sur ce point (ca fait beaucoup de point dans une seule réponse :stuck_out_tongue: ). Cette remarque était pertinente :wink:

Tout vient à point,... Un point c'est tout… ok j'arrêtes, c'est nul ! Point trop n'en faut...

La solution de la chaine de caractère marche impeccable, Merci Kamill ! :+1: :+1:

il me faut juste trouver le moyen d'afficher le "point décimal" (merci jppbricole :wink: ) entre les deux séries de chiffre et cela sera parfait !
Je ne sais pas si sera possible sur ce type d'afficheur.

A mon avis ton afficheur n'a pas les points décimaux.
Les afficheurs qui ont à la foi les points décimaux et les deux points sont assez rares et ont 14 pins (du moins ceux que je connais) et sur ton lien on voit que l'afficheur a 12 pins.
Tu peux essayer d'afficher tous les points et tous les segments et voir si les points décimaux s'allument

  for (byte i=0; i<4; i++)
    red1.printRaw(0xff,i);
1 Like

Effectivement, je viens de tester, ils n'ont pas l'air d'être fonctionnels (tout s'allume sauf les points décimaux )

Si physiquement pas possible, je vais trouver une raison de m'en passer alors.

Merci de m'avoir aidé ! c'est super cool !

Tu peux aussi te procurer des afficheurs avec points décimaux
Par exemple

1 Like

c'est un premier projet, j'envisage de remplacer les informations des afficheurs red1, green1 et orange1 par des double afficheurs dans un futur nouveau projet.

1 en 3 digits de 14 segments, pour afficher le mois en lettres (style JAN,FEB,MAR....)
1 en 2 digit de 7 segments pour les jours.

en résumé cela donnera (si je reprends le code précèdent):
NOV 05 1985 01:24
JUL 03 2021 00:05
NOV 12 1955 12:46

(certains feront le lien entre ces dates et une certaine trilogie de Robert Zemeckis qui n'est pas le fruit du hasard.... :wink: )

Il faut commencer petit et comprendre ce qu'on fait avant de passer a la step suivante !
La gestion des 14 segments est encore bien trop nébuleuse pour moi...

Encore merci Kamill !

Bonjour ludo_la_rafale

Un dernier point, pourquoi ne pas simplement masquer le point du haut?

Cordialement
jpbbricole

Bonjour Ludo,

Pourriez vous nous dire l'avancé de votre projet ?

Je démarre également le même projet, et il est vrais que votre futur version.
NOV 05 1985 01:24
JUL 03 2021 00:05
NOV 12 1955 12:46
Est bien sympathique et plus réaliste..
Je travail sur le même programme que vous, inspiré de Jerome95.

Au plaisir de vous lire,

Thierry