/* SevSeg Counter Example
Copyright 2020 Dean Reading
This example demonstrates a very simple use of the SevSeg library with a 4
digit display. It displays a counter that counts up, showing deci-seconds.
*/
#include "Button.h"
#include "SevSeg.h"
SevSeg sevseg; //Instantiate a seven segment controller object
// Définir le bouton
const int tDelay = 100; // delay between LED switching
const int dataPin = A1; // DS - data serial
const int latchPin = A2; // ST_CP - storage register, latch clock pin
const int clockPin = A3; // SH_CP - shift register clock pin
/* ***************************************************
* Global Variables *
*************************************************** */
bool DirectionState = 0;
/* ***************************************************
* Functions *
*************************************************** */
int datArray[16] = {B11111100, B01100000, B11011010, B11110010, B01100110, B10110110, B10111110, B11100000, B11111110, B11110110, B11101110, B00111110, B10011100, B01111010, B10011110, B10001110};
const int boutonPin2 = A1;
Button boutonPin1(13);
bool enCours = false;
int statut_A1=0;
int old_statut_A1=0;
// Indicateur de l'état du chronomètre (true = en cours, false = arrêté)
unsigned long startMillis = 0; // Temps de départ
unsigned long elapsedMillis = 0; // Temps écoulé
void setup() {
byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5};
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, A0};
bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
byte hardwareConfig = COMMON_ANODE; // See README.md for options
bool updateWithDelays = false; // Default 'false' is Recommended
bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
bool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't connected
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90);
// Attacher l'interruption pour le bouton (pour démarrer/arrêter le chrono)
//attachInterrupt(digitalPinToInterrupt(boutonPin), toggleChrono, FALLING);
Serial.begin(9600);
boutonPin1.begin();
boutonPin1.set_repeat(500, 200);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
Serial.println("binaryString");
}
char buffer[4];
int affichage =0;
char bf[32];
bool b1pressed=false;
int delay1=0;
void loop() {
if (b1pressed) {
if (boutonPin1.pressed()) {
b1pressed=false;
}
startMillis=millis() ;
//sevseg.setNumber(affichage); // Afficher les minutes et secondes
//sevseg.refreshDisplay(); // Rafraîchir l'affichage
sprintf(buffer, "%04d", affichage);
sevseg.setChars(buffer);
sevseg.refreshDisplay();
}
else{
if (boutonPin1.pressed()) {
b1pressed=true;
}
elapsedMillis = millis() - startMillis;
// Afficher le temps en format mm:ss.ddd (minutes, secondes, millisecondes)
unsigned long minutes = elapsedMillis / 60000;
unsigned long secondes = (elapsedMillis % 60000) / 10;
unsigned long millisecondes = elapsedMillis % 1000;
// Affichage sur l'afficheur
// Nous affichons les minutes, secondes et millisecondes sous forme d'un nombre entier
affichage = (minutes * 100) + secondes;
//sevseg.setNumber(affichage); // Afficher les minutes et secondes
//sevseg.refreshDisplay(); // Rafraîchir l'affichage
sprintf(buffer, "%04d", affichage);
sevseg.setChars(buffer);
sevseg.refreshDisplay();
}
delay(10);
delay1++;
//int num = delay1/1000;
// ST_CP LOW to keep LEDs from changing while reading serial data
digitalWrite(latchPin, LOW);
// Shift out the bits
//shiftOut(dataPin, clockPin, MSBFIRST, datArray[num]);
// byte binaryString = convertToBinaryByte("0000");
shiftOut(dataPin, clockPin, MSBFIRST, 0B111111001111110011111100);
// ST_CP HIGH change LEDs
digitalWrite(latchPin, HIGH);
// if(delay1==16000){delay1=0;}
}
// Fonction qui prend une chaîne de 4 caractères et la convertit en binaire
byte convertToBinaryByte(String input) {
byte result = 0; // Initialisation du byte pour stocker la valeur binaire
for (int i = 0; i < input.length(); i++) {
result <<= 1; // Décaler à gauche pour faire de la place pour un nouveau bit
result |= (input.charAt(i) == '1') ? 1 : 0; // Ajouter le bit 0 ou 1
}
Serial.println(result);
return result;
}