Libreria SevSeg

Buonasera a tutti, sto cercando di costruire un cronometro utilizzando 4 display a 7 segmenti e la libreria <SevSeg,h>.

Nessun problema a programmarne la partenza, non sono invece stato capace di fermare il conteggio nonostante svariati tentativi.

Qualcuno mi può indicare dove guardare per trovare la soluzione?

Allego programma provvisorio sin qui elaborato.

/* SevSeg Counter Example
  OK, compaiono gli zeri e parte con "c" in lavorazione

*/

#include "SevSeg.h"
SevSeg sevseg; //Instantiate a seven segment controller object
char comando;
String stringa;
static int deciSeconds = 0;

#define MAX_NUMBER_STRINGS 12
#define MAX_STRING_SIZE 8
char testStrings[MAX_NUMBER_STRINGS][MAX_STRING_SIZE];
#define PATTERN_CHANGE_TIME 2000
unsigned long timer = millis() - PATTERN_CHANGE_TIME;
byte testStringsPos = 0;


void setup() {
  Serial.begin(9600);
  byte numDigits = 4;
  byte digitPins[] = {13, 12, 11, 10};
  byte segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
  bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
  byte hardwareConfig = COMMON_CATHODE; // See README.md for options
  bool updateWithDelays = false; // Default 'false' is Recommended
  bool leadingZeros = true; // 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(10);
}

void loop() {
  strcpy(testStrings[0], "0000");
  sevseg.setChars(testStrings[0]);
  sevseg.refreshDisplay(); // Must run repeatedly
  comando = Serial.read();
  if (comando == 'c') {
    while (comando == 'c') {
      vai();
    }
  }
}

void vai() {

  static unsigned long timer = millis();
  static int deciSeconds = 0;

  if (millis() - timer >= 100) {
    timer += 100;
    deciSeconds++; // 100 milliSeconds is equal to 1 deciSecond

    if (deciSeconds == 10000) { // Reset to 0 after counting for 1000 seconds.
      deciSeconds = 0;
    }
    sevseg.setNumber(deciSeconds, 1);
  }
  sevseg.refreshDisplay(); // Must run repeatedly
}

Un preventivo grazie per ogni indicazione.

Enrico

[code]
        while (Serial.read() >= 0); 
                      
[code]

Per ripartire ho inserito questa istruzione di reset.

Devi fare qualcosa che disattivi l'incremento timer+=100 quando premi un tasto: quando premi quel tasto, stop=1 e poi metti
if (stop==0) timer+=100;

Grazie, stasera provo.

Perfetto, ancora grazie..

Ora ci devo lavorare per incrementare ulteriori funzioni.

Enrico