Merci beaucoup J-M-L pour la réponse mais j'ai toujours le même souci.
Après vérification j'ai bien la librairie de Dean Reading et dans le doute, j'ai pris la dernière version.
Après moult essais à trifouiller mes branchements, il s'avère que la doc est fausse, en effet les 2 points de séparations sont câblés avec le Digit 2 et non le 1.
J'ai regardé aussi le BlinkWithoutDelay et effectivement je pense que ça peut m'aider parce que lorsque j'utilise ce code :
const int ledPin = 6;// branchemet pin pour separation
int digit = 13; // branchement digit2
// Variables will change:
int ledState = LOW; // etat separtion bas
int stat = HIGH; // etat digit haut
// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0; // will store last time LED was updated
// constants won't change:
const long interval = 500; // interval at which to blink (milliseconds)
void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
pinMode(digit, OUTPUT);
digitalWrite(digit, stat); // digit toujours a l'etat haut
}
void loop() {
// here is where you'd put code that needs to be running all the time.
// check to see if it's time to blink the LED; that is, if the difference
// between the current time and last time you blinked the LED is bigger than
// the interval at which you want to blink the LED.
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
}
J'ai bien mes séparations qui clignotent (j'ai aussi testé à coté avec une LED).
Par contre quand j'intègre ce code au mien :
// Importation biblio sevseg
#include "SevSeg.h"
// assignation 7-segment
SevSeg sevseg;
// Assignation bouton chronometre : play/pause bouton 1 et reset bouton 2
int pinBouton1 = 3;
int pinBouton2 = 2;
// Variable pour definir si le chrono est en route
boolean run = false;
// Definition des etats boutons
int etatBouton1 = LOW;
int lastEtatBouton1 = LOW;
int etatBouton2 = LOW;
int lastEtatBouton2 = LOW;
long lastPressedBtn1 = 0;
long lastPressedBtn2 = 0;
// Variables utiles
long timer = 0;
int tenth = 0;
int secondes = 0;
int minutes = 0;
int heures = 0;
//**********************
// Variables will change:
const int ledPin = 6; // separation
int digit = 13; // digit2
int ledState = LOW; // ledState used to set the LED
int stat = HIGH;
// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;
const long interval = 500;
//**********************
void setup(){
Serial.begin(9600);
byte numDigits = 4; // 7segments avec 4 digits
byte digitPins[] = {12, 13, A0, A1}; // Correspondance 7segments : Digit1 Digit2 Digit3 Digit4
byte segmentPins[] = {11, 9, 7, 5, 4, 10, 8, 6}; // Correspondance 7segments : A B C D E F DP
bool resistorsOnSegments = false; // 'false' => resistances sur les pins digitales
byte hardwareConfig = COMMON_ANODE;
bool updateWithDelays = false; // Default. Recommended
bool leadingZeros = false; // Mettre 'true' pour afficher les 0 'avant' les chiffres
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
sevseg.setBrightness(90);
//**************
pinMode(ledPin, OUTPUT);
pinMode(digit, OUTPUT);
digitalWrite(digit, stat);
//***************
}
void loop(){
if((timer - millis()/100) >= 100 || timer == 0)
{
if(run)
{
//*********************
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
//*********************
//****************
// POUR DEBUGGING
affichage();
//***************
// afficher les minutes et secondes sur afficheur 7 segments
sevseg.setNumber(minutes * 100 + secondes, 0);
if(tenth == 9)
{
tenth = 0;
if(secondes == 59)
{
secondes = 0;
minutes++;
}
else if(minutes == 59)
{
minutes = 0;
heures++;
}
else
{
secondes++;
}
}
else
{
tenth++;
}
}
timer = millis()/100;
}
etatBouton1 = digitalRead(pinBouton1);
etatBouton2 = digitalRead(pinBouton2);
if(etatBouton1 != lastEtatBouton1) // Verifier si l'etat bouton1 a change
{
if(etatBouton1 == HIGH && (millis()-lastEtatBouton1) > 100 || lastEtatBouton1 == 0)
{
lastPressedBtn1 = millis();
run = !run; // Changement d'etat entre play et pause
}
}
lastEtatBouton1 = etatBouton1; // Recuperer etat bouton1 comme dernier etat bouton1
if(etatBouton2 != lastEtatBouton2) // Verifier si l'etat bouton2 a change
{
if(etatBouton2 == HIGH && (millis()-lastEtatBouton2) > 100 || lastEtatBouton2 == 0) // Remise a 0
{
lastPressedBtn2 = millis();
run = false;
secondes = 0;
minutes = 0;
heures = 0;
tenth = 0;
//****************
// POUR DEBUGGING
affichage();
//***************
// afficher les minutes et secondes sur afficheur 7 segments
sevseg.setNumber(minutes * 100 + secondes, 0);
}
}
lastEtatBouton2 = etatBouton2; // Recuperer etat bouton2 comme dernier etat bouton2
sevseg.refreshDisplay();
}
void affichage()
{
// Affichage Serial
if(heures < 10) // Si les heures n'ont pas 2 digits
{
Serial.print("0");
}
Serial.print(heures);
Serial.print(":");
if(minutes < 10) // Si les minutes n'ont pas 2 digits
{
Serial.print("0");
}
Serial.print(minutes);
Serial.print(":");
if(secondes < 10) // Si les secondes n'ont pas 2 digits
{
Serial.print("0");
}
Serial.print(secondes);
Serial.print(".");
Serial.println(tenth);
}
Les séparations ne clignotent pas et même ne s'allument pas alors que ma LED test est allumée...
Petite précision j'ai bien mis les mêmes valeurs de résistances pour les séparations et LED test.
Je pense que ce qui pose problème dans ce dernier code c'est que je définis une 1ere fois le digit2 sur 13 et que je le définis une seconde fois avec "byte digitPins[] = {12, 13, A0, A1}; "
De même pour la séparation définie sur 6 une première fois et une seconde fois.
Enfin, j'ai également essayé d'accéder à la séparation de cette façon "segmentPins[7]" en citant l'index dans le tableau mais sans succès.
Tu m'as dit que Sevseg doit normalement pouvoir gérer les 2 points de séparation, as-tu une idée de comment y accéder ? Car je pense que c'est la clé pour ne serait-ce que les allumer avant de réussir à les faire clignoter.
Ne pas hésiter à me dire si des précisions manquent dans le post