Gérer une minuterie avec un potar

Bonjour, me voilà de retour...

Cette fois je dois gérer une minuterie sur 4 afficheurs 7 segments couplés ensemble.
la minuterie se fera de 0 minutes jusqu'à 10 minutes avec une incrémentation de 15 secondes à chaque fois ( 0 sec, 15 sec, 30 sec, 45 sec, 60 sec, etc etc)

et je dois gérer cette minuterie à l'aide d'un potentiomètre.

le déclenchement de la minuterie se fera par l'appui sur un bouton.

Avec ce que j'ai trouvé sur le net et en travaillant un peu je suis arrivé un faire ce système avec 3 boutons : Augmenter la durée de la minuterie, la diminuer et la lancer.

Sachant que le potar va de 0 à 1024 pensez vous que en passant par une fonction map je pourrais mettre à l'echelle que 0 => 0 sec et 1024 => 600 sec (10 min)
et que je peux mettre une fonction pour arrondir si jamais je suis pas dans ma tranche de valeurs prédéfinie par une variable char.

char* tempsAffiche = {" 1", " 3", " 5", " 10", " 15", " 20", " 30", " 45", " 1h", "1h30", " 2h"};
int tempsEnSecondes = {60, 180, 300, 600, 900, 1200, 1800, 2700, 3600, 5400, 7200};
exemple non contractuel

Si mon approche n'est pas correct à votre avis il faut que je me tourne vers quoi ?

Merci d'avance,

Bonjour,

Qu'est ce que tu veux faire?
Une miniterie 0-10mn ou une minuterie 0-2h?

Entre 0 et 10 min j'ai précisé que mon exemple était non contractuelle

Pour aller de 0 à 600 secondes par pas de 15 secondes, en prenant les bornes en compte (c'est à dire 0 et 600) il te faut 600/15+1 = 41 valeurs.

Le potentiomètre va de 0 à 1023 compris. Tu veux 41 intervalles qui auront une taille de 1023/41 = 24.95. Donc le plus simple c'est de diviser la valeur analogique lue sur la pin du potentiomètre et diviser par 25.

Si la valeur lue est entre 0 et 24 tu auras 0, entre 25 et 49 tu auras 1 ... entre 975 et 999 tu auras 39 et à partir de 1000 tu auras 40. En multipliant ce nombre par 15 tu auras ton nombre de secondes de 0 à 600.

int secondes = analogRead (A0) /41*15;

Tu peux mettre ta valeur à l'échelle pas

 int cpt = analogRead(A0) * 600L / 1023;

Si tu veux (vraiment) varier par pas de 15s tu fais une division entière par 15 suivi d'une multiplication par 15

 int cpt = (analogRead(A0) * 600L / 1023 / 15) * 15;