Il faut prendre la bonne librairie ..
Ce point là est important à comprendre
// réservé i2c SDA DS3231 =A4;
// réservé i2c SCL DS3231 =A5;
Il faut prendre la bonne librairie ..
Ce point là est important à comprendre
// réservé i2c SDA DS3231 =A4;
// réservé i2c SCL DS3231 =A5;
oui, le code compile bien chez moi et le texte défile sur le moniteur
n'ayant pas d'afficheurs sous la main, je n'ai pas pu tester cette partie
il faudra peut être ralentir la loop ( selon l'effet visuel qu'il y aura )
voici celle ( en fichier joint) qui est dans le répertoire librairie des mon IDE
DS3231.zip (43 KB)
Bonjour,
Pour le code tout est bon et je vous en remercie !
Mais pour la câblage j'ai quelques problèmes,
J'arrive trés bien a cabler cette partie: (Et le module RTC)
// reserve pour serial RX = 0;
// reserve pour serial TX = 1;
byte segment_a = 2;//segment a du jeu d'afficheurs 1
byte segment_b = 3;//segment b du jeu d'afficheurs 1
byte segment_c = 4;//segment c du jeu d'afficheurs 1
byte segment_d = 5;//segment d du jeu d'afficheurs 1
byte segment_e = 6;//segment e du jeu d'afficheurs 1
byte segment_f = 7;//segment f du jeu d'afficheurs 1
byte segment_g = 8;//segment g du jeu d'afficheurs 1
byte segment_dp = 9;//segment dp du jeu d'afficheurs 1
Mais pas la suite
byte digit_dizaines_heures =10;//transistor sur anode digit dizaines d'heures afficheurs 1
byte digit_heures =11;//transistor sur anode digit heures afficheurs 1
byte digit_dizaines_minutes =12;//transistor sur anode digit dizaines de minutes afficheurs 1
//reserve led temoin =13
byte digit_minutes =14;//A0 transistor sur anode digit minutes afficheurs 1
byte digit_dizaines_secondes =15;//A1 transistor sur anode digit dizaines de secondes afficheurs 1
byte digit_secondes =16;//A2 transistor sur anode digit secondes afficheurs 1
// libre =A3;
// reserve i2c SDA DS3231 =A4;
// reserve i2c SCL DS3231 =A5;
Car je ne sais pas sur quelle broches de mes 4 digits les branchée
Au cas ou voici les digits que j'utilise : https://core-electronics.com.au/media/catalog/product/cache/1/image/fe1bcd18654db18f328c2faaaf3c690a/7/-/7-segment_display_-_20mm__red___com-11405__01.jpg
Cordialement,
je suis surpris que tu ai pu raccorder les segments et pas les anodes/cathodes
si tu sais ou sont les uns, tu dois savoir ou sont les autres.
la photo ne sert à rien, il faut la référence qui doit être inscrite sur le coté de l'afficheur
voir aussi si sur ton site vendeur, s'il y a un schéma
attention pour le branchement des segments, ne pas oublier de mettre des résistances
la référence est HS420561K-32, c'était dans un pack amazon et j'avais deja reussis a l'allumer pas besoin de résistances
Cordialement,
Alors, comme je fait pour le cablage ?
si tu descends dans la page du lien suivant, tu y verras les caracteristiques de ton afficheur
ICI
ici, les indications ci dessous (à verifier)
Top Row: 1 A F 2 3 B
Bottom Row: E D DP C G 4
J'ai suivi tout ce que vous m'avez envoyer mais je ne parviens toujours pas a mon but
Cordialement,
c'est quoi ton problème? c'est quoi ton but?
Mon probleme est que le premier digit ne sallume pas et les autres affiches de la mer**
Et mon but et des creer une horloge avec un module RTC et 4 digit
Cordialement,
dis moi de quel type est ton afficheur
anodes communes ou cathodes communes?
comment as tu branché ton afficheur?
as tu utilisé des résistances de limitation du courant?
sans réponse de ta part, j'ai fais une maquette.
il a d'abord fallu que je sonne mon afficheur 4 digits pour retrouver le brochage
ce que j'ai fais avec des résistances de 270ohms
mon afficheur est à cathodes communes. j'ai monté 7 résistances sur les anodes.
pour tester mon prg
il y avait des erreurs dans l'allumage des segments.
exemple un 0 s'affichait en P.
une fois ce prob revu, j'avais D10 qui ne fonctionnait pas.
je l'ai remplacé par A1
ensuite, j'ai modifié le début du prg pour que tous les chiffres défilent sur les 4 digits.
l'affichage de l'heure est ok et le dp clignote bien
voici le prg qui fonctionne chez moi
reviens nous dire que c'est ok chez toi
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
// reserve pour serial RX = 0;
// reserve pour serial TX = 1;
byte segment_a = 2;//segment a du jeu d'afficheurs 1
byte segment_b = 3;//segment b du jeu d'afficheurs 1
byte segment_c = 4;//segment c du jeu d'afficheurs 1
byte segment_d = 5;//segment d du jeu d'afficheurs 1
byte segment_e = 6;//segment e du jeu d'afficheurs 1
byte segment_f = 7;//segment f du jeu d'afficheurs 1
byte segment_g = 8;//segment g du jeu d'afficheurs 1
byte segment_dp = 9;//segment dp du jeu d'afficheurs 1
byte digit_dizaines_heures =15;//transistor sur anode digit dizaines d'heures afficheurs 1
byte digit_heures =11;//transistor sur anode digit heures afficheurs 1
byte digit_dizaines_minutes =12;//transistor sur anode digit dizaines de minutes afficheurs 1
//reserve led temoin =13
byte digit_minutes =14;//A0 transistor sur anode digit minutes afficheurs 1
byte digit_dizaines_secondes =10;//A1 transistor sur anode digit dizaines de secondes afficheurs 1
byte digit_secondes =16;//A2 transistor sur anode digit secondes afficheurs 1
// libre =A3;
// reserve i2c SDA DS3231 =A4;
// reserve i2c SCL DS3231 =A5;
int digit=0;
int valeur = 0;
int memo_secondes=0;
unsigned long temps_top = 0;
boolean top = false;
boolean dp = true;
int dgp=0;
int h=0;
int mn=0;
int s=0;
//boolean DPB = true;
void setup() {
clock.begin();
Serial.begin(115200);
for (int f = 2; f < 10;f++){pinMode(f,OUTPUT); digitalWrite(f,LOW);}
for (int f = 11;f < 18;f++){pinMode(f,OUTPUT);digitalWrite(f,HIGH);}//Désactivation de tous les digits
for (int f= 0;f<10;f++){//inscrit un trait horizontal sur les digits
digit=digit_dizaines_heures;valeur=f;aiguillage();delay(200);// inscrit zéro sur les dizaines heures
digit=digit_heures;valeur=f;aiguillage();delay(200); // inscrit zéro sur les heures
digit=digit_dizaines_minutes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les dizaines minutes
digit=digit_minutes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les minutes
//digit=digit_dizaines_secondes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les dizaines secondes
//digit=digit_secondes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les secondes
}
clock.setDateTime(__DATE__, __TIME__);
dt = clock.getDateTime();
h=atoi(clock.dateFormat("H", dt));Serial.print(h);
Serial.print(":");
mn= atoi(clock.dateFormat("i", dt));Serial.print(mn);
Serial.print(" ");
s=atoi(clock.dateFormat("s", dt));Serial.print(s);
Serial.println(" ");
}
void loop() {
dt = clock.getDateTime();
if (memo_secondes!=atoi((clock.dateFormat("s", dt)))){dp=!dp;memo_secondes=atoi((clock.dateFormat("s", dt)));Serial.print("_______________________dp = ");Serial.println(dp);}
//dizaines heures
if ((atoi(clock.dateFormat("H", dt)))>10)
{digit=digit_dizaines_heures;valeur=(atoi(clock.dateFormat("H", dt)))/10;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
else{valeur=0;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
delay(5); //heures
{digit=digit_heures;valeur=((atoi(clock.dateFormat("H", dt)))%10);dgp=dp;aiguillage();dgp=dp;Serial.print(valeur);Serial.print (" ");}
delay(5); //dizaines minutes
if ((atoi(clock.dateFormat("i", dt)))>10)
{digit=digit_dizaines_minutes;valeur=((atoi(clock.dateFormat("i", dt)))/10);dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
else{valeur=0;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
delay(5); //minutes
{digit=digit_minutes;valeur=((atoi(clock.dateFormat("i", dt)))%10);dgp=0;aiguillage();Serial.print(valeur);Serial.println (" ");}
delay(5); //dizaines secondes
/*if ((atoi(clock.dateFormat("s", dt)))>10)
{digit=digit_dizaines_secondes;valeur=((atoi(clock.dateFormat("s", dt)))/10);dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
//secondes
else{valeur=0;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
{digit=digit_secondes;valeur=((atoi(clock.dateFormat("s", dt)))%10);aiguillage();dgp=0;Serial.print(valeur);Serial.println (" ");}
*/
}
void aiguillage()
{
switch (valeur)
{
case 0:// A B C D E F G //chiffre 0
actionDigital(digit,1,1,1,1,1,1,0,dgp);
break ;
case 1:// A B C D E F G //chiffre 1
actionDigital(digit,0,1,1,0,0,0,0,dgp);
break ;
case 2:// A B C D E F G //chiffre 2
actionDigital(digit,1,1,0,1,1,0,1,dgp);
break ;
case 3:// A B C D E F G //chiffre 3
actionDigital(digit,1,1,1,1,0,0,1,dgp);
break ;
case 4:// A B C D E F G //chiffre 4
actionDigital(digit,0,1,1,0,0,1,1,dgp);
break ;
case 5:// A B C D E F G //chiffre 5
actionDigital(digit,1,0,1,1,0,1,1,dgp);
break ;
case 6:// A B C D E F G //chiffre 6
actionDigital(digit,1,0,1,1,1,1,1,dgp);
break ;
case 7:// A B C D E F G //chiffre 7
actionDigital(digit,1,1,1,0,0,0,0,dgp);
break ;
case 8:// A B C D E F G //chiffre 8
actionDigital(digit,1,1,1,1,1,1,1,dgp);
break ;
case 9:// A B C D E F G //chiffre 9
actionDigital(digit,1,1,1,1,0,1,1,dgp);
break ;
default:
break;
}
}
// A B C D E F G
void actionDigital(byte digit,byte un,byte deux,byte trois,byte quatre,byte cinq,byte six,byte sept,byte dgpt)
{
digitalWrite(digit_dizaines_heures, HIGH); //desactive le digit dizaines de heures
digitalWrite(digit_heures, HIGH); //desactive le digit heures
digitalWrite(digit_dizaines_minutes, HIGH); //desactive le digit dizaines de minutes
digitalWrite(digit_minutes, HIGH); //desactive le digit minutes
digitalWrite(digit_dizaines_secondes,HIGH); //desactive le digit dizaines de secondes
digitalWrite(digit_secondes, HIGH); //desactive le digit secondes
digitalWrite(digit, LOW); //active le digit concerne
digitalWrite(segment_a, un); //Segment A
digitalWrite(segment_b, deux); //Segment B
digitalWrite(segment_c, trois); //Segment C
digitalWrite(segment_d, quatre); //Segment D
digitalWrite(segment_e, cinq); //Segment E
digitalWrite(segment_f, six); //Segment F
digitalWrite(segment_g, sept); //Segment G
digitalWrite(segment_dp, dgpt); //Segment digital point
}
@dfg la barre d’espace et le return sont cassés sur votre clavier ?
for (int f = 2; f < 10;f++){pinMode(f,OUTPUT); digitalWrite(f,LOW);}
for (int f = 11;f < 18;f++){pinMode(f,OUTPUT);digitalWrite(f,HIGH);}//Désactivation de tous les digits
for (int f= 0;f<10;f++){//inscrit un trait horizontal sur les digits
digit=digit_dizaines_heures;valeur=f;aiguillage();delay(200);// inscrit zéro sur les dizaines heures
digit=digit_heures;valeur=f;aiguillage();delay(200); // inscrit zéro sur les heures
digit=digit_dizaines_minutes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les dizaines minutes
digit=digit_minutes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les minutes
//digit=digit_dizaines_secondes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les dizaines secondes
//digit=digit_secondes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les secondes
}
c’est un peu dense à lire, non?
hello JM
c'est une vieille habitude.
lorsque qu'une partie de code est opérationnelle, je la "tasse bien" de façon à ce qu'elle prenne le moins de lignes possible.
lorsqu'il faut parcourir l'écran, c'est moins rasoir si le programme est court.
il m'arrive aussi de déplacer ces parties opérationnelles dans d'autres onglets, tout en sachant que je n'aurais plus à les regarder.
OK
Pas super simple à lire quand c’est posté ici
Il y a des éditeurs de code qui permettent de « replier » des blocs de texte c’est pratique pour cela mais l’IDE arduino ne le fait pas en effet
Perso je préfère la lisibilité à la longueur avec une bonne souris on scroll vite
dernière correction, dans la loop:
l'affichage ne fonctionnait pas correctement quand le nombre d'heures ou de minutes était inférieur à 10
void loop() {
dt = clock.getDateTime();
if (memo_secondes!=atoi((clock.dateFormat("s", dt)))){dp=!dp;memo_secondes=atoi((clock.dateFormat("s", dt)));Serial.print("_______________________dp = ");Serial.println(dp);}
//dizaines heures
if ((atoi(clock.dateFormat("H", dt)))>=10)
{digit=digit_dizaines_heures;valeur=(((atoi(clock.dateFormat("H", dt)))/10));dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
else{digit=digit_dizaines_heures;valeur=0;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
delay(5); //heures
{digit=digit_heures;valeur=((atoi(clock.dateFormat("H", dt)))%10);dgp=dp;aiguillage();dgp=dp;Serial.print(valeur);Serial.print (" ");}
delay(5); //dizaines minutes
if ((atoi(clock.dateFormat("i", dt)))>=10)
{digit=digit_dizaines_minutes;valeur=((atoi(clock.dateFormat("i", dt)))/10);dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
else{digit=digit_dizaines_minutes;valeur=0;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
delay(5); //minutes
{digit=digit_minutes;valeur=((atoi(clock.dateFormat("i", dt)))%10);dgp=0;aiguillage();dgp=0;Serial.print(valeur);Serial.println (" ");}
delay(5);
/*
//dizaines secondes
if ((atoi(clock.dateFormat("s", dt)))>=10)
{digit=digit_dizaines_secondes;valeur=((atoi(clock.dateFormat("s", dt)))/10);dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
else{digit=digit_dizaines_secondes;valeur=0;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
delay(5);//secondes
{digit=digit_secondes;valeur=((atoi(clock.dateFormat("s", dt)))%10);aiguillage();dgp=0;Serial.print(valeur);Serial.println (" ");}
delay(5);
*/
}
Ok je testerais sa plus tard mais est-ce qu'il y a moyen que vous m'écriviez tout le câblage ?
Exemple :
BROCHES DIGITS ARDUINO
1 A1
2 2
ect ...
Sa serais vraiment cool de votre part meme si vous en avez fait beaucoup pour moi jusqu'a présent.
Cordialement,
rappel: les afficheurs 7 segments ne sont qu'un ensemble de leds
ces leds doivent etre limitées en courant sous peine de destruction.(de la led et/ou de la sortie du µ)
il faut mettre des leds de limitation sur les segments a,b,c,d,e,f,g,dp.
perso j'ai mis des 270 ohms.
va voir sur ce lien ICI, tu y verras un schéma de cablage correct.
convention de numérotation des pinoches de l'afficheur
l'afficheur dans le sens de la lecture des chiffres, façade vers toi.
en bas à gauche nous mettons le N°1 puis en suivant vers la droite il y a les n° 2,3,4,5,6
au dessus du 6, c'est à dire en haut à droite, il y a le 7 puis en continuant vers la gauche il y a le 8,9,10,11,12.
autrement dit on démarre en bas à gauche et on numérote en sens inverse des aiguilles d'une montre.
pattes arduino 10 2 7 11 12 3
role de la patte K1 a f K2 K3 b
pattes afficheur 12 11 10 9 8 7
AFFICHEUR 420561
pattes afficheur 1 2 3 4 5 6
role de la patte e d dp c g K4
pattes arduino 6 5 9 4 8 14
K1, K2, K3, K4 sont les cathodes des digits 1, 2, 3, 4
digit 1 est pour les dizaines d'heure
digit 2 est pour les heures
digit 3 est pour les dizaines de minute
digit 4 est pour les minutes
rappel dans le programme tu risques d'avoir la version que j'ai corrigée suite à mon prob avec D10
donc la connection de D10 sera à mettre en conformité dans le programme:
en ligne 16 du prg, il faudra remplacer =15 par =10
et en ligne 21, il faudra remplacer =10 par =15
je te rappelle que 14 arduino est A0 .
tu ne cableras pas 15 et 16 car tu n'affiches pas des secondes
au demarrage, les digits doivent chacun à leur tour , de gauche à droite, afficher les chiffres de 0 à 9
s'ils ne le font pas, c'est que tu à un problème de cablage.