/* 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};
unsigned long my_bin_array[16]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767};
char buffer[5];
unsigned long affichage =0;
bool b1pressed=false;
const int boutonPin2 = A1;
Button boutonPin1(13);
unsigned long currentMillis =0;
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);
boutonPin1.begin();
boutonPin1.set_repeat(500, 200);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
Serial.begin(9600);
currentMillis = millis();
Serial.print("demarrage:");Serial.println((long)currentMillis);
sprintf(buffer, "%04d", "0000");
}
/**********************************************/
void loop() {
//Serial.println("aaaa bt1pressed:"); Serial.println(b1pressed);
if (b1pressed) {
if (boutonPin1.pressed()) {
b1pressed=false;
currentMillis=0;
sevseg.setChars("0000");sevseg.refreshDisplay(); delay(1000);
}
sprintf(buffer, "%04d", affichage);
sevseg.setChars(buffer);
sevseg.refreshDisplay();
}
else
{currentMillis++;
if (boutonPin1.pressed()) {
b1pressed=true;
}
elapsedMillis = currentMillis;
//unsigned long minutes = elapsedMillis / 60000;
unsigned long secondes = (elapsedMillis % 6000)/100;
unsigned long millisecondes = elapsedMillis % 100;
affichage = (millisecondes)+ (secondes*100);
snprintf(buffer, sizeof(buffer), "%04d", affichage);
sevseg.setChars(buffer);
sevseg.refreshDisplay();
//unsigned char[] ax ='B'+ String(my_bin_array[secondes], BIN);my_bin_array[secondes]
//Serial.println(secondes);
//Serial.println(ax);
//delay1++;
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST,1024);//datArray1[secondes]
digitalWrite(latchPin, HIGH);
}
delay(10);
}
unsigned char countOnes(int sec) {
unsigned char result[16] ;
result[0]='B';
// Parcourir chaque caractère jusqu'à la fin de la chaîne (caractère nul '\0')
for (int i = 1; i <=16 ; i++) {
result [i]= (i <= sec ? "1" : "0");
}
return result;
}